完整性约束:为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束
/*
根据需求描述,创建数据库表:
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
约束:
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
【1】学号是主键 = 不能为空 + 唯一 ,主键的作用:可以通过主键查到唯一的一条记录
【2】如果主键是整数类型,那么需要自增
【3】姓名不能为空
【4】Email唯一
【5】性别默认值是男
【6】性别只能是男女
【7】年龄只能在18-50之间
*/
第一种方法:
create table t_student3(
sno int(6) primary key auto_increment, -- sno:为自增主键
sname varchar(4) not null, -- sname:字段不能为空
sex char(1) default '男' check(sex='男' || sex='女'), -- sex:字段不填,默认为男,该字段只能为男或者女
age int(3) check(age>=18 and age<=50), -- age:age取值范围为18-50
enterdate date,
classname varchar(6),
email varchar(15) unique -- email:email字段是唯一的
)
1、如果主键没有设定值,或者用null、default都可以完成主键自增的效果
insert into t_student3 (sname,classname) values('kb','ces2班')
insert into t_student3 values(null,'jam','男',18,'2021-1-1','cs1班','121@qq.com')
insert into t_student3 values(default,'jam','男',18,'2021-1-1','cs1班','121@qq.com')
2、如果sql报错,可能主键就浪费了 ,后续插入的主键是不连号的,我们的主键也不要求连号
第二种方法:
create table t_student3(
sno int(6) auto_increment,
sname varchar(5) not null,
sex char(1) default '男',
age int(3),
enterdate date,
classname varchar(10),
email varchar(15),
constraint pk_stu primary key(sno), -- pk_stu 主键约束的名字
constraint ck_stu_sex check(sex='男' || sex='女'), -- ck_stu_sex检查约束
constraint ck_stu_age check(age>=18 and age<=50), -- ck_stu_age 检查约束
constraint uq_stu_email unique(email) -- uq_stu_email 唯一约束
);
插入数据
insert into t_student3 values(3,'null111','男',18,'2021-7-28','python1班','zs3@qq.com');
运行结果:
1406 – Data too long for column ‘sname’ at row 1:sname字段对应的数据输入超出限制
第三种方式:
create table t_student3(
sno int(6),
sname varchar(5) not null,
sex char(1) default '男',
age int(3),
enterdate date,
classname varchar(10),
email varchar(15)
);
-- 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
-- 错误得解决办法 就是把auto_increment去掉
-- 在创建表完成之后添加约束
alter table t_student3 add constraint pk_stu primary key (sno); -- 主键约束添加
alter table t_student3 modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student3 add constraint ck_stu_sex check(sex='男' || sex='女');
alter table t_student3 add constraint ck_stu_age check(age>=18 and age<=50);
alter table t_student3 add constraint uq_stu_email unique (email);
插入数据
insert into t_student3 values(null,null,'男',18,'2021-7-28','python1班','ls11@qq.com');
运行结果:1048 – Column ‘sname’ cannot be null:sname字段对应的数据不能为null
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123588.html