drop table if exists class;
-- 建表
create table if not exists class (
id bigint primary key auto_increment,
name varchar(20) not null
);
insert into class (name) values ('java01'), ('java02'), ('java03'), ('C++01'),
('C++02');
drop table if exists student;
create table if not exists student(
id bigint PRIMARY KEY auto_increment,
name varchar(20) not null,
age int DEFAULT 18,
class_id bigint,
foreign key (class_id) references class(id) # 创建外键约束
);
查看表结构,Key列的值为MUL表⽰外键约束的列
插入数据:
sql复制代码
insert into student (name,age,class_id) VALUES('小李',11,1) ;
insert into student (name,age,class_id) VALUES('小杨',22,2) ;
查看表:
如果我们插入的class_id的常量没有在主表当中的id列会出现什么情况呢?
不能添加 因为有个外键约束。
删除主表某条记录时,从表中不能有对该记录的引⽤
我们先查看一下主从表中的数据:
当我们要删除主表中的数据 id=1的数据
就会出现报错信息,有一个父类的行,创建了外键的引用 不能删除
(当有从表的数据引用主表的时候 不可以删除主表中被引用的数据)
如果删除没有被引用的呢?让我们试一下:
从表没有被主表引用就会被删除。
当我们要删除主表时 看能不能行:
还是不可以的 因为存在外部引用
如果非要删除主表,则必须先删除从表中的数据,
如果要删除表,必须接触主外键关系。
八:DEFALUT 默认值约束
DEFAULT 约束⽤于向列中插⼊默认值,如果没有为列设置值,那么会将默认值设置到该列
重构学⽣表,新增年龄列
sql复制代码
drop table if exists student;
create table if not exists student(
id bigint,
name varchar(20) not null,
age int
);
插⼊⼀条记录,没有设置默认约束时,不指定年龄的值时列为NULL
insert into student (id,name) values (1,'小李');
select *from student;
查看表数据:
我们现在的需求就是 当我们不给age设定值,用一个默认值填充,默认年龄为18
但是如果你指定了就按照指定的。(null也行)
sql复制代码
drop table if exists student;
create table if not exists student(
id bigint primary key auto_increment,
name varchar(20) not null,
age int default 18
);
insert into student (name) values ('小李');
select *from student;