当前位置: 首页 > news >正文

【MySQL】表的完整性约束——非外键约束

一、表的完整性约束

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

        MySQL中主要支持以下几种种完整性约束,如表所示。 其中Check约束是MySQL8中提供的支持。

 

二、非外键约束

1、主键约束和自增约束

主键约束是指,如果为一个字段添加主键约束,那么这个字段的值就可以唯一标识一段记录。自增约束是指,约束的字段的值会自动递增。主键约束和自增约束一般一起使用,常用在约束序号列。

自增约束(AUTO_INCREMENT)可以使表中某个字段的值自动增加。一张表中只能有一个自增长字段,并且该字段必须定义了约束(该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition; there can be only one auto column and it must be defined as a key”错误。

由于自增约束会自动生成唯一的ID,所以自增约束通常会配合主键使用,并且只适用于整数类型。一般情况下,设置为自增约束字段的值会从1开始,每增加一条记录,该字段的值加1。

create   table student(
       stu_id int(10) primary key,
       stu_name varchar(3),
       stu_sex varchar (1)
);
/*为student表中的主键字段添加自增约束*/
alter   table student11 modify stu_id int(10) auto_increment;

使用ALTER TABLE语句删除自增约束 :

alter table student modify stu_id int(10);

2、非空约束

约束的字段值不能为空。

3、唯一约束

添加了唯一约束的字段的值不可以重复。

4、检查约束

添加检查约束时,可以设置值的范围,不符合范围的值将不能被添加到数据库表中。

5、默认值约束

为字段添加默认值约束后,如果该字段没有传入值,则使用默认值。

三、非外键约束的分类

非外键约束从作用上可以分为两类:

  • 表级约束:可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用逗号分隔;必须指出要约束的列的名称;如:
    constraint pk_stu primary key (sno)  -- pk_stu 主键约束的名字
  • 列级约束:包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;例如:
    sno int(6) primary key auto_increment

1、使用列级约束建表,语法结构是:列名 列类型 约束名

创建包含学生数据的表时,为其添加各种非外键约束:

create table t_student(
	sno int(6) primary key auto_increment, -- 自增约束+主键约束
	sname varchar(5) not null, -- 非空约束
	sex char(1) default '男' check(sex='男' || sex='女'), -- 检查约束+默认值约束
	age int(3) check(18<=age<35),
	enterdate date,
	classname varchar(10),
	email varchar(15) unique -- 唯一约束
);

2、使用表级约束建表,语法结构是:constraint 给本次约束起的名字 约束名 (字段名+条件)

创建包含学生数据的表时,为其添加各种非外键约束:

create table t_student(
        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 = '女'),
        constraint ck_stu_age check (age >= 18 and age <= 50),
        constraint uq_stu_email unique (email)
);

表级约束还有另外一种写法,就是在创建表以后通过SQL语句添加约束,例如:

alter table t_student add constraint pk_stu primary key (sno) ; -- 主键约束
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' || sex = '女');
alter table t_student add constraint ck_stu_age check (age >= 18 and age <= 50);
alter table t_student add constraint uq_stu_email unique (email);

相关文章:

  • vue打包上线利用插件去除 console
  • Spring bean的创建过程
  • [架构之路-148]-《软考-系统分析师》- 7-企业信息化战略与实施-5-企业信息系统、电子政务
  • 机器学习笔记之策略
  • 面向对象练习题(6)
  • 基于springboot实现时间管理系统演示【附项目源码+论文说明】
  • 【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)
  • 第8章_索引的创建与设计原则
  • 了解PL/SQL看这一篇够够了~
  • 为什么我们认为GPT是一个技术爆炸
  • 低代码打翻前端的饭碗?探秘两者藕断丝连的关系
  • Redis面试题 (2023最新版)
  • 文件转换-cad转geojson
  • 文件操作编程
  • 开发脚手架常用的JS库
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • C++类的相互关联
  • es6要点
  • Facebook AccountKit 接入的坑点
  • IndexedDB
  • Java 内存分配及垃圾回收机制初探
  • Koa2 之文件上传下载
  • PHP面试之三:MySQL数据库
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue小说阅读器(仿追书神器)
  • 官方解决所有 npm 全局安装权限问题
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前嗅ForeSpider采集配置界面介绍
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​2020 年大前端技术趋势解读
  • ###STL(标准模板库)
  • #100天计划# 2013年9月29日
  • #DBA杂记1
  • #Linux(make工具和makefile文件以及makefile语法)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $jQuery 重写Alert样式方法
  • (3)选择元素——(17)练习(Exercises)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C#)获取字符编码的类
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (vue)页面文件上传获取:action地址
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (独孤九剑)--文件系统
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)图像的%2线性拉伸
  • (一)UDP基本编程步骤
  • (转)EOS中账户、钱包和密钥的关系