0


面试官 求求别再问我MySQL了<一>

引言

相关JDBC的在之前的博客已经更新过,这里就不直接细说了,SSM框架就已经整合了JDBC的代码,解决的代码冗杂的问题,所以要细看的可以看我之前更新的思维导图,应该是比较早之前了,这个系列的话我打算先花三篇整体过一遍MySQL语句的书写例子,然后之后再每天更一下自己对MySQL运行原理的理解,我感觉的话可能要花两个月的时间,也当是对自己的一种要求和对知识的巩固,因为都是自己看视频和相关文档自学的,可能也存在一些问题,所大家有兴趣的话可以一起交流呀,努力,加油哦~

MySQL数据库的基本知识别的博主说的都很好,咱不献丑了,不逼Bi赖Lai直接单刀直入说操作

因为工作,看书,可能排版会有一些问题啥的,但是我相信那都不是问题,你们肯定看的懂嘿嘿嘿

SQL分类

数据查询语言(Data Query Language,DQL):

DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据

数据操作语言(Data Manipulation Language,DML):

DML主要用于对数据 增加、修改和删除的操作

主要包括: INSERT:增加数据 UPDATE:修改数据 DELETE:删除数据

数据定义语言(Data Definition Language,DDL):

DDL主要用针对是数据库对象(数据库、表、索引、视图)进行创建, 修改和删除操作

主要包括: CREATE:创建 ALTER:修改 DROP:删除

数据控制语言(Data Control Language,DCL):DCL用来授予或回收访问数据库的权限

主要包括: GRANT:授予用户某种权限 REVOKE:回收授予的某种权限

事务控制语言(Transaction Control Language,TCL):TCL用于数据库的事务管理。

主要包括: START TRANSACTION:开启事务 SET TRANSACTION:设置事务的属性

               COMMIT:提交事务         ROLLBACK:回滚事务

一. DDL操作

1.DDl操作数据库

# 查看所有的数据库
show databases;    
# 创建数据库
create database 55kai; 
# 删除数据库
drop database 55kai;

2.DDl操作数据库表

使用语法:

create table 表名(
字段一  数据类型,
字段二  数据类型(长度)   
);
# 注意: 最后一列不要加 , 号 
#      需要长度的类型必需添加  不需要忽略

需求一: 创建商品分类表

表名:category 
表中字段: 
分类id :cid ,为整型 
分类名称:cname,为字符串类型,指定长度20

SQL 实现

-- 切换到数据库 bjsxt01
use 55kai; 
-- 创建表 
create table category( 
cid int, 
cname varchar(20) 
);

需求二: 创建一张学生表

表名: student
表中字段: 
学号:  sid, 整数类型
姓名:  sname, 字符串类型(长度10)
性别:  ssex, 字符串类型固定长度(1)
年龄:  sage, 整数类型
入学日期: sdate, 日期类型 
班级:  sclazz, 字符串类型(长度15)
Email:  semail, 字符串类型(长度25)

SQL实现

-- 创建表
create table student(
    sid int,
    sname varchar(10),
    ssex char(1),
    sage int,
    sdate date,
    sclazz varchar(15),
    semail varchar(25)
);

3.DDL查看数据库表

-- 显示当前数据库的所有数据库表
show tables;
-- 显示当前数据表的结构  desc 表名
desc category;
-- 查看完整的建表语句  show create table 表名
show create table category;

4.DDL删除数据库表

-- 删除当前数据库中的表  drop table 表名;
drop table category;

5.DDL修改数据库表

(1)修改表名

语法格式

rename table 旧表名 to 新表名

需求: 修改学生表名为stu

SQL实现

rename table student to stu;

show tables;

(2)向表中添加字段 关键字 add

语法格式

alert table 表名 add 字段名称 字段类型

需求: 向学生表添加saddr字段 长度为20

SQL实现

alter table stu add saddr varchar(20);  -- 默认添加到最后
alter table stu add saddr1 varchar(20) first; -- 添加到第一个
alter table stu add saddr2 varchar(20) after sage; -- 在sage字段后添加
-- 查看表结构
desc stu;

(3)修改表中字段 关键字 modify | change

**Modify: **修改字段类型, 字段类型长度

