【Mysql】SQL约束、主键约束、非空、唯一、外键约束

SQL约束
什么是约束: 对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性. 违反约束的不正确数据,将无法插入到表中。
常见的约束
约束名 约束关键字
主键 primary key
唯一 unique
非空 not null
外键 foreign key
2.1 主键约束
什么是主键约束?
特点 :不可重复 、唯一 、非空
作用:用来标识数据库中的每一条记录
2.1.1 添加主键约束
语法格式
•字段名 字段类型 primary key

需求1: 创建一个带主键的表

-- 方式1 创建一个带主键的表
CREATE TABLE emp2(
    -- 设置主键 唯一 非空
    eid INT PRIMARY KEY,
    ename VARCHAR(20),
    sex CHAR(1)
);

-- 删除表
DROP TABLE emp2;
-- 方式2 创建一个带主键的表
CREATE TABLE emp2(
    eid INT ,
    ename VARCHAR(20),
    sex CHAR(1),
    -- 指定主键为 eid字段
    PRIMARY KEY(eid)
);
-- 方式3 创建一个带主键的表
CREATE TABLE emp2(
    eid INT ,
    ename VARCHAR(20),
    sex CHAR(1)
)
-- 创建的时候不指定主键,然后通过 DDL语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);

DESC 查看表结构

-- 查看表的详细信息
DESC emp2;

在这里插入图片描述

测试主键的唯一性 非空性

-- 正常插入一条数据
INSERT INTO emp2 VALUES(1,'宋江','男');

-- 插入一条数据,主键为空
-- Column 'eid' cannot be null 主键不能为空
INSERT INTO emp2 VALUES(NULL,'李逵','男');

-- 插入一条数据,主键为 1
-- Duplicate entry '1' for key 'PRIMARY' 主键不能重复
INSERT INTO emp2 VALUES(1,'孙二娘','女');

哪些字段可以作为主键 ?
•通常针对业务去设计主键,每张表都设计一个主键id。
•主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义,只要能够保证不重复就好。
2.1.2 删除主键约束
删除 表中的主键约束 (了解)

-- 使用DDL语句 删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;

DESC emp2;

2.1.3 主键的自增
注: 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值.
关键字:
•AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

创建主键自增的表

-- 创建主键自增的表
CREATE TABLE emp2(
    -- 关键字 AUTO_INCREMENT,主键类型必须是整数类型
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    sex CHAR(1)
);

添加数据 观察主键的自增

INSERT INTO emp2(ename,sex) VALUES('张三','男');
INSERT INTO emp2(ename,sex) VALUES('李四','男');
INSERT INTO emp2 VALUES(NULL,'翠花','女');
INSERT INTO emp2 VALUES(NULL,'艳秋','女');

2.1.4 修改主键自增的起始值
默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下面的方式

-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp2(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    sex CHAR(1)
)AUTO_INCREMENT=100;

-- 插入数据,观察主键的起始值
INSERT INTO emp2(ename,sex) VALUES('张百万','男');
INSERT INTO emp2(ename,sex) VALUES('艳秋','女');

2.1.5 DELETE和TRUNCATE对自增长的影响
•删除表中所有数据有两种方式
清空表数据的方式 特点
DELETE 只是删除表中所有数据,对自增没有影响
TRUNCATE truncate 是将整个表删除掉,然后创建一个新的表
自增的主键,重新从 1开始
测试1: delete 删除表中所有数据

-- 目前最后的主键值是 101
SELECT * FROM emp2;

-- delete 删除表中数据,对自增没有影响
DELETE FROM emp2;

-- 插入数据 查看主键
INSERT INTO emp2(ename,sex) VALUES('张百万','男');
INSERT INTO emp2(ename,sex) VALUES('艳秋','女');

 

测试2: truncate删除 表中数据

-- 使用 truncate 删除表中所有数据,
TRUNCATE TABLE emp2;


