Mysql之约束

news2024/11/18 4:24:08

简介

在这里插入图片描述
not null前面也说过,这些约束是针对列的数据的,对应整个列的数据都起约束作用

基本但是创建表在字段后使用的语句

1.primary key-主键

在这里插入图片描述
在这里插入图片描述

==主键特征1.对应列不能有重复的数据2.不能为NULL ==
唯一且非空

-- 主键
-- id,name,email
CREATE TABLE t17(
	id INT PRIMARY KEY,-- 表示id列是主键
	`name` VARCHAR(32),
	email VARCHAR(32))
-- 主键列的值不能重复
INSERT INTO t17
	VALUES (1,'jack','jack@sohu.com');
INSERT INTO t17
	VALUES (2,'tom','tom.sohu.com')
INSERT INTO t17
	VALUES (1,'yuan','11.com')-- 如果执行完上面的,执行这行会报错
	因为id是主键,主键不能重而且不能为NULL!,之前有id=1的了,所以添加不成功

在这里插入图片描述

细节

1.一张表最多一个主键
加入就是想要两个关键字不能同时相同
有个复合主键

错误演示

CREATE TABLE t18(
	id INT PRIMARY KEY,-- 表示id列是主键
	`name` VARCHAR(32) PRIMARY KEY,
	email VARCHAR(32))
	报错,有两个主键

正确演示

CREATE TABLE t18(
	id INT ,
	`name` VARCHAR(32) ,
	email VARCHAR(32),
	PRIMARY KEY(id,`name`) -- 这里就是复合主键
	);
INSERT INTO t18
	VALUES (1,'jack','jack@sohu.com');
INSERT INTO t18
	VALUES (2,'tom','tom.sohu.com')
-- 上面正常操作
INSERT INTO t18
	VALUES (1,'cc','jack@sohu.com');
--上一行也可以添加进去因为复合主键是两个都相同才不能添加
SELECT * FROM t18
INSERT INTO t18
	VALUES (1,'jack','jack@sohu.com');
这个就报错了

查询
在这里插入图片描述
报错
在这里插入图片描述

2.主键可以在最后定义

CREATE TABLE t18(
	id INT ,
	`name` VARCHAR(32) ,
	email VARCHAR(32),
	PRIMARY KEY(`name`) -- 表定义最后指定主键
	);

3.使用desc查看表,可以看见主键情况
在这里插入图片描述

not null和unique

在这里插入图片描述

not null 前面的文章-Mysql数据库中的表
有讲

简而言之就是修饰的列类型不能为空
后面可以写成
NOT NULL DEFAULT 值
后面的值就是当为空时的默认值

UNIQUE
修饰的列数据
不能有相同的值
和主键不同的是
1.可以为NULL,且对应列的NULL不算重复,可以有多个NULL2.可以有多个unique字段3.可以把NOT NULL 和UNIQUE一起使用,达成类似主键的效果

forrign key-外键

在这里插入图片描述
这个约束就是
在我们有一个主表-定义好的
我们想定义一个从表,但是这个从表有一个元素要和这个主表的对应元素(主键、unique)相匹配才能添加
这时就可以用到外键了

在这里插入图片描述
比如这两个表
学生表的class_id必须和我们主表班级表
的id想匹配才可以添加
这个第三行数据就添加不成功,没有与其相匹配的班级的id
主表(外键对应元素)一个元素可以对应多个从表对应数据

细节

在这里插入图片描述
5.是对主表删除元素的限制

# 班级表-主表
# 学生表-从表
# 为了方便奥,我们把从表的定义外键类的数据列成为外键
# 而主表的对应外键的数据列叫主键
CREATE TABLE class(
		id INT PRIMARY KEY,
		`name` VARCHAR(32) NOT NULL DEFAULT '')
CREATE TABLE stu_02(
		id INT PRIMARY KEY,
		`name` VARCHAR(32) NOT NULL DEFAULT '',
		class_id INT,
		-- 下面定义外键关系
		FOREIGN KEY (class_id) REFERENCES class(id));-- class_id外键,id主键
INSERT INTO class
	VALUES (100,'java'),(200,'web');
	
SELECT * FROM class

INSERT INTO stu_02
	VALUES(1,'tom',100);
INSERT INTO stu_02
	VALUES(2,'jack',200);
-- 上面肯定能添加成功
INSERT INTO stu_02
	VALUES(3,'yuan',300);-- 该语句失败因为主键列没有300这个元素