语法格式

alert table 表名 modify 字段名称 字段类型;  

需求: 修改学生表中的字段saddr, 修改为scity 长度为10

SQL实现

alter table stu change saddr scity varchar(10);

**(4) ****删除表中字段 关键字 **drop

语法格式

alter table 表名 drop 列名;

需求: 删除学生表 saddr1字段 scity字段 saddr2字段

SQl实现

alter table stu drop saddr1;
alter table stu drop scity;
alter table stu drop saddr2;

二. DML操作表中数据

1.插入数据

语法格式

-- 插入部分字段或全部字段
insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);

-- 插入全部的字段
insert into 表名 values(字段值1,字段值2...);

向学生表中插入数据

方式1: 插入全部字段, 将所有字段名都写出来

insert into stu(sid, sname, ssex, sage, sdate, sclazz, semail) 
values(1,"zs","男",30,"1990-10-10","10班","[email protected]");

方式2: 插入全部字段,可以不写字段名

insert into stu values(2,"ls","男",29,"1991-11-11","10班","[email protected]");

方式3:插入指定字段的值

insert into stu(sid, sname, sage, sdate) values(3,"ww",1,NOW());
insert into stu(sid, sname, sdate) values(4,"wl",SYSDATE());
insert into stu(sid, sdate) values(5,CURRENT_DATE());

-- NOW()  SYSDATE()  CURRENT_DATE() 都为获取当前的时间

注意事项:

  1. 值与字段必须要对应,个数相同&数据类型相同
  2. 值的数据大小,必须在字段指定的长度范围内
  3. varchar char date类型的值必须使用单引号,或者双引号包裹。
  4. 如果要插入空值,可以忽略不写,或者插入null(0和空值不一样的哦)
  5. 如果插入指定字段的值,必须要上写列名
  6. 字符串日期类型支持 "1256-12-23" "1256/12/23" "1256.12.23"

2.更改数据

语法格式

update 表名 set 字段名=值 where 条件(如: 字段名=值)

update 表名 set 字段名=值 -- 慎重: 不加条件更改所有

需求: 将sid为1的学生 ssex改为女

SQL实现

update stu set ssex='女' where sid = 1;

需求: 将sid为2的学生 性别改为女 sage改为30 班级改为11班

SQL实现

update stu set ssex="女", sage=30, sclazz="11班" where sid=2;

3.删除数据

语法格式

delete from 表名 where 条件(如: 字段名=值)
delete from 表名     -- 慎重: 删除表中所有的数据
truncate table 表名;  -- 慎重: 删除表中所有的数据

需求1: 删除sid为5的学生信息

SQL实现

delete from stu where sid = 5;

需求2: 将 stu表数据全部删除

SQL实现

delete from stu;
truncate table stu;  -- 推荐使用

TRUNCATE和DELETE的区别(这个可以记一下,我找工作笔试一道题目就是她)

(1)DELETE为数据操作语言DML;TRUNCATE为数据定义语言DDL。

(2) DELETE操作是将表中所有记录一条一条删除直到删除完;TRUNCATE操作 则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,TRUNCATE操作的效率更高。

(3)DELETE操作可以回滚;TRUNCATE操作会导致隐式提交,因此不能回滚(后 面会讲解事务的提交和回滚)。

(4)DELETE操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。DELETE操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;TRUNCATE操作会重新从1开始自增

三.表的约束

1.约束

约束名

关键字

作用

主键

primary key

不可重复, 不能为空

唯一 + 非空

唯一

unique

不可重复

非空

not null

不能为空

默认值

default

赋予默认值

检查(Mysql8提供)

check

取值范围

外键

foreign key

表与表之间的关系

2.主键约束

语法格式

字段名 字段类型 primary key

需求1: 创建一个带有主键的emp表 字段 eid int ename varchar(10) esex char(1)

SQl实现: 方式一

create table emp(
    eid int primary key,  -- 设置主键 非空唯一
    ename varchar(10),
    esex char(1)
);
-- 查看表结构
desc emp;

SQl实现: 方式二

-- 删除emp表
drop table emp;
create table emp(
    eid int,
    ename varchar(10),
    esex char(1),
    primary key(eid)  -- 指定主键为eid字段
);