-- 插入数据 查看主键
INSERT INTO emp2(ename,sex) VALUES('张百万','男');
INSERT INTO emp2(ename,sex) VALUES('艳秋','女');

2.2 非空约束
非空约束的特点: 某一列不予许为空
语法格式
•字段名 字段类型 not null
需求: 为 ename 字段添加非空约束

-- 非空约束
CREATE TABLE emp2(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- 添加非空约束, ename字段不能为空
    ename VARCHAR(20) NOT NULL,
    sex CHAR(1)
);

2.3 唯一约束
唯一约束的特点: 表中的某一列的值不能重复( 对null不做唯一的判断 )
语法格式
•字段名 字段类型 unique
添加唯一约束

-- 创建emp3表 为ename 字段添加唯一约束
CREATE TABLE emp3(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20) UNIQUE,
    sex CHAR(1)
);

测试唯一约束

-- 测试唯一约束 添加一条数据
INSERT INTO emp3 (ename,sex) VALUES('张百万','男');

-- 添加一条 ename重复的 数据
-- Duplicate entry '张百万' for key 'ename' ename不能重复
INSERT INTO emp3 (ename,sex) VALUES('张百万','女');

主键约束与唯一约束的区别:
1.主键约束 唯一且不能够为空
2.唯一约束,唯一 但是可以为空
3.一个表中只能有一个主键 , 但是可以有多个唯一约束

2.4 外键约束
•FOREIGN KEY 表示外键约束,将在多表中学习。
2.5 默认值
默认值约束 用来指定某列的默认值
语法格式
•字段名 字段类型 DEFAULT 默认值
创建emp4表, 性别字段默认 女

-- 创建带有默认值的表
CREATE TABLE emp4(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- 为ename 字段添加默认值
    ename VARCHAR(20) DEFAULT '奥利给',
    sex CHAR(1)
);

测试 添加数据使用默认值

-- 添加数据 使用默认值
INSERT INTO emp4(ename,sex) VALUES(DEFAULT,'男');
INSERT INTO emp4(sex) VALUES('女');

-- 不使用默认值
INSERT INTO emp4(ename,sex) VALUES('艳秋','女');

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenXlab应用部署踩坑记录

参考博客: OpenXlab应用部署经验_xlabdemo-web-CSDN博客 书生浦语大模型实战营Day04OpenXLab 部署_openxlab.org.cn上传模型-CSDN博客 应用创建流程 | OpenXLab浦源 - 文档中心 1、已经在OpenXlab上上传好了模型 在上传好的模型查看一下如何使用模型 2、github…

github-chinese,跟英文GitHub说拜拜

背景 对于我们程序员来说,Github是一个常逛的web网站,里面学习资源众多,不管是查问题还是查资料都离不开他。 但是Github作为一个国际化的网站,语言主要是英语,所以对于一些英语似懂非懂的同学来说还是有一些难处。 想过找一个国内中文的Github作为一个平替网站,但是资…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些,相比文科说理工科的院校也更多,如何选择适合自己的专业,这是一个比较重要的课题,毕竟大学专业直接关系到职业,是一辈子的大事。 那么理科究竟如何选择专业呢?需要从什么地方…

贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解,但在某些问题上能提供足够好的解决方案。贪心算法的关键特性包括&#…

【TB作品】MSP430G2553单片机,转速测量系统,转速测量仪,霍尔传感器

文章目录 题目器件原理霍尔传感器测速原理:电机如何调节速度程序设计 实验报告实验题目实验目的实验器材实验原理霍尔传感器测速原理电机调速原理定时器中断原理 硬件连接软件设计定时器配置主程序中断处理程序 实验结果实验总结 题目 设计基于MSP430的转速测量仪的…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-10权重衰减

10权重衰减 """ 正则化是处理过拟合的常用方法:在训练集的损失函数中加入惩罚项,以降低学习到的模型的复杂度。 保持模型简单的一个特别的选择是使用L2惩罚的权重衰减。这会导致学习算法更新步骤中的权重衰减。 """impor…

Python基础教程(三十):math模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

AudioSep:从音频中分离出特定声音(人声、笑声、噪音、乐器等)本地一键整合包下载

AudioSep是一种 AI 模型,可以使用自然语言查询进行声音分离。这一创新性的模型由Audio-AGI开发,使用户能够通过简单的语言描述来分离各种声音源。 比如在嘈杂的人流车流中说话的录音中,可以分别提取干净的人声说话声音和嘈杂的人流车流噪声。…

对于初学者,该如何选择大模型框架 LlamaIndex 与 LangChain ?

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

任务3.8.4 利用RDD实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述:使用Spark RDD实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell4. 读取数据生成RDD5. 数据处理6. 计算TopN7. 输出结果8…

「动态规划」如何求最长湍流子数组的长度?

78. 最长湍流子数组https://leetcode.cn/problems/longest-turbulent-subarray/description/ 给定一个整数数组arr,返回arr的最长湍流子数组的长度。如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。更正式地来说,…

算法期末整理

目录 一 算法概述 二 递归与分治策略 三 动态规划 四 贪心算法 五 回溯法 六 分支限界法 七 随机化算法 八 线性规划与网络流 一 算法概述 算法的概念 通俗地讲,算法是指解决问题的一种方法或一个过程。更严格地讲,算法是由若干条指令组成的有穷…

设计模式——职责链模式

职责链模式(Chain of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。   发出请求的客户端并不知道职责链中哪一个对象…

python watchdog 配置文件热更新

目录 一、Watchdog示例 二、aiohttp服务配置热更新 在同事的golang代码中学习到了config.json热更新的功能,这里自己也学习了一下python写web服务的时候怎么来实现配置的热更新。主要是利用Watchdog这个第三方python库,来监控文件系统的改变&#xff0…

实战电商大数据项目搭建||电商大数据采集||电商API接口

我会提供给你大概1亿条真实的互联网用户上网数据,至于来源,我先不告诉你,绝对是你在网络上无法找到的宝贵数据源。 此外,还会给你提供一个基于当前数据特点而设计的大数据处理方案。 当然,为了防止用户的隐私部分被泄露…

每日优秀影视分享❗❗

一、热门电影推荐 《头脑特工队 2》:皮克斯再次为观众带来了这部经典动画的续集。 影片讲述了刚步入青春期的小女孩莱莉脑海中的复杂情绪进行的一场奇妙冒险。 这部电影不仅延续了前作的优秀品质,更在情感深度和视觉呈现上有了进一步的提升。 《艾尔登…

同时使用接口文档swagger和knife4j

项目场景: springboot项目中同时使用接口文档swagger和knife4j 问题描述 在实体类中设置了字段必填的属性,在访问接口文档时出现异常 实体类关键代码片段 /*** 部门表 sys_dept*/ public class SysDept extends BaseEntity {private static final lo…

Python基础入门

目录 1. 什么是Python? 2. 安装Python 3. Python基础语法 4. 数据结构 5. 文件操作 6. Python标准库 总结 1. 什么是Python? Python是一种高级编程语言,由Guido van Rossum于1991年发布。它以其简单易读的语法和强大的功能而闻名&…

高效22KW双向DCDC储能、充电电源模块项目设计开发

22kW 双向CLL谐振变换器的目标是输出电压范围宽、高效率和高功率密度的双向应用,如电动汽车车载充电器和储能系统。研究了一种新的灵活的 CLLC 双向谐振变换器增益控制方案,以便在充放电模式下实现高效率和宽电压增益范围。得益于 Wolfspeed C3MTM 1200V…

读《文明之光》第2册总结

《文明之光》系列大致按照从地球诞生到近现代的顺序讲述了人类文明进程的各个阶段,每个章节相对独立,全景式地展现了人类文明发展历程中的多样性。《文明之光》系列第二册讲述了从近代科学兴起,到工业革命时代,以及原子能应用这一…