INSERT INTO class
	VALUES(300,'php')-- 执行完这一行上面那一行就可以执行了
	
INSERT INTO stu_02
	VALUES(4,'ailun',100);	-- 主键的一个元素,可以包含对应外键多行数据(100班级,可以包含很多学生)
	
INSERT INTO stu_02
	VALUES(5,'666',NULL) -- 当允许为空时,外键可以为空

-- 有了主键外键关系的表,不能随意删除数据元素,只要主键有对应的外键数据,主键对应的数据行就不能删除
DELETE FROM class
	WHERE id = 100# 删除不成功,学生表里有100班的人,你不能100班就直接没了吧

SELECT * FROM stu_02 

要删主表对应元素
要先删光从表对应数据行,然后就可以删除了

如果主表对应主键为unique修饰的可以为NULL
如果包含NULL,其实NULL对应数据行也可以直接删除

CHECK

在这里插入图片描述

# 演示check
# mysql 5的版本,不支持check,只做语法检测不会生效
CREATE TABLE t23(
	id INT PRIMARY KEY,
	`name` VARCHAR(32),
	sex VARCHAR(6) CHECK(sex IN('man','woman')),
	sal DOUBLE CHECK(sal>1000 AND sal<2000)
	);
-- 添加数据
INSERT INTO t23
	VALUES (1,'tom','man',3000) -- 可以看到即使不符合CHECK的要求也能添加成功
	-- mysql5不支持CHECK
SELECT * FROM t23

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AX7A200教程(1): DDR3仿真平台搭建(一)

本章节主要调用官方的MIG控制器&#xff0c;并使用官方的MIG控制器进行仿真&#xff0c;开发环境vivado2020.1鉴于很多童鞋无法仿真自己新建的DDR工程&#xff0c;即使使用modelsim仿真也仿真失败&#xff0c;本例程着重于在vivado中&#xff0c;对自己新建的带DDR3的工程进行仿…

力扣45.跳跃游戏Ⅱ(贪心思路详解)

文章目录力扣45.跳跃游戏Ⅱ题目描述算法思路代码实现力扣45.跳跃游戏Ⅱ 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意…

114、【树与二叉树】leetcode ——77. 组合:回溯法+剪枝优化(C++版本)

题目描述 原题链接&#xff1a;77. 组合 解题思路 组合问题是回溯法里的经典问题&#xff0c;分别采用两个全局变量path记录当前组合情况&#xff0c;res作为结果集。每次因为结果集需要去重&#xff0c;因此还需要再设置一个局部变量startIndex作为每次遍历的起始值&#xf…

Linux kernel Memory Pin机制的实现以及测试

提起Memory Pin机制&#xff0c;就不得不提到swap的概念&#xff0c;这两个概念息息相关&#xff0c;为了避免在CPU忙碌的时候&#xff0c;也就是在缺页异常发生的时候&#xff0c;临时搜索可供换出的内存页面并加以换出&#xff0c;Linux内核定期地检查系统的空闲页面数量是否…

九大数据分析方法-单指标分析方法与多指标分析方法

文章目录1 单指标分析方法1.1 周期性分析法1.2 结构分析法1.3 分层分析法2 多指标分析方法2.1 矩阵分析法2.2 指标拆解法本文来源&#xff0c;为接地气的陈老师的知识星球&#xff0c;以及付同学的观看笔记。1 单指标分析方法 顾名思义&#xff0c;用单个数据指标进行数据分析…

RocketMQ 简介

一、简介 官方简介&#xff1a; l RocketMQ是一款分布式、队列模型的消息中间件&#xff0c;具有以下特点&#xff1a; l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l 高效的订阅者水平扩展能力 l 实时的消息订阅机制 l 亿级消息堆积能力 二、网络架构 三、特性 1. na…

05-jquery基本过滤器

2.5过滤器 过滤器是一个字符串&#xff0c;用了筛选dom对象&#xff0c;过滤器是和选择器一起使用。在选择dom对象后&#xff0c;再进行过滤筛选。 .5.1基本过滤器 使用dom对象在数组中的位置&#xff0c;作为过滤条件。 1 选择数组中第一个dom成员。 语法&#xff1a;$(“选…

【nginx】全面实战-Mac

▒ 目录 ▒&#x1f6eb; 导读需求1️⃣ 安装brew替换为阿里源修复报错No such file or directorybrew install nginx常用文件及目录常用命令2️⃣ nginx配置配置结构3️⃣ web服务器默认服务器自定义静态服务器4️⃣ 反向代理配置及介绍5️⃣ 负载均衡配置及介绍负载均衡的策略…

