300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MySQL—数据库表的完整性约束(非外键约束)

MySQL—数据库表的完整性约束(非外键约束)

时间:2021-02-07 08:38:20

相关推荐

MySQL—数据库表的完整性约束(非外键约束)

完整性约束:为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,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-50enterdate date,classnamevarchar(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,'-1-1','cs1班','121@')insert into t_student3 values(default,'jam','男',18,'-1-1','cs1班','121@')

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,'-7-28','python1班','zs3@');

运行结果:

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,'-7-28','python1班','ls11@');

运行结果:1048 - Column ‘sname’ cannot be null:sname字段对应的数据不能为null

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。