面试官 求求别再问我MySQL了<一>
目录
引言
SQL分类
一. DDL操作
1.DDl操作数据库
2.DDl操作数据库表
3.DDL查看数据库表
4.DDL删除数据库表
5.DDL修改数据库表
(1)修改表名
(2)向表中添加字段 关键字 add
(3)修改表中字段 关键字 modify | change
二. DML操作表中数据
1.插入数据
2.更改数据
3.删除数据
三.表的约束
1.约束
2.主键约束
3.测试主键的唯一 非空约束
4.删除主键约束
5.主键自增
(1) 创建主键自增的emp表
(2) 测试主键自增
6.非空约束
7.唯一约束
8.默认值约束
9.检查约束
附加:思维导图
引言
相关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 实现
-- 切换到数据库 bjsxt01use 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班","xx@xx.com");
方式2: 插入全部字段,可以不写字段名
insert into stu values(2,"ls","男",29,"1991-11-11","10班","xx@xx.com");
方式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() 都为获取当前的时间
注意事项:
- 值与字段必须要对应,个数相同&数据类型相同
- 值的数据大小,必须在字段指定的长度范围内
- varchar char date类型的值必须使用单引号,或者双引号包裹。
- 如果要插入空值,可以忽略不写,或者插入null(0和空值不一样的哦)
- 如果插入指定字段的值,必须要上写列名
- 字符串日期类型支持 "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 字段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