目录
一、数据库约束
1、约束类型
(1)not null - 指示某列不能存储 null 值。
(1)unique - 保证某列的每行必须有唯一的值。
(1)default - 规定没有给列赋值时的默认值。
(1)primary key - not null 和 unique 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
(5)foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。
(6)check - 保证列中的值符合指定的条件。对于MySQL数据库,对check子句进行分析,但是忽略check子句
2、null约束
创建表时指定某一列不能为空;若在插入数值时,该列为null,会导致插入失败
-- 创建一张student_test表,设置属性id为not null
create table student_test(
id int not null,
name varchar(20),
sex varchar(5),
score decimal(3,1)
)character set utf8mb4;
-- 插入数据,id不能为空,否则就会报错;
insert into student_test values(1,'潇潇','女',88.5);
insert into student_test values(null,'莉莉','女',97.5);
insert into student_test(name,score) values('洛洛',87);
3、unique:唯一约束
创建表示指定某一属性为unique,则在插入数值时,该属性不能出现重复
-- 创建一张student_test表,设置属性id为unique
create table student_test(
id int unique,
name varchar(20),
sex varchar(5),
score decimal(3,1)
)character set utf8mb4;
-- 插入数据,id不能重复,否则就会报错;
insert into student_test values
(1,'潇潇','女',88.5),
(2,'楠楠','女',90);
insert into student_test values(2,'莉莉','女',97.5);
4、default:默认值约束
-- 创建一张student_test表,设置属性name为default
create table student_test(
id int,
name varchar(20) default 'unkown',
sex varchar(5),
score decimal(3,1)
)character set utf8mb4;
-- 插入数据,name为空,默认值为unkown;
insert into student_test (id,sex,score)values(1,'女',97.5);
-- 查看表
select * from student_test;
5、primary key:主键约束
主键是not null和unique的结合,即被设为主键的属性既不能为空,也不能重复
-- 创建一张student_test表,设置属性id为primary key
create table student_test(
id int primary key,
name varchar(20),
sex varchar(5),
score decimal(3,1)
)character set utf8mb4;
-- 插入数据,id不能为空也不能重复,否则就会报错;
insert into student_test values
(1,'潇潇','女',88.5),
(2,'楠楠','女',90);
insert into student_test values(2,'莉莉','女',97.5);
insert into student_test values(null,'木木','女',95);
insert into student_test(name,score) values('洛洛',87);
6、foreign key:外键约束
foreign key (字段名) references 主表(列)
示例:
-- 创建一张class表,设置属性id为primary key
create table class(
id int primary key,
name varchar(20)
)character set utf8mb4;
-- 创建一张student_test表,设置属性class_id为foreign key,关联班级表的id
create table student_test(
id int primary key,
name varchar(20),
class_id int,
sex varchar(5),
score decimal(3,1),
foreign key (class_id) references class(id)
)character set utf8mb4;
-- 插入数值时,student_test 表中的class_id要参考class表中的id
-- 若插入的class_id在class表中不存在,将会插入失败
insert into class values(1,'一班');
insert into student_test values
(1,'潇潇',1,'女',88.5),
(2,'楠楠',1,'女',90);
insert into student_test values(3,'莉莉',2,'女',97.5);
-- 在删除时,若有表B关联A,那么A不能删除
drop table class;
7、check约束
MySQL在使用时不会报错,但会忽略该约束
-- 创建一张student_test表,设置属性sex 只能在男和女之间选择
create table student_test(
id int primary key,
name varchar(20),
check (sex = '男' or sex = '女'),
score decimal(3,1)
)character set utf8mb4;
二、表的设计
1、一对一
2、一对多
3、多对多
需要创建中间表来映射两张表的关系;
三、新增
插入查询结果
insert into 表名[列名] select 查询语句;
注意:
要插入的内容必须和查询结果的属性的数量,顺序,数据类型相同
示例:
-- 新建两张表,用于示例
create table s1(
id int,
name varchar(20)
);
create table s2(
id int,
name varchar(20)
);
-- 向表s1中插入数据
insert into s1 values(1,'潇潇'),(2,'落落'),(3,'灼灼');
-- 将从表s1中查询到的数据插入到s2中
insert into s2 select * from s1;