SQl实现: 方式三

-- 删除emp表
drop table emp;

create table emp(
    eid int primary key,
    ename varchar(10),
    esex char(1)
);

-- 创建表时不指定主键, 然后通过DDL语句进行设置
alter table emp add primary key(eid);

3.测试主键的唯一 非空约束

-- 插入正常数据
insert into emp values(1,"宋江","男");

-- 插入一条数据, 主键为空
insert into emp values(null,"李逵","男");
-- Column 'eid' cannot be NULL 主键不能为空 

-- 插入一条数据, 主键重复
insert into emp values(1,"孙二娘","女");
-- Duplicate entry '1' for key 'emp.PRIMARY' 主键冲突

4.删除主键约束

-- 使用DDL 删除表中的主键约束
alter table emp drop primary key;

-- 查看表结构
desc emp;

-- 删除唯一约束(了解)
-- 添加了唯一约束为 eid int not null, 通过设置字段属性删除唯一约束 
alter table emp modify eid int;

5.主键自增

语法格式

关键字
auto_increment  
表示自增长(字段类型必须为整数类型)

需求: 为emp表eid字段添加主键约束, 并设置为自增

*(1) 创建主键自增的emp*

drop table emp;

create table emp(
    eid int primary key auto_increment,
    ename varchar(10),
    esex char(1)
);

**(2) **测试主键自增

insert into emp values(null,'zs','n');
insert into emp values(default,'ls','n');
insert into emp(ename, esex) values('ww', 'n');

6.非空约束

语法格式

字段名 字段类型 not null

需求: emp表 eid 主键约束,自增 ename 非空约束

SQL实现

-- 删除存在的emp表 
drop table emp;

create table emp(
    eid int primary key auto_increment,
    ename varchar(10) not null,
    esex char(1)
);
-- 查看emp表结构 
desc emp;
-- 测试非空约束
insert into emp values(default,null,'n');
-- Column 'ename' cannot be null  ename不能为空

7.唯一约束

语法格式

字段名 字段类型 unique

需求: emp表 eid 主键约束,自增 ename 非空约束 esex唯一约束

SQL实现

-- 删除存在的emp表 
drop table emp;
create table emp(
    eid int primary key auto_increment,
    ename varchar(10) not null,
    esex char(1) unique
);
-- 测试唯一约束 添加两个性别为男
insert into emp values(default,'zs','男');
insert into emp values(default,'lisi','男');
-- Duplicate entry 'n' for key 'emp.esex'  esex重复

8.默认值约束

语法格式

字段名 字段类型 default '值'

需求: emp表 eid 主键约束,自增 ename 非空约束 esex默认值'男'

SQL实现

-- 删除存在的emp表 
drop table emp;
create table emp(
    eid int primary key auto_increment,
    ename varchar(10) not null,
    esex char(1) default '男'
);
-- 查看emp表结构 
desc emp;
-- 测试默认值约束
insert into emp values(default,'zs',default);

-- 错误用法
insert into emp values(default,'zs',null); 

9.检查约束

语法格式

字段名 字段类型 check(字段='值' or 字段='值')
字段名 字段类型 check(字段>n or 字段<m)
字段名 字段类型 check(字段>n and 字段<m)

需求: emp表 eid 主键约束,自增 ename 非空约束 esex默认值'男'并检查 男|女

SQL实现

-- 删除存在的emp表 
drop table emp;
create table emp(
    eid int primary key auto_increment,
    ename varchar(10) not null,
    esex char(1) default '男' check(esex='男' or esex='女')
);
-- 查看emp表结构 
desc emp;
-- 测试检查约束
insert into emp values(default,'lisi','n');
-- Check constraint 'emp_chk_1' is violated 不符合字段要求

附加:思维导图

MySQL:关系型数据库管理系统(1) | 八九. | 思维导图(新) | ProcessOn

密码:p3eo


本文转载自: https://blog.csdn.net/weixin_47269879/article/details/124514035
版权归原作者 腊Rou单车 所有, 如有侵权,请联系我们删除。

“面试官 求求别再问我MySQL了<一>”的评论:

还没有评论