4.表的完整性约束

为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一 种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束

 MySQL中主要支持以下几种完整性约束,如表所示。其中Check约束时MySQL8中提供的支持。

约束条件 约束描述

primary key          主键约束,约束字段的值可唯一地标识对应的记录

not null                 非空约束,约束字段的值不能为空

unique                  唯一约束,约束字段的值是唯一的

check                    检查约束,限制某个字段的取值范围

default                   默认约束值,结束字段的默认值

auto_increment     自动增加约束,约束字段的值自动递增

foreign key             外键约束,约束表与表之间的关系

实例操作:

/* 建立一张用来存储学生信息的表 字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息

约束:

建立一张用来存储学生信息的表 字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息

[1]学号是【主键】=不能为空+唯一,主键的作用:可以通过主键查到唯一 的一条记录

[2]如果主键是整数类型,那么需要自增

[3]姓名不能为空

[4]Email唯一

[5]性别默认值是男

[6]性别只能是男女

[7]年龄只能在18-50之间 */

-- 创建数据库表:
create table t_student(
    sno int(8) primary key auto_increment, 
    -- primary key 就是加一个主键约束
    -- auto_increment 就是一个自增约束
    sname varchar(4) not null,
    sex char(2) default '男' check(sex='男' || sex='女'), 
    -- default是默认的
    -- check 检查约束    只能是男或女
    age int(3) check(age>=18 and age<=50),
    enterdate date,
    classname varchar(10),
    email varchar(15) unique -- unique是唯一的
);
-- 查看数据:
select *from t_student;
-- 添加数据:
insert into t_student values (1,'张三','男',18,now(),'计科二班','123@123.com');
-- 错误提示:
-- 1048 - Column 'sname' cannot be null  不能为null
-- 1062 - Duplicate entry '2' for key 'PRIMARY' 主键重复冲突了
-- 3819 - Check constraint 't_ student_chk_ 1' is violated. 违反检查约束
-- 1062 - Duplicate entry '123@123.com' for key 'email'
-- 1062 - Duplicate entry '456@123.com' for key 'email' 邮箱重复了,违反了唯一约束
insert into t_student values (2,'李四','男',90,now(),'计科二班','456@123.com');
insert into t_student values (3,'王五','男',20,now(),'计科二班','789@123.com');
update t_student set sex ='女' where sno = 1;
insert into t_student (sno,sname,sex) values (4,'马六','男'); -- 插入部分内容
insert into t_student (sname,age,enterdate) values ('赵七',22,now());
-- sno默认递增一位,sex默认为男,完成了约束
insert into t_student values (null,'王八','男',20,now(),'计科二班','987@123.com');
insert into t_student values (default,'唐九','男',20,now(),'计科二班','654@123.com');
-- 如果主键没有设定值,用null和default都不影响主键自增的效果
insert into t_student values (null,'张三','男',18,now(),'计科二班','321@123.com');
-- 如果sql报错,可能主键就浪费了,后续插入的主键是不连号的,主键也不要求必须是连号的

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统之实体完整性约束 数据库系统之实体完整性约束 数据库完整性 数据库完整性 今天做了⼀道数据库的上机题,其中的⼀些知识觉得挺有⽤的,因此打算整理出来⼀篇博客来与⼤家分享⼀下。这⾥的语句针对的都是创建后所 需要的语句。 ⼀、题⽬ ⼀、题⽬ 1.练习定义三类完整性: (1)为student添加主码约束 (2)为course添加主码和外码约束 (3)为sc添加主码和外码约束 (4)为course添加cname取值唯⼀的约束 (5)为course添加credit默认值为4的default约束 (6)为student添加check约束,ssex取值只能为男或⼥。 2.验证上⾯添加的约束 (1) 将student中学号为201910122的学号修改为201215123,验证主码约束机制。 (2) 将course中课程号为6的先⾏课号修改为9,验证外码约束机制。 (3) 向sc中添加⼀条记录,('666666666','1',80),验证外码约束机制。 (4) 修改student中学号为201215122的学⽣记录,将学号修改为'11111'验证外码约束机制。 (5) 删除student中学号为201215122的学⽣记录,验证外码约束机制。 (6) 将course中课程号为2号的课程名称修改为数据库,验证唯⼀约束机制。 3.删除上⾯添加的约束 (1)删除student的主码约束 (2)删除course的外码约束 (3)删除course中cname取值唯⼀的约束 ⼆、题⽬准备 ⼆、题⽬准备 此次上机需要的各个数据库各个字段的数据类型为: 此次上机需要的各个数据库各个字段的数据类型为: 1.student 2.course 3.sc 此次上机需要的各个数据库数据为: 此次上机需要的各个数据库数据为: 1.student 2.course 3.sc 三、题⽬分析 三、题⽬分析 1.练习定义三类完整性: 练习定义三类完整性: (1)为 为student添加主码约束 添加主码约束 添加主码约束的MySQL语句是:alter table 名 add primary key(列名); 因为主码必须需要唯⼀并且数据不能重复,发现在student中只有sno(学号)是每个⼈唯⼀标识。 因此这⾥只需输⼊这个语句即可:alter table student add primary key(sno); 最后检验是否成功,输⼊desc student; (2)为 为course添加主码和外码约束 添加主码和外码约束 1.添加主码约束 根据第⼀步我们可以知道cno(课程号)是唯⼀标识 因此添加主码约束的语句是:alter table course add primary key(cno); 最后检验是否成功,输⼊desc course; 2.添加外码约束 添加外码约束的MySQL语句是:alter table 名 add constraint 约束名 foreign key(关联字段) references 主(关联字段) 其中constraint 约束名可以省略,即也可以写成:alter table 名 add foreign key(关联字段) references 主(关联字段) ⾸先先尝试⼀下使⽤course的cpno来参照sc的cpno: alter table course add foreign key(cpno) references sc(cpno); ,发现报错 这是因为在参照时候,参照的和被参照的都需要是同⼀种数据类型和长度,⽐如tinyint类型的只能参照tinyint类型的,不能参照char(9)类型的。 同样的,数据长度不⼀样也不能进⾏参照,char(9)类型的也不能参照char(4)的。 因此我们把cpno的数据类型更改⼀下再试⼀次 先更改cpno字段的数据类型:alter table sc modify cpno tinyint; 然后再次输⼊上⾯的语句。 成功了 (3)为 为sc添加主码和外码约束 添加主码和外码约束 1.添加主码约束 根据第⼀步我们可以知道cpno是唯⼀标识 因此添加主码约束的语句是:alter table sc primary key(cpno); 最后检验是否成功,输⼊desc sc; 2.添加外码约束 使⽤sc的sno参照student的sno:alter table sc add foreign key(sno) references student(sno); (4)为 为course添加 添加cname取值唯⼀的约束 取值唯⼀的约束 添加取值唯⼀约束的MySQL的语句是:alter table 名 add uniqu

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值