IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL约束 -> 正文阅读

[大数据]MySQL约束


约束实际上就是表中数据的限制条件,表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。

1.主键约束(primary key) PK

MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便尽快的找到某一行。主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。每个表最多只允许一个主键。主键约束的关键字是:primary key,当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

1.添加单列主键

1、定义字段的同时指定主键

语法格式:

create table 表名(
   ...
   <字段名> <数据类型> primary key 
   ...
)

例如现在我们创建一个emp1表,然后给eid属性指定主键:
在这里插入图片描述
在左侧窗口打开emp1表,然后选择设计表,可以看到:
在这里插入图片描述
成功给eid设置了主键。

2、定义字段之后再指定主键

语法格式:

create table 表名(
   ...
   [constraint <约束名>] primary key [字段名]
);

例如现在在创建一个emp2表,然后定义字段之后再给eid属性指定主键:
在这里插入图片描述
在左侧窗口打开emp2表,然后选择设计表,可以看到:
在这里插入图片描述
也成功给eid设置了主键。
可以看到,这两种方法都可以设置主键,而且并没有优劣之分,那么加不加主键到底有什么区别呢?
以我们创建的emp2为例,现在给表中添加一行数据,如下:
在这里插入图片描述
在这里插入图片描述

如果我们在添加一行eid也是1001的数据会怎样呢?
在这里插入图片描述
我们发现,程序会报错,即主键约束所在列的值不能重复
我们在创建一行,让主键约束所在的列的值为空:
在这里插入图片描述
程序也会报错,说明主键约束所在列的值不能为空。

2.添加多列联合主键

所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:

  1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
  2. 一张表只能有一个主键,联合主键也是一个主键

语法格式:

create table 表名(
   ...
   primary key (字段1,字段2,…,字段n)
);

例如现在创建一个emp3表,然后给eiddeptId属性指定主键:
在这里插入图片描述
在左侧窗口打开emp3表,然后选择设计表,可以看到:
在这里插入图片描述
主键设置成功。
现在给表中添加一行数据:
在这里插入图片描述
在左侧窗口打开emp3表,然后选择设计表,可以看到:
在这里插入图片描述
现在,我们把刚添加的那一行在复制一遍:
在这里插入图片描述
如果我们只是让name重复呢?再添加一行:
在这里插入图片描述
在这里插入图片描述
此时就可以添加,说明联合主键约束所在列的值不能同时重复
如果再添加一行,让name为空呢?
在这里插入图片描述
插入错误。
如果让deptId为空呢?
在这里插入图片描述
插入也错误,说明:联合主键约束所在列的值都不能为空

3.通过修改表结构添加主键

语法格式:

create table 表名(
   ...
);
alter table <表名> add primary key(字段列表);

如现在创建一个emp4表,创建完成后在添加主键:
在这里插入图片描述

在左侧窗口打开emp4表,然后选择设计表,可以看到:
在这里插入图片描述
添加成功。同样,添加联合主键方式和添加单列主键方法相同,不在赘述。

4.删除主键

一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
语法格式:

alter table <数据表名> drop primary key;

同时,也不用区分是单列主键还是联合主键,都可以采用上述代码删除主键。例如,删除emp1的主键:
在这里插入图片描述
在这里插入图片描述
删除操作后,主键消失。

2.自增长约束(auto_increment)

在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。通过给字段添加auto_increment属性来实现主键自增长。

