8.4总结
1.数据库基础知识
- 创建和查看数据库
- 创建数据库
create database 数据库名- 查看数据库
- 查看已经存在的数据库
show databases- 查看创建好的数据库
show create database 数据库名
修改数据库
- 修改数据库编码方式
alter database 数据库名 default character set 编码方式删除数据库
drop database 数据库名
2.数据表的基本操作
- 创建数据表
Create table 表名
( 字段名1 数据类型 [完整性约束条件],
字段名2 数据类型 [完整性约束条件],
字段名n 数据类型 [完整性约束条件], )- 查看数据表
- show tables
- show create table 表名
- desc 表名
- 修改数据表
- 修改表名
- alter table 旧表名 rename to 新表名
- 修改字段名
- alter table 表名 change 旧字段名 新字段名 新数据类型
- 修改字段的数据类型
- alter table 表名 modify 字段名 数据类型
- 添加字段
- alter table 表名 add 新字段名 数据类型
- 删除字段
- alter table 表名 drop 字段名
- 修改字段的排列位置
- alter table 表名 modify 字段名 1 数据类型 first|after 字段名2
- 删除数据表
- drop table 表名
3.表的约束
- 主键约束、非空约束、唯一约束、默认约束、外键约束
主要看下外键约束- 一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
- 在INSERT时,如果被外键约束的值在参考列中没有对应,则INSERT失败。
- 空、RESTRICT、NO ACTION(立即检查外键约束) 删除:从表记录不存在时,主表才可以删除。删除从表,主表不变 更新:从表记录不存在时,主表才可以更新。更新从表,主表不变。
- CASCADE 删除:删除主表时自动删除从表。删除从表,主表不变 更新:更新主表时自动更新从表。更新从表,主表不变。
- SET NULL 删除:删除主表时自动更新从表值为NULL。删除从表,主表不变 更新:更新主表时自动更新从表值为NULL。更新从表,主表不变。
4.数据的基本操作
添加数据
insert into 表名(字段名1,字段名2,….)
values(值1,值2,……);insert into 表名[(字段名1,字段名2,…)]
values(值1,值2,…),(值1,值2,…),…- insert into 表名(字段1,字段2,…)values(值1,值2,…)
- 更新数据
- update更新部分数据
- update 表名
set 字段名1=值1[,字段名2=值2,…]
[where 条件表达式]- 在update语句中如果没有使用where子句,则会将表中所有记录的指定字段都进行更新。
- 删除数据
- delete删除部分数据
- delete from 表名 where 条件表达式
- delete删除全部数据
- delete from 表名
- truncate删除全部数据
- truncate table 表名
- 二者区别
- delete语句是dml语句,truncate语句通常被认为是ddl语句。
- delete语句后面可以跟where子句,通过指定where子句中的条件表达式只删除满足条件的部分记录,而truncate语句只能用于删除表中的所有记录。
- 使用truncate语句删除表中的数据后,再次向表中添加记录时,自动增加字段默认初始化值重新从1开始,而使用delete语句删除表中的所有记录后,再次向表中添加记录时,自动增加字段的值为删除时该字段的最大值加1.
5.单表查询
- 简单查询
- Select [distinct] * | {字段名1,字段名2,字段名3,…}
from 表名
[where 条件表达式1]
[group by 字段名 [having 条件表达式2]]
[order by 字段名 [asc | desc]]
[limit [offset] 记录数]
distinct是可选参数,用于剔除查询结果中重复的数据。having也是可选参数,用于对分组后的结果进行过滤。order by也是可选参数,用于将查询结果按照指定字段进行排序,asc升序,desc降序,如果不指定,默认为升序排列。 Limit是可选参数,用于限制查询结果的数量,limit后面可以跟两个参数,第一个参数offset表示偏移量,如果为0,则查询结果从第一条记录开始,第二个参数“记录数”表示返回查询记录的条数。按条件查询
- 带关系运算符的查询、带in关键字的查询、带between and 关键字的查询、空值查询(is null)、带distinct关键字的查询、带like关键字的查询(% _)、带and关键字的多条件查询、带or关键字的多条件查询
- or和and一起使用的情况
注意:and的优先级高于or,因此当两者在一起使用时,应该先运算and两边的条件,再运算or两边的条件分组查询
- select 字段名1,字段名2,…from 表名
group by字段名1,字段名2,..[having 条件表达式]
- 注意:Having关键字和where关键字的作用相同,都用于设置条件表达式对查询结果进行过滤,两者的区别在于,having关键字后可以跟聚合函数,而where不能,通常情况下having关键字都和group by 一起使用,用于对分组后的结果进行过滤。
6.多表查询
- 外连接(左连接、右连接、完全外连接(MySQL不支持))、内连接(inner join )、交叉连接(cross join)、两表关系为一对多,多对一或多对多时的连接语句。
- 多表查询案例
- 1.从student表中查询年龄27~30岁的学生信息
- (1)select * from student
where year(now())-birth>=27 and year(now())-birth<=30- (2) alter table student add age int(10)
update student set age=year(now())-birth
select * from student where age between 27 and 30- 2.计算每个学生的总成绩
- (1) select name,sum(grade) from student left join score on student.id=score.stu_id group by student.id
- (2) select name,sum(grade) from student,score where student.id=score.stu_id group by student.id