目录
约束条件
主键
1.定义:InnoDB存储引擎规定每个表都存在有且只有一个主键 不被指定时InnoDB存储引擎会提供一个隐藏的字段作为主键(主键就相当于目录 可以通过它快速找到想要的数据)
2.主键指定的命令
2.1 单从约束条件上而言 not null 与unique连用=primary key主键(key=PRI)
创建表:create table t1(id int not null unique,
name varchar(32),
age int)
结果:id(key=PRI)
2.2 主键命令:primary key指定主键(key=PRI)
创建表:create table t2(id int primary key,
name varchar(32),
age int)
结果:id(key=PRI)
2.3 约束条件与主键命令的区别:primary key只能有一个 not null与unique连用可以存在多个
创建表:create table t3(id int primary key,
name varchar(32) not null unique,
age int)
结果:id(key=PRI) name(key=UNI)
2.4 创建表时应该有一个’id’字段 并且将该字段作为主键
id int primary key 单例主键
sid int,nid int primary key(sid,nid) 联合主键
auto_increment自增
该约束条件不能单独使用 必须跟在键的后面(主要是配合主键一起使用)
创建表:create table t4(id int primary key auto_increment,
name varchar(32));
添加数据:insert into t4(name) values('jason'),('lili');
结果:id自增
注:必须指定添加的数据 不然会报错
自增的操作不会因为执行删除数据的操作而重置或后退
重置的话需要格式化:命令 truncate 表名;
外键
1.定义:记录表与表中存在关系
一对一、一对多、多对多、没有关系 四种情况
2.命令:Foreign Key
3.表的创建:
3.1 先创建被关联的表(没有外键的表)然后再创建关联表(有外键的表)
3.2 插入数据时 针对外键字段只能填写被关联表字段已经出现过的数据值
3.3 被关联字段无法修改和删除(操作限制性太强)
3.4 级联更新、级联删除:被关联数据一旦变动 关联的数据同步变动
级联跟新:on update cascade
级联删除:on delete cascade
注:在实际工作中 很多时候可能并不会使用外键
因为外键增加了表之间的耦合度 不便于单独操作 资源消耗增加
通过写SQL建立代码层面的关系
一对一
从不同表的角度出发 判断彼此之间的关系(例如员工表与薪资表是一对一的关系)
注:一对一在哪一方都可以建外键 但为了方便查询 一般放在查询频率较高的一方
员工信息表
id | name | gender | join_date | sal_id |
---|---|---|---|---|
1 | lili | female | 2022-08-16 | 1 |
薪资表
id | sealary |
---|---|
1 | 99 |
创建员工表:create table emp(id int primary key,
name varchar(32),
gender enum('meal','female'),
join_date datetime,
sal_id int unique,
foreign key(sal_id) references sal(id)
on update cascade
on delete cascade);
创建薪资表:create table sal(id int primary key,
salary int);
薪资表添加数据:insert into sal values(1,99);
员工表添加数据:inster into emp values(1,'lili','female','2022-08-16 12:00:00',1)
一对多
从不同表的角度出发 判断彼此之间的关系(例如学生表与班级表是一对多的关系 一个学生只能属于一个班级 但一个班级可以有多个学生)
注:一对多外键建在多的一方 只有一对多的关系 没有多对一
学生表
id | name | gerden | age | cla_id |
---|---|---|---|---|
1 | lili | female | 18 | 1 |
2 | tom | female | 18 | 1 |
班级表
id | name |
---|---|
1 | 三班 |
创建表
学生表:create table students(id int primary key auto_increment,
name varchar(32),
gerden enum('meal','female'),
age int,cla_id int,
foreign key(cla_id) references class(id)
on update cascade
on delete cascade);
班级表:create table class(id int primary key auto_increment,
class varchar(32));
添加数据
班级表:insert into class(class) values('六班');
学生表:insert into students(name,gerden,age,cla_id) values('lili','female',22,1);
多对多
从不同表的角度出发 判断彼此之间的关系(例如书籍表与出版社表是多对多的关系)
注:多对多关系 外键字段不能建在任意一方 需要通过第三张表建外键字段形成连接
书籍表
id | name |
---|---|
1 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/281001.html 赞 (0)
20220816 第一组 于芮 数据库查询(第三十二天)
上一篇
2022年8月17日
Centos8.2安装docker
下一篇
2022年8月17日
|