mysql中:
id中存在auto_increment
CREATE TABLE u_user( id int PRIMARY KEY auto_increment, u_name VARCHAR(10) NOT NULL UNIQUE, age int CHECK(age>0 && age<=120), u_status char(1) DEFAULT(1), gender char(1) ); INSERT into u_user(u_name,age,u_status,gender)VALUES("李明",20,"1","男"),("王丽",18,"1","女");
外键约束:
-- 创建主表(班级表) create table class( c_id int(4) primary key auto_increment, c_name varchar(10) ); -- 班级表添加数据 insert into class values(NULL, 'xg1901'), (NULL, 'xg1902'); -- 创建从表(学生表) create table stu_table( s_id int PRIMARY key auto_increment, s_name varchar(10) not null, s_sex char(1) check(s_sex = '男' or s_sex = '女'), s_age int(3) check(s_age > 0 and s_age < 100), c_id int(4), -- 创建时添加表级外键约束 constraint fk_c_id foreign key (c_id) references class(c_id) ); -- 创建从表(学生表) create table stu_table( s_id int PRIMARY key auto_increment, s_name varchar(10) not null, s_sex char(1) check(s_sex = '男' or s_sex = '女'), s_age int(3) check(s_age > 0 and s_age < 100), c_id int(4) #创建时添加外键 CONSTRAINT fk_c_id FOREIGN KEY(c_id) REFERENCES class(c_id) ); -- 学生表中插入数据 insert into stu_table values (NULL, '香菱', '女', 18, 1); insert into stu_table values (NULL, '行秋', '男', 18, 2); insert into stu_table values (NULL, '胡桃', '女', 16, 2); insert into stu_table values (NULL, '班尼特', '男', 18, 1);
不能删除外键:
删除外键语句:
ALTER TABLE stu_table drop foreign key fk_c_id;
删除或更新外键(级联操作)
使用cascade,当父表删除或更新对象记录时,首先检查该记录是否有对应外键,若有,则也删除或更新外键在子表中的记录。
set null:当父表删除或更新对象记录时,首先检查该记录是否有对应外键,若有,则设置子表中该外键的值为null。
父表/主表:含有被依赖的字段的表。
子表/从表:使用外键约束的表。
原始表:
使用语句:
#删除或更新外键 ALTER TABLE stu_table ADD CONSTRAINT fk_c_id FOREIGN KEY(c_id) REFERENCES class(c_id) ON UPDATE CASCADE ON DELETE CASCADE;
还没有评论,来说两句吧...