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

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

  1. MySQL—表的完整性约束(外键约束)(一)

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

  2. MySQL—表的完整性约束(外键约束)(二)

    1.班级表 2.学生表 例1:删除班级5:如果直接删除的话肯定不行,因为有外键约束 delete from t_class where cno=5; 1451 - Cannot delete or u ...

  3. mysql 删除表时外键约束_MySQL删除表的时候忽略外键约束的简单实现

    删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心.但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情:另外在测试的时候,也有需要重新创建 ...

  4. MySQL表的非外键约束

    MySQL表的非外键约束 /* 建立一张用来存储学生信息的表  字段包含学号.姓名.性别,年龄.入学日期.班级,email等信息  学号是主键 = 不能为空 +? 唯一  姓名不能为空  性别默认值是 ...

  5. Python攻城师————MySQL数据库(自增、外键、关键字)

    今日学习目标 正式学习MySQL数据库语句. 文章目录 今日学习目标 学习内容 一.自增特性 二.约束条件之外键 外键的定义 外键约束创建 三.查询关键字 查询关键字之select与from 查询关键 ...

  6. sql语句创建表的同时添加外键约束

    sql语句创建表的同时添加外键约束 题目 建立一个商店的数据库store,记录顾客及其购物情况,由下面三个表组成: 商品(商品号,商品名,单价,商品类别,供应商): 顾客(顾客号,姓名,住址): 订单 ...

  7. 外键表显示在html,外键约束怎么写

    外键约束的写法是[[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,-]REFERENCES 主键列1 [,主键列2,-]]. 本文操作环境:windows10系统.mysql ...

  8. 07@mysql数据库表的完整性约束(primary key、foreign key等)

    文章目录 mysql数据库的完整性约束 一.完整性约束介绍 约束条件: 二.not null与default(默认) 三.unique(唯一约束) 1.单个设置unique 2.多个联合设置uniqu ...

  9. MySQL数据库(25):外键 foreing key

    外键 foreing key 外键表示了两个实体之间的联系 外键 foreing key: A表中的一个字段的值指向另B表的主键 B: 主表 A: 从表 主表:主键(主关键字) = 从表:外键(外关键 ...

  10. mysql 删除表数据_主外键关联表的数据删除策略

    说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...

最新文章

  1. 如何使用Github管理自己的代码
  2. RHCE 学习笔记(22) 网络用户
  3. hdu 2988 Strange fuction【模拟退火】
  4. java compareto date_int compareTo(Date anotherDate)
  5. Ubuntu学习日记--Lesson1:Linux基础和常用命令
  6. 在思科路由器上配置DNS服务器
  7. HTML初识——网页设计html基础
  8. [iOS]让你的应用支持新iPad的Retina显示屏
  9. 迷之Konigsberg七桥问题
  10. Apache 服务器特点
  11. python对excel筛选提取文本中数字_详解利用python提取pdf文本数字
  12. 蓝牙耳机厂家新品发布——ANC主动降噪耳机U2065
  13. 20、中断和动态时钟显示
  14. Arduino ESP8266 SPI-FFS存储区域
  15. 【Unity3D 常用插件】Haste插件
  16. ESP32 PM2.5测试
  17. 利用Zotero进行文献检索与管理
  18. IDEA超实用方法类注释模板大全
  19. Logstash报错:[ERROR][logstash.agent ] Failed to execute action {...
  20. 变强——GitHub 热点速览 Vol.46

热门文章

  1. PDU是如何帮助机房安然度夏?如何选择PDU电源配套机柜?
  2. python能print中文吗_win10中文版,python的print不能打印中文字符?
  3. W ndoWs7重启按F11没用,windows7无法正常启动按F8也没有效果的解决方法
  4. ML:MLOps系列讲解之《MLOps原则—迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/“ML成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标等》解读
  5. 成功解决 raise RuntimeError(“The JPMML-SkLearn conversion application has failed. The Java executable
  6. ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
  7. Python 任意中文文本生成词云 最终版本
  8. pycharm专业版-2017.3.3 安装+anaconda3-2019.03-windows
  9. 从零开始Vue项目实战(二)-搭建环境
  10. JAVA多线程提高十四: 面试题