MySQL进阶part2
约束条件
unique——唯一
# 单列唯一create table t3(id int unique, name char(16));insert into t3 values(1,‘jason‘),(1,‘egon‘);insert into t3 values(1,‘jason‘),(2,‘egon‘);
# 联合唯一(两个分开都可以重复 但是加载一起必须是唯一的)create table t4(id int, ip char(16), port int, unique(ip,port));insert into t4 values(1,‘127.0.0.1‘,8080);insert into t4 values(2,‘127.0.0.1‘,8081);insert into t4 values(3,‘127.0.0.2‘,8080);insert into t4 values(4,‘127.0.0.1‘,8080); 报错
primary key 主键(非空切唯一)
create table t5(id int primary key);insert into t5 values(null); # 错误insert into t5 values(1),(1); # 重复错误insert into t5 values(1),(2); ps:在创建表的时候id字段一定要加primary key
auto_increment(自增)
# 编号太多的情况下适用create table t8(id int primary key aotu_increment,name char(16));ps:在创建表的时候id字段一定要加primary key aotu_incrementdelete 删除表中的数据之后 主键的自增不会归零truncate t8 可以清空数据,并且重置主键
表和表之间的关系
问题:在一张员工信息表中 有许多字段id name gender dep_name dep_desc如何优化其扩展性解决方案——拆分
外键
帮助我们建立表与表之间的关系foreign key
表的关系
1.一对多2.多对多3.一对一4.无关
ps:如何判断两张表的关系?换位思考——站在两张表的角度思考?员工表与部门表为例先站在员工表 思考一个员工能否对应多个部门(一条员工数据能否对应多条部门数据) 不能!!! (不能直接得出结论 一定要两张表都考虑完全)再站在部门表 思考一个部门能否对应多个员工(一个部门数据能否对应多条员工数据) 能!!!得出结论 员工表与部门表示单向的一对多 所以表关系就是一对多
一对多关系
foreign key1.外键字段建立在多的一方(使用的次数多)2.在创建时期 先创建被关联的表3.录入数据时期 也录入被关联的表
# 先创被关联的表create table dep(id int primary key aotu_increment,dep_name char(16),dep_desc char(32));?# 再创关联表create table emp(id int primary key aotu_increment,name char(16),gender enum(‘male‘,‘famale‘) default‘male‘,foreign key(dep_id) referrences dep(id));?# 先录入被关联的表insert into dep(dep_name,dep_desc) values(‘sb教学部‘,‘教书育人‘),(‘外交部‘,‘多人外交‘),(‘nb技术部‘,‘技术能力有限部门‘);# 再录入员工表insert into emp(name,dep_id) values(‘jason‘,2),(‘egon‘,1),(‘tank‘,1),(‘kevin‘,3);
ps:在关联了表关系之后,不可以修改被关联的数据的字段如需要修改,需要先删除被关联数据(教学部)对应的数据(教学部的员工数据)再删除部门数据。
级联更新 >>> 同步更新级联删除 >>> 同步删除
create table dep(id int primary key auto_increment, dep_name char(16), dep_desc char(32));create table emp(id int primary key auto_increment, name char(16), gender enum(‘male‘,‘female‘,‘others‘) default ‘male‘, dep_id int, foreign key(dep_id) references dep(id) on update cascade # 同步更新 on delete cascade # 同步删除);insert into dep(dep_name,dep_desc) values(‘sb教学部‘,‘教书育人‘),(‘外交部‘,‘多人外交‘),(‘nb技术部‘,‘技术能力有限部门‘);insert into emp(name,dep_id) values(‘jason‘,2),(‘egon‘,1),(‘tank‘,1),(‘kevin‘,3);
多对多关系
# 图书和作者表create table book(id int primary key aotu_increment,title varchar(16),price int,author_id int,foreign key(author_id) references author(id)on updata cascadeon delete cascade);create table author(id int primary key auto_increment, name varchar(32), age int, book_id int, foreign key(book_id) references book(id) on update cascade # 同步更新 on delete cascade # 同步删除);"""按照上述的方式创建 一个都别想成功!!!其实我们只是想记录书籍和作者的关系针对多对多字段表关系 不能在两张原有的表中创建外键需要你单独再开设一张 专门用来存储两张表数据之间的关系"""create table book(id int primary key auto_increment, title varchar(32), price int);create table author(id int primary key auto_increment, name varchar(32), age int);create table book2author(id int primary key auto_increment, author_id int, book_id int, foreign key(author_id) references author(id) on update cascade # 同步更新 on delete cascade, # 同步删除 foreign key(book_id) references book(id) on update cascade # 同步更新 on delete cascade # 同步删除);
一对一关系
"""id name age addr phone hobby email........如果一个表的字段特别多 每次查询又不是所有的字段都能用得到将表一分为二 用户表 用户表 id name age 用户详情表 id addr phone hobby email........站在用户表 一个用户能否对应多个用户详情 不能!!!站在详情表 一个详情能否属于多个用户 不能!!!结论:单向的一对多都不成立 那么这个时候两者之间的表关系 就是一对一 或者没有关系(好判断)?客户表和学生表在你们报名之前你们是客户端报名之后是学生(期间有一些客户不会报名)"""?一对一 外键字段建在任意一方都可以 但是推荐你建在查询频率比较高的表中create table authordetail(id int primary key auto_increment, phone int, addr varchar(64));create table author(id int primary key auto_increment, name varchar(32), age int, authordetail_id int unique, # 唯一 foreign key(authordetail_id) references authordetail(id) on update cascade # 同步更新 on delete cascade # 同步删除)
相关推荐
ribavnu 2020-11-16
要啥自行车一把梭 2020-11-12
vitasfly 2020-11-12
康慧欣 2020-09-10
liuweiq 2020-09-09
ILVNMM 2020-09-19
zycchun 2020-10-16
silencehgt 2020-09-07
sunnyxuebuhui 2020-09-07
西瓜皮儿的皮儿 2020-09-07
李轮清 2020-09-15
lifeison 2020-08-18
cyhgogogo 2020-08-18
minerk 2020-08-15
webliyang 2020-08-15
houdaxiami 2020-08-15
抱抱熊 2020-08-15
caodayong 2020-08-15
徐悦TechBlog 2020-08-15