数据库03


目录

约束条件

主键

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)
上一篇 2022年8月17日
下一篇 2022年8月17日

相关推荐

发表回复

登录后才能评论