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

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-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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值