数据库表的主外键
主键
主键(primary key):全称叫做“主键约束”,可以是一列或者多列组合,其值可以唯一标识这条数据。
所以主键唯一性,不可以为空。
创建主键:
创建表的时候创建主键
CREATE TABLE food(id INT PRIMARY KEY,name CHAR(32));
创建主键,并且自增长
(就是插入数据时可不指定主键字段,一般都为id int类型)
缺陷:
如果删除之前的数据,不会自动填充补全数字,如把id=3的数据从表中删除
1
2
4
5
这样的,中间3会没有,空的
CREATE TABLE food(id INT PRIMARY KEY AUTO_INCREMENT,name CHAR(32));
添加主键:
在已经存在的表当中添加主键(字段是已经存在的字段)
ALTER TABLE food ADD PRIMARY KEY (id);
ALTER TABLE food ADD PRIMARY KEY AUTO_INCREMENT (id); 由于版本 问题,当前命令不会报错,但是无法将主键设置自增长。导致添加的 数据主键为0
修改为自增长:modify
ALTER TABLE food MODIFY id INT AUTO_INCREMENT PRIMARY EKY;
添加实际上是将一个已经存在的字段修改为主键
ALTER TABLE food DROP PRIMARY KEY ;
删除主键只是删除了主键类型,并没有删除字段
如果主键设置自增长,先通过修改语句去掉自增长,然后在删除主键。
ALTER TABLE food MODIFY id INT; 去掉自增长
ALTER TABLE food DROP PRIMARY KEY ; 删除主键
外键
外键:(foreign key):全称叫做“外键约束”,主要用来约束一对多关系, 一对多关系当中,多表当中用外键来关联一表当中的主键字段。
create table parent(id int primary key auto_increment,name char(32));
create table child(
id int primary key auto_increment,
name char(32),
p_id int,
foreign key(p_id) references parent(id)
);
1、必须先有外键字段,再设置外键
2、一表必须先创建出来,最好有主键;
3、外键字段的数据必须一表对应字段(主键)有的数据。
多对多关系中,需在关系表创建时设置多个外键,对应相应表中的主键字段
多对多关系中:
专业:
课程:
关系:
创建多对多关系:
创建专业表
create table major(id int primary key auto_increment,name char(32));
创建课程表
create table course(id int primary key auto_increment,name char(32));
创建关系表
create table major_course(
id int primary key auto_increment, 设置主键
major_id int, 设置和专业关联的字段
course_id int, 设置和课程关联的字段
foreign key(major_id) references major(id), 使用major_id和major表的 id字段进行外键关联
foreign key(course_id) references course(id)使用course_id和course表 的id字段进行外键关联
);