1、自增长约束的特点

  • 默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。
  • 一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
  • auto_increment约束的字段必须具备非空属性。
  • auto_increment约束的字段只能是整数类型。
  • auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,
    auto_increment`就会失效。

2、默认自增长方式

语法格式:

字段名 数据类型 auto_increment

例如:
先创建一个user1表,给它的id属性先添加一个主键,在将主键定义为自增长:
在这里插入图片描述
创建成功,现在只给它的name赋值:
在这里插入图片描述
查看数据:
在这里插入图片描述
可以发现,在没有给id赋值的情况下,id的值会随着我们添加的数据项从1开始自增的。

3、指定自增字段初始值

如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加。

1、创建表时指定

例如现在新创建一个user3表,在创建的过程中指定主键值从100开始自增:
在这里插入图片描述
创建成功,现在只给name插入数据:
在这里插入图片描述
查看数据:
在这里插入图片描述
可以发现id值从100开始自增。

2、创建表之后指定

例如创建一个user3表,创建完成后指定主键值从200开始自增:
在这里插入图片描述
创建成功,现在只给name插入数据:
在这里插入图片描述
查看数据:
在这里插入图片描述
可以发现id值从200开始自增。

3、delete删除后自增列的变化

我们操作user1,通过delete将表内的数据删除
在这里插入图片描述
在这里插入图片描述

然后在给他添加一行数据,看看会发生什么?
在这里插入图片描述
查看表:
在这里插入图片描述
可以发现:delete数据之后自动增长从断点开始

4、truncate删除后自增列的变化

继续操作user1,通过truncate方法将表删除:
在这里插入图片描述
在给其添加一行数据,看看结果:
在这里插入图片描述
在这里插入图片描述
可以发现:truncate数据之后自动增长从默认起始值开始

3. 非空约束(not null)

MySQL 非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

1、创建表时指定

语法格式:

<字段名><数据类型> not null;

例如现在我们在创建一个user4,在创建表时给其nameaddress添加非空约束。
在这里插入图片描述
在左侧窗口打开user4表,然后选择设计表,可以看到:
在这里插入图片描述

nameaddress都在【不是null】选项中选中,说明指定成功,在添加一行数据试试:
在这里插入图片描述
发现,当我们只给name赋值的时候,会出现错误,提示address没有值。所以非空约束条件下字段的值不能为空

2、创建表之后指定

语法格式:

alter table 表名 modify 字段 类型 not null;

再创建一个user5,创建完成后给nameaddress添加非空约束。
在这里插入图片描述
在左侧窗口打开user5表,然后选择设计表,可以看到:

在这里插入图片描述
name在【不是null】选项中选中,说明指定成功,添加一行数据试试:

在这里插入图片描述
发现我们没有给name赋值的话,还是会提示错误,即非空约束条件下字段的值不能为空。

3、删除非空约束

语法格式:

alter table 表名 modify 字段 类型 

例如删除user5表的非空约束,然后通过dec table显示结果,可以看到这里的null可以为yes,即可以为空,表示删除成功。
在这里插入图片描述

4.唯一性约束(unique)

唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。

1、创建表时指定

语法格式:

<字段名> <数据类型> unique

例如现在创建一个user6,在创建表时给其`name``添加唯一性约束。
在这里插入图片描述
创建成功,现在先添加一行数据:
在这里插入图片描述
在这里插入图片描述

添加成功,现在在添加一行数据,让新添加的phone_number和上一行数据的phone_number相同:

在这里插入图片描述
添加失败,因为唯一约束中字段的值不能重复出现

2、创建表之后指定

语法格式:

 alter table 表名 add constraint 约束名 unique();

例如现在创建一个user7,表创建完成后给其`name``添加唯一性约束。
在这里插入图片描述
创建成功,还是给表中添加一行数据:
在这里插入图片描述

添加成功。在添加一行数据,让新添加的phone_number和上一行数据的phone_number相同:
在这里插入图片描述
添加失败。即唯一约束中字段的值不能重复出现

3、删除唯一约束

语法格式:

alter table <表名> drop index <唯一约束名>

例如现在删除user7表的唯一性约束:
在这里插入图片描述
在给user7表中添加两行数据,并让他们的phone_number值相同,看看是否可以添加:
在这里插入图片描述
在这里插入图片描述
可以添加,表示删除成功。

5.默认约束(default)

MySQL 默认值约束用来指定某列的默认值

1、创建表时指定

语法格式:

方式1<字段名> <数据类型> default <默认值>;

例如创建一个user8,在创建的过程中address指定其默认为:西安
在这里插入图片描述
向表中添加一行数据,但是不给address赋值:
在这里插入图片描述

在这里插入图片描述
可以发现,在没有给address指定值的时候,它的值被默认添加了西安

2、创建表后指定

语法格式:

方式2: alter table 表名 modify 列名 类型 default 默认值; 

例如,创建一个user8表,表创建完成后,给其address指定默认为:陕西:
在这里插入图片描述
向表中添加一行数据,但是不给address赋值:
在这里插入图片描述
在这里插入图片描述

在没有给address指定值的时候,它的值被默认添加了陕西

3、删除默认约束

语法格式:

alter table <表名> modify column <字段名> <类型> default null;

例如,删除user9的默认约束并给其新建一行:
在这里插入图片描述
在这里插入图片描述

发现,新添加的行中也没有给address指定值,它显示为null,说明删除成功。

6.零填充约束(zerofill)

1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
2、zerofill默认为int(10)
3、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~ +127,无符号为0~256。

1、添加零填充约束

例如现在我们新创建一个表user10,给id添加零填充约束,并添加两行数据:
在这里插入图片描述
在这里插入图片描述
可以发现,我们填充的id值会被默认改为10位。

2、删除零填充约束

删除刚才给user10创建的零填充约束,在添加一行数据:
在这里插入图片描述
在这里插入图片描述
可以发现我们填充的id值变为了我们输入的值,表示删除成功。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:59:50  更:2021-12-28 22:59:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:06:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码