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

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 MySQL—数据库表的完整性约束(非外键约束),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

完整性约束:为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!