杂记:python和pyinstaller从头安装步骤(附安装包的备份)

pyinstaller 简介 知道的就跳过本章 python 属于脚本语言&#xff0c;只要有 python 就能运行 .py 文件。而 pyinstaller 是可执行文件文件生成工具&#xff0c;约等于编译工具。 以 windows 为例&#xff0c;在 A 计算机上生成的 exe&#xff0c;复制到 B 计算机可以直接运行…

字节跳动青训营--前端day3

文章目录前言一、写好JavaScript的一些原则二、各司其职三、组件封装四、过程抽象前言 仅以此文章记录学习 一、写好JavaScript的一些原则 各司其职&#xff1a;让HTML、CSS和JavaScript职能分离组件封装&#xff1a;好的UI组件具备正确性、扩展性、复用性过程抽象&#xff1…

JVM堆内存分配策略(深入理解Java虚拟机第三章)

堆内存模型&#xff1a; 年轻代&#xff1a; 根据分代算法&#xff0c;默认小于15岁的对象称作年轻代&#xff0c;年轻代分为Eden区、幸存者区(Survivor Form&#xff0c;Survivor To),三者比例为&#xff1a;8&#xff1a;1&#xff1a;1 Eden 分区&#xff1a;对象出生分区…

Java 实现几种 异步的实现方式

前言 异步执行对于开发者来说并不陌生&#xff0c;在实际的开发过程中&#xff0c;很多场景多会使用到异步&#xff0c;相比同步执行&#xff0c;异步可以大大缩短请求链路耗时时间&#xff0c;比如&#xff1a;发送短信、邮件、异步更新等&#xff0c;这些都是典型的可以通过…

FL水果21最新版本电脑编曲软件FL Studio更新

电脑编曲软件也就是我们常说的宿主软件&#xff0c;英文简称DAW。 FL Studio俗称水果&#xff0c;是一款开发初衷为了电子音乐制作的宿主软件。内置了非常多优秀的合成器以及效果器插件&#xff0c;极为适合于电子音乐的编排。同时FL Studio支持第三方音源插件导入&#xff0c;…

[RootersCTF2019]ImgXweb

目录 信息收集 JWT伪造 工具使用 寻找秘钥 curl 补充知识 信息收集 进入查看源码未发现重要信息 注册admin失败&#xff0c;猜测应该需要垂直越权 先随意注册个账户coleak 登录后发现可以文件上传&#xff0c;上传shell后发现不能连接&#xff0c;执行命令也没有回显…

Linux常用命令——tailf命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tailf 在屏幕上显示指定文件的末尾若干行内容&#xff0c;通常用于日志文件的跟踪输出。 补充说明 tailf命令几乎等同于tail -f&#xff0c;严格说来应该与tail --followname更相似些。当文件改名之后它也能继…

微服务注册中心-Eureka

微服务注册中心-Eureka微服务注册中心-Eureka一、注册中心&#xff08;Eureka&#xff09;二、Euraka实现1.eureka-server端&#xff08;1&#xff09;新建项目&#xff0c;引入pom依赖&#xff08;2&#xff09;编写启动类&#xff0c;引入开启注册中心的注解&#xff08;3&am…

py第八章 面向对象 笔记

8.1类与对象的基础运用类是抽象的&#xff0c;对象是类的实例8.1.1类的定义class 类名:属性名属性值def 方法名(self):方法体类名:大驼峰命名法&#xff1a;首字母一般为大写方法参数列表中的第一个参数是一个指代对象的默认参数selfclass Car:wheels4def drive(self):print(行…

非常好用,绝对未来黑马的 Python 开源测试框架 PySimpleTest

非常好用&#xff0c;绝对未来黑马的 Python 开源测试框架 PySimpleTest 简单介绍 PySimpleTest 是一个非常简洁开源的python代码测试框架&#xff0c;作者是 https://github.com/Time-Coder?tabstars 你可以在以下网站找到PyPI索引&#xff1a;https://pypi.org/project/P…

CSS 排行榜

CSS 排行榜 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>排行榜</title><style type"text/css">* {margin: 0;padding: 0;}/* 容器 */.rank-container {width: 400px;color: #333;font-size: 14p…

go 常用命令

巩固学习最好的方法是通过go help看文档 GO语言规范文档 终端执行命令 go help environment GOBIN The directory where ‘go install’ will install a command. go 命令使用 go <command> [arguments]command&#xff1a; The commands are:bug start a b…