console 1
-- primary key为主键
-- not null规定值不能空
-- unique表示值必须唯一
-- check ()规定插入值的范围
create table `学生`(
id int primary key comment '学生号',
name varchar(10) not null unique comment '姓名',
age int check ( 0 < age && age <= 120 ) comment '年龄',
height varchar(10) default '180' comment '升高',
gender char(1) comment '性别'
)comment '学生表';
-- id用auto_increment约束默认值1,每次添加一行自动添加自增后的值:id int primary key auto_increment comment '学生号',
insert into `学生`(id, name, age, height, gender) values
(1,'Mike',22,'175','男'),
(2,'Ben',20,'176','男'),
(3,'Judy',17,'169','女'),
(4,'John',18,'177','男');
-- default表示当我不把值插入到受默认约束的属性中,会默认一个值填充
insert into `学生`(id, name, age, gender) values
(5,'Sam',22, '男');
insert into `学生`(id, name, age,height ,gender) values
(3,'Judy',17,'169','女');
drop table `学生`;
-- 删除某个主键时,如果该主键是另一个表的外键,那么应该先删除另一个表的键,才能删除主键:
-- 比如如果我删除了学生表的其中一个学号,按理来说该学生的所有信息应该都得删除,但是成绩表却还残留有他的成绩数据没删,这导致数据的不完整和不一致性。
-- 若删除主键,我们得先删外键所在的表的信息,再删除主键的消息
delete from`学生` where id = 3;
console 2
-- 成绩表中的id变为外键,约束名为fk_chengji_id,方便未来删除约束名
-- primary key (id,subject) 用了复合主键,因为成绩同时需要学生号,课程号确定
create table `成绩`(
id int ,
subject varchar(20),
score int,
primary key (id,subject),
constraint fk_chengji_id foreign key (id) references `学生`(id)
);
insert into `成绩`(id, subject, score)values
(1,'语文',100),
(2,'数学',85),
(4,'英语',90),
(3,'科学',70);
insert into `成绩`(id, subject, score)values
(1,'数学',60),
(2,'英语',75),
(4,'语文',97),
(3,'地理',50);
delete from `成绩` where id =3 and subject = '科学';
insert into `成绩`(id, subject, score)values
(3,'科学',70);
drop table `成绩`;