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六大约束

MySQL的约束分为 主键primary key,非空not null,默认default, 唯一unique, 外键foreign key, 检查check

目录

一、主键 primary key

1.主键的定义有两种

2.一张表最多只能有一个主键,但可以符合主键

3.主键列的值是不可以重复的,且不能为null

二、非空 not null? ? ?默认 default

1.非空约束,用于约束该字段的值不能为null

2.默认约束,插入字段值的时候,若没有插入值则使用默认值

三、唯一 unique

1.当定义了unique约束后,该字段的值是不能重复的

2.如果该字段指定了unique却没有指定not null,则该unique字段中可以有多个null值

3.一张表可以使用多个unique约束

四、外键 foreign key

1.外键指向表的字段,要求该字段是 主键primary key 或者是 unique唯一的

2.外键是【从表】的字段指向【主表】的主键或唯一unique

3.表的类型是innodb,这样的表才支持外键

4.外键字段类型要和主键字段类型一致,长度可以不一致

5.【从表】的外键字段的值,必须要在【主表】的主键字段中出现过,或者为null【前提是【从表】的外键字段允许为null】

6.一旦建立了外键关系,就不可以随意删除数据

五、检查 check

1.MySQL5.7目前还不支持check,只支持语法的校验,但不会生效

2.学习oracle, SQL Server,这俩个数据库是真的可以生效


一、主键 primary key

1.主键的定义有两种

????????1) 直接在字段后指定:字段名?primary key

CREATE TABLE t1(
	id INT PRIMARY KEY,
	`name` VARCHAR(32));

????????2) 在表的定义之后写primary key (列名);

CREATE TABLE t2(
	id INT,
	`name` VARCHAR(32),
	PRIMARY KEY (`name`));

2.一张表最多只能有一个主键,但可以符合主键

CREATE TABLE t3(
	id INT,
	`name` VARCHAR(32),
	PRIMARY KEY(id, `name`)); -- 这里就是复合主键

3.主键列的值是不可以重复的,且不能为null

INSERT INTO t1
	VALUES(null, 'tom'); -- false

二、非空 not null? ? ?默认 default

1.非空约束,用于约束该字段的值不能为null

2.默认约束,插入字段值的时候,若没有插入值则使用默认值

create table t4(
    id int primary key,
    'name' varchar(32) not null default ''); 
# 表示name字段不可以为空,可配合default(默认)使用
# 默认为空字符串

三、唯一 unique

1.当定义了unique约束后,该字段的值是不能重复的

2.如果该字段指定了unique却没有指定not null,则该unique字段中可以有多个null值

? ? ? ? 【如果该字段同时使用了unique 和not null 字段,使用效果就像主键 primary key】

3.一张表可以使用多个unique约束

四、外键 foreign key

1.外键指向表的字段,要求该字段是 主键primary key 或者是 unique唯一的

2.外键是【从表】的字段指向【主表】的主键或唯一unique

3.表的类型是innodb,这样的表才支持外键

4.外键字段类型要和主键字段类型一致,长度可以不一致

5.【从表】的外键字段的值,必须要在【主表】的主键字段中出现过,或者为null【前提是【从表】的外键字段允许为null】

6.一旦建立了外键关系,就不可以随意删除数据

# 创建主表
CREATE TABLE first_table(
	id INT PRIMARY KEY, -- 假定该id当作部门编号
	`name` VARCHAR(32) NOT NULL DEFAULT '');
# 创建从表
CREATE TABLE second_table(
	id INT PRIMARY KEY, -- 假定该id为员工编号
	`name` VARCHAR(32) NOT NULL DEFAULT '',
	dept_id INT, -- 员工所在部门的编号
	-- 下面指定外键关系
	FOREIGN KEY (dept_id) REFERENCES first_table(id));

    # foreign key 外键
    # dept_id 【从表】字段
	# refernces 参考文献
    # first_table【主表】
    # id 主表字段
# 测试数据
INSERT INTO first_table
	VALUES(100, '研发部'), (200, '宣传部');
SELECT * FROM first_table;

INSERT INTO second_table
	VALUES(1, 'tom', 100), (2, 'jack', 200);-- 可以成功
	
INSERT INTO second_table 
    VALUES((3, 'marry', 300));-- 这里会失败,因为300部门不存在

INSERT INTO second_table 
    VALUES(4, 'king', NULL); -- 这里会成功,因为外键字段没有设置not null约束

SELECT * FROM second_table;

五、检查 check

1.MySQL5.7目前还不支持check,只支持语法的校验,但不会生效

CREATE TABLE t5(
	id INT PRIMARY KEY,
	`name` VARCHAR(32),
	sex VARCHAR(6) CHECK (sex IN('man','woman')),-- 设定性别为男或者女
	sal DOUBLE CHECK (sal > 1000 AND sal < 2000));-- 设定薪资为1000到2000
-- 添加数据
INSERT INTO t5
	VALUES(1, 'tom', 'abc', 1);
SELECT * FROM t5; -- 是真的进去了

2.学习oracle, SQL Server,这俩个数据库是真的可以生效

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:04:34 
 
开发: 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/23 9:35:49-

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