外键约束
如果一张表中的一个字段指向了另一张表中的主键,就将该字段叫做外键
外键的数据类型必须和主键一致
定义外键的表称之为从表,被外键引用的表称之为主表
主表就像是源头,存储主要的数据,从表通过外键与主表关联,依赖主表的数据。
主表
create table if not exists user(
id int unsigned primary key auto_increment,
username varchar(20) not null
);
desc user;
desc 是“describe”的缩写,用于查看表的结构,包括字段名、数据类型、是否为主键等信息。
create table if not exists dynamic(
id int unsigned primary key auto_increment,
content varchar(255) not null
content 用于存储动态的具体内容,是长度为255的可变字符类型且不允许为空;
user_id int unsigned
在图中的 dynamic 表里, user_id 未来会作为外键,关联主表 user 的 id 字段。而主表 user 里的 id 是 int unsigned (无符号整数),为了满足外键约束中“数据类型必须和主键一致”的规则, dynamic 表的 user_id 也需要定义为 int unsigned ,确保两者类型匹配,才能正确建立表与表之间的关联关系。
);
desc dynamic;
从表
desc user;
create table if not exists dynamic_1(
id int unsigned primary key auto_increment,
content varchar(255) not null
user_id int unsigned
foreign key (user_id) references user (id)
foreign key (user_id) -- 指定dynamic表中的user_id字段为外键
references user(id); -- 表示该外键引用user表中的id字段
);
外键操作:action
严格操作:restrict
主表中不存在对应的数据,从表不允许添加
从表引用着数据,主表对应的主键不允许删除
从表引用着数据,主表对应的主键不允许修改
置空操作:set null
修改或删除主表id时,所有跟它关联的从表字段都会被设置为null
级联操作:cascade
修改或删除主表id时,所有跟它关联的从表字段都会做同样的操作
create table if not exists dynamic_2(
id int unsigned primary key auto_increment,
content varchar(255) not null
user_id int unsigned
foreign key (user_id) references user (id) on update cascade on delete set null
user_id 这个字段是外键,专门用来和其他表建立关系。
( user_id )要关联到 user 表的主键( id )上,让两张表的数据能对应起来
- on update cascade :若 user 表的 id (主表主键)被修改, dynamic_2 表中关联的 user_id (外键)会级联同步修改。
- on delete set null :若 user 表的 id 被删除, dynamic_2 表中关联的 user_id 会被设置为 null
);

1547

被折叠的 条评论
为什么被折叠?



