MySQL五大约束详解(我有多详细只有我知道小白都能懂哦)
1.约束概念和分类
2.五大约束的添加和删除
3.自增长列
1.约束概念和分类
1.1约束的概念:
对表中的数据进行限定,保证数据的正确性,有效性,完整性
1.2约束分类
1.主键约束(primary key):保证该字段具有非空且唯一性,一张表中只能有一个主键,主键是表中字段的唯一标识
2.非空约束(not null):保证字段不能为空
3.唯一约束(unique):保证该字段具有唯一性但是可以为null
4.外键约束(foreign key):在一个表中存在的另一个表的主键或唯一键称此表的外键。
5.默认约束(default+默认值):用于保证该字段有默认值(用引号引起来)
2.五大约束的添加和删除
2.1添加约束的六种方法
1.在创建表的时候添加非空约束(以列级约束添加)
create table + 表名(
列名 数据类型 + 约束名
)
2.在创建表的时候添加非空约束(以表级约束添加)
create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint +别名(就是随便为自己添加的约束起一个名字)) 约束名(对应字段名)
)
3.修改列名的时候
alter table + 表名 + change (column) + 旧列名 新列名 新列名的类型 + 约束
4.修改列的数据类型的时候
alter table + 表名 + modify + (column) + 列名 列类型 约束
5.在添加新列的时候可以添加约束
alter table + 表名 + add + (column) + 新列名 + 新列名的类型 + 约束
6.外键特有
alter table + 表名 + add constraint 外键名称(自己随便为外键取得名字) + foreign key(外键字段名) references 主表名称(主表要关联的字段)
2.2三种删除约束的方式
1.修改列名的时候不加约束
alter table + 表名 + change (column) + 旧列名 新列名 新列名的类型
2.修改列的数据类型的时候不加约束
alter table + 表名 + modify + (column) + 列名 列类型
3.运用drop特定删除约束
alter table + 表名 + drop index/foreign key/primary key + 约束的名字
注:查看表中约束的名字:
show index from + 表名
2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)
1.非空约束(not null)
对应的添加方式:1 3 4 5
对应的删除方式:1 2
2.唯一约束(unique)
对应的添加方式:1 2 3 4 5
对应的删除方式:1 2 3(对应第3种的index选项)
3.默认约束(default)
对应的添加方式:1 3 4 5
对应的删除方式:1 2
4.主键(primary key)
对应的添加方式:1 2 3 4 5
对应的删除方式:3(对应第3种的primary key选项注意后边不加约束的名字了,因为一个表里只能有一个主键)
5.外键(foreign key)
对应的添加方式:2 6
对应的删除方式:3(对应第3种的foreign key选项)
外键单独拿出来讲
我们先看一个员工表(字段分别是员工编号,姓名,年龄,所属部门,部门所在地):
我们可以发现有冗余的部分,就是研发部对应广州,销售部对应深圳不用写那么多遍,其实可以把他们分成两张表来防止冗余的部分,第一张表存储员工的信息,另一张存储部门信息
表1(员工表employee):
表2(部门表department):
这里两个表的id都是主键
但是这里有一个问题,就是,我们可以随便删除部门表的某一行,就比如id=1的那一行,一旦删除,那么表1里的dep_id=1的员工就查不到他们的部门信息了,所以就可以用外键来解决这个问题
我们可以在创建表的时候就指定dep_id是外键,关联department的主键id
语句格式(这里虽然是第2种方法也就是以表级约束添加外键但是语法上有不同):
create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint + 别名(就是随便为自己添加的约束起一个名字)) + foreign key(字段名) + references + 主表(主表对应字段)
)
对于本例子就可以这么写:
create table employee(
id int primary key,
sname varchar(5),
age int,
dep_id int,
constraint aaa foreign key(dep_id) references department(id)
)
加上外键后我们就不能删除department表里边的任意一行,而且,我们也不能在employee里边添加新的员工信息的时候把dep_id填写成除1,2之外的任何数字
2.4对于创建约束的总结
在创建表的时候添加列级约束只支持:默认,非空,主键,唯一
在添加表级约束只支持:主键,唯一,外键
2.5对于主键和唯一的区别:
主键至多一个唯一可以有多个
允许两个列组成一个主键和一个唯一
3.自增长列
3.1概念
如果某一列是数值类型,使用 auto_increment可以来完成值的自动增长(一般都是和主键一起用)
3.2在创建表的时候添加主键约束,并且完成主键自增长的例子
格式:
create table 表名(
列名 数据类型 primary key + auto_increment
)
举个例子:
我们创建一个含学号姓名的student表,并且按照学号自增长
创建语句:
create table student(
id int primary key auto_increment,
sname char(4)
)
如果此时我们表里有一个数据;
当我们再次插入数据的时候不给学号即
insert into student value(null,“李四”)
再次查看表的时候自动给我们按自增长补了学号:
3.3自增长的添加和删除
1.添加(上述在创建的时候添加是一种)
alter table + 表名 + modify column + 列名 类型 约束 + AUTO_INCREMENT
2.删除
alter table + 表名 + modify column 列名 类型
3.4设置自增长步长
自增长起始值为1,步长起始值为1
起始值不能更改,步长可以更改
用show VARIABLES LIKE “%auto_increment%”
查看对应的步常代表的名字然后用set 步长代表名字=要设置的步长
MySQL五大约束详解(我有多详细只有我知道小白都能懂哦)相关推荐
- mysql数据库约束详解_深入理解mysql数据库的约束
摘要:MYSQL添加约束,删除约束添加列,修改列,删除列 添加主键约束: altertable表名addconstraint主键(形如:PK_表名)primarykey表名(主键字段); 添加外键约束 ...
- mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...
- mysql数据库约束详解_MySQL数据库中的外键约束详解
使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器 ...
- mysql基础约束详解
-- ======================================约束的示例================================== -- -- 约束作用于表结构,用于限制 ...
- 9篇小白都能懂系列博客学完MySQL基础
博主经过三天的时间整理终于把MySOL基础部分内容总结成了这九篇博客,如果博主漏写了重点的基础部分的内容,或者说博主写的地方有错误还请CSDN的兄弟们提醒(这一点就比较重要了),由于博主的时间比较有限 ...
- mysql怎么约束_MySQL 约束详解
MySQL 约束详解 MySQL 中的约束是用来保证数据的完整性的机制.数据完整性一般有以下三种形式: 实体完整性:保证表中有一个主键. 域完整性:保证数据每列的值满足特定条件. 引用完整性:保证两张 ...
- Mysql存储引擎详解(MyISAM与InnoDB的区别)
Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...
- 如何查看mysql数据库的引擎/MySQL数据库引擎详解
一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: m ...
- sql unique约束详解
sql unique约束详解 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...
最新文章
- let 与 expr Shell运算比较 let强强胜出
- 点云网络的论文理解(六)-Frustum PointNets 总体概括
- 2021年00后生活方式洞察报告
- portal认证 只能重定向80和443请求_华为防火墙内置Portal认证报文交互
- PHP undefined index的几种解决方法
- BIGEMAP下载离线地图数据(支持谷歌、百度、高德等所有地图源)
- 经典案例- 磁盘阵列两块盘掉线的数据恢复分析
- [学习]17 每天只睡6小时,依然精力充沛
- (转)sqlite developer注册方法
- iOS 性能、架构、socket 小结
- 多功能Python键盘记录工具Radium
- Linux系统之安装PDF阅读器
- Android模仿新浪微博(自定义ListView下拉刷新)
- ART工作流程及特性
- 力扣(441.26)补8.24
- Tomcat 多实例
- linux find 隐藏,使用find命令查找Linux中的隐藏文件的方法
- 火狐linux 32位,火狐浏览器下载电脑版32位
- NXP JN5169 UART 波特率设置
- 《幼儿园门禁管理系统可行性研究报告》