复习前面MySQL的基础操作,目的是让我们有印象!!在这篇文章中,我主要写的是数据库的约束和查询操作的详细、深入讲解!
基础操作 (复习->【MySQL】超详细-基础操作)
插入 insert -> insert into 表名 values (值,值...)
查询 select -> select 列名 from 表名
修改 update -> update 表名 set 列名 = 值 where 条件
删除 delete -> delete from 表名 where(删的是数据)
数据库的约束
约束定义
1、not null
表示添加了not null这个约束的列不能存储null值
2、unique
某列如果添加unique约束,那么这一列的值就存在唯一性
3、default
给某列添加默认值
4、primary key
primary key(主键)= not null + unique。主键是一行的身份标识
5、foreign key
foreign key(外键),用于有联系的表之间建立关系
6、check
保证列中的值符合条件
表中添加约束【代码】
我这里简要的写一个学校宿舍管理系统,系统中主要包含了宿舍信息表、学生信息表和每日的宿舍查房记录表。在上面的三张表中,我会在适合的位置添加约束。添加约束的目的是:使校验更严格了,写代码则会减少出错率,提高了开发的效率。
学生信息表
create table student (
student_id int primary key auto_increment,
student_name varchar(20) not null,
gender varchar(2) default '女',
age int,
block_number int,
dormitory_number int,
berth_number int);
primary key,not null,default解析
- primary key 主键,但是我在表中使用的是primary key auto_increment 自增主键。使用的是自增主键的话,当前列就会从最大的那个值开始自增,也可以手动修改值;没有加上auto_increment则不会自增,只能手动新增数据。
- not null 不为空,则student_name这一列的值不能为null。
- default '女' 默认gender这一列为女,就是在不需要添加这一列的情况下为女,想要值为男,则需要手动修改或添加值。
宿舍信息表
create table dormitory (
block_number int,
dormitory_number int,
berth_number int,
id int,
foreign key (id) references student (student_id));
foreign key解析
- foreign key (id) references student (student_id)这句代码的意思就是,子表dormitory的id列受父表student的student_id列所制约。
- 当父表中的列没被引用的时候,就可以被删除;但是父表中的列被子表引用,父表就不能被删掉;所以父表和子表是双向制约的。
- 删除表时,应该先删除子表,再删除父表。
- 应用自父表的那一列,要么时主键,要么是unique。
每日的宿舍查房记录表
create table record (
date_time datetime,
dormitory_supervisor varchar(20),
state varchar(5) default '未归寝',
id int unique,
foreign key (id) references student (student_id));
详细查询
1、插入与查询相结合
普通插入:
insert into 表1 values (值1,值2,...);#向表1中插入值
普通查询:
select * from 表2;#查询表2中所有的数据
插入与查询相结合:
1、insert into 表1(列名1,列名,...) select 列名1,列名2,... from 表2; #将表2中查询到的结果插入到表1中;
2、insert into 表1 select * from 表2; #将表2中查询到的结果全部插入到表1中;
注意:
1、查询的值的类型,顺序,个数,必须和要插入的表相匹配!!!
2、括号在 SQL 中用于分组表达式或子查询,而不是用于列名!!
2、聚合查询
聚合查询:行与行之间的运算;
表达式查询:列和列之间的运算;
1、count
count和后面的括号中间不能加空格!!!
2、sum
3、avg
4、max/min 最大值/最小值