SQL语句详解四-DQL(数据查询语言-约束)

news2024/9/24 22:39:30

约束

  • 概述:对表中的数据进行限定,保证数据的正确性,有效性和完整性。

约束分类

约束关键字约束意思
primary key主键约束
not null非空约束
unique唯一约束
foreign key外键约束

例子:sname varchar(40) not null, – 代表 sname 这个字段不能为 NULL


非空约束

  • 概述:NOT NULL ,某一列的值不能为 NULL

  • 语法

    • 创建表的时候添加 非空约束
    CREATE TABLE stu(
    	id INT,
        name VARCHAR(40) NOT NULL				-- name 字段非空
    );
    
    • 创建完表后,添加 非空约束
    ALTER TABLE stu MODIFY name VARCHAR(40) NOT NULL;
    
    • 删除 name 的 非空约束
    ALTER TABLE stu MODIFY name VARCHAR(40);
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a 时候,id 字段添加非空约束
    CREATE TABLE a(
    	id INT NOT NULL,
    	NAME VARCHAR(40)
    );
    
    -- 复制表 a ,新的表名是 b
    CREATE TABLE b LIKE a;
    
    -- 查询表结构
    DESC a;				-- 可以看到在 Null一列显示 NO(不可为空)
    DESC b;				-- 可以看到在 Null一列显示 NO
    
    -- 删除 b 表中非空约束
    ALTER TABLE b MODIFY id INT;
    
    DESC b;				-- 执行完删除后,才执行查询,显示为 YES
    
    -- b 表中 name 添加非空约束
    ALTER TABLE b MODIFY NAME VARCHAR(40) NOT NULL;
    
    DESC b;				-- 执行完删除后,执行查询,name 显示为 NO
    
    -- 使用完删除 数据库即可
    DROP DATABASE test;
    

唯一约束

  • 概述:UNIQUE ,某一列值唯一,不能重复

    • 唯一约束可以有 NULL 值,但是只能有一条记录为 NULL
  • 语法

    • 创建表时,添加 唯一约束
    CREATE TABLE stu(
    	id INT,
        phone_number VARCHAR(11) UNIQUE		-- 手机号唯一 
    );
    
    • 创建完表后,添加 唯一约束
    ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
    
    • 删除 唯一约束
    ALTER TABLE stu DROP INDEX phone_number;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a ,并添加唯一约束
    CREATE TABLE a(
    	id INT,
    	phone_number VARCHAR(11) UNIQUE
    );
    
    -- 查看 a 表结构
    DESC a;				-- phone_number key一列为 UNI
    
    -- 删除 a 表中的唯一约束
    ALTER TABLE a DROP INDEX phone_number;
    
    DESC a;				-- phone_number key一列为 空白
    
    -- 给 a 表 id 添加唯一约束
    ALTER TABLE a MODIFY id INT UNIQUE;
    
    DESC a;				-- id key一列为 UNI
    
    -- 删除数据库
    DROP DATABASE test;
    

主键约束

  • 概述:PRIMARY KEY ,某一列设置为主键(非空且唯一)

    • 一张表只能有一个字段为主键
    • 主键是表中记录的唯一标识(例如:身份证号)
  • 语法

    • 创建表时,添加 主键约束
    CREATE TABLE stu(
    	id int primary key,					-- 给 id 添加主键约束
        name VARCHAR(40)
    );
    
    • 创建完表后,添加 主键约束
    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
    
    • 删除 主键约束
    ALTER TABLE stu DROP PRIMARY KEY;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a 时候,id 字段添加主键约束
    CREATE TABLE a(
    	id INT PRIMARY KEY,
    	NAME VARCHAR(40)
    );
    
    -- 复制表a ,新表名为 b
    CREATE TABLE b LIKE a;
    
    -- 查询表的结构
    DESC a;				-- 可以看到id,key这一列显示 PRI,NULL 为 NO
    DESC b;				-- 可以看到id,key这一列显示 PRI,NULL 为 NO
    
    -- 删除 b 表中的主键约束
    ALTER TABLE b DROP PRIMARY KEY;
    
    DESC b;
    
    -- 添加 b 表中的主键约束
    ALTER TABLE b MODIFY id INT PRIMARY KEY;
    
    DESC b;
    
    -- 使用完,删除数据库
    DROP DATABASE test;
    
自动增长
  • 概述:如果某一列是数值类型,使用 AUTO_INCREMENT 完成值的自动增长

  • 语法

    • 创建表时,添加主键约束,并且完成主键自增长
    CREATE TABLE stu(
    	id INT PRIMARY KEY AUTO_INCREMENT,		-- 主键,自增长
        name VARCHAR(40)
    );
    
    • 创建完后,添加自动增长
    ALTER TABLE stu MODIFY id AUTO_INCREMENT;
    
    • 删除自动增长
    ALTER TABLE stu MODIFY id INT;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a ,并添加主键约束和自增长
    CREATE TABLE a(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	phone_number VARCHAR(11) 
    );
    
    -- 查看 a 表结构
    DESC a;				-- id Extra一列为 auto_increment
    
    -- 删除 a 表中的自动增长
    ALTER TABLE a MODIFY id INT;
    
    DESC a;				-- id Extra一列为 空白
    
    -- 给 a 表 id 添加 自动增长
    ALTER TABLE a MODIFY id INT AUTO_INCREMENT;
    
    DESC a;				-- id Extra一列为 auto_increment
    
    -- 删除数据库
    DROP DATABASE test;
    

外键约束

  • 概述:FOREIGN KEY ,让表和表之间产生关系,从而保证数据的正确性

  • 语法

    • 创建表时,添加外键约束
    CREATE TABLE stu(
    	...
        外键列, 
        CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称)
    );
    
    • 创建完表后,添加外键
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称)
    • 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    
  • 示例代码

    
    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建 部门 表
    CREATE TABLE dept(
    	deptId INT PRIMARY KEY,		-- 部门表号
    	NAME VARCHAR(40)		-- 部门名字
    );
    
    -- 创建员工表
    CREATE TABLE employ(	
    	id INT PRIMARY KEY,	     --	员工编号	
    	ename VARCHAR(40),           -- 员工名字
    	dept_id INT,		     -- 员工部门编号
    	CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId)
    );
    
    -- 看下述步骤查看是否有外键
    
    
    -- 删除 员工表外键
    ALTER TABLE employ DROP FOREIGN KEY emp_dept;
    
    -- 查看
    
    -- 添加 员工表外键
    ALTER TABLE employ ADD CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId);
    
    -- 查看
    
    -- 删除数据库
    DROP DATABASE test;
    
查看外键
  • 删除外键后

  • 添加外键后

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

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

相关文章

【C语言】指针知识点笔记(2)

目录 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组

Web 服务器渗透测试清单

Web 服务器渗透测试在三个重要类别下进行:身份、分析和报告漏洞,例如身份验证弱点、配置错误和协议关系漏洞。 1. “进行一系列有条不紊且可重复的测试”是测试网络服务器是否能够解决所有不同应用程序漏洞的最佳方法。 2.“收集尽可能多的信息”关于…

AtCoder Beginner Contest 336 G. 16 Integers(图计数 欧拉路径转欧拉回路 矩阵树定理 best定理)

题目 给16个非负整数,x[i∈(0,1)][j∈(0,1)][k∈(0,1)][l∈(0,1)] 求长为n3的01串的方案数,满足长度为4的ijkl(2*2*2*2,16种情况)串恰为x[i][j][k][l]个 答案对998244353取模 思路来源 https://www.cnblogs.com/tz…

多线程并发与并行

📑前言 本文主要是【并发与并行】——并发与并行的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&…

03 顺序表

目录 线性表顺序表练习 线性表(Linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串。。。 线性表在逻辑上时线性结构,是连续的一条直线。但在物理结…

【PostgreSQL内核学习(二十一)—— 执行器(InitPlan)】

执行器(InitPlan) 概述InitPlan 函数代码段解释ExecInitNode 函数 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明…

力扣每日一练(24-1-16)

我一开始想到的是,如果数字相同则加一。 然而,对了一点点,而已。 高手的方法不是普通人在几分钟内能想得出来的,hh 继续补充: 如果数字不同则减一,如果计数到达了0,则更新数字,最…

【极光系列】springboot集成redis

【极光系列】springboot集成redis tips:主要用于快速搭建环境以及部署项目入门 gitee地址 直接下载源码可用 https://gitee.com/shawsongyue/aurora.git模块:aurora_rediswindow安装redis安装步骤 1.下载资源包 直接下载解压:https://pa…

PHP项目如何自动化测试

开发和测试 测试和开发具有同等重要的作用 从一开始,测试和开发就是相向而行的。测试是开发团队的一支独立的、重要的支柱力量。 测试要具备独立性 独立分析业务需求,独立配置测试环境,独立编写测试脚本,独立开发测试工具。没有…

华硕原厂系统天选5Pro原厂Win11系统恢复安装过程方法

华硕原厂系统天选5Pro原厂Win11系统恢复安装过程方法 华硕原厂系统枪神8/枪神8plus原厂Win11系统恢复安装过程方法 还是老规矩,分3种安装方法 远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f 支持型号&#x…

new Handler(getMainLooper())与new Handler()的区别

Handler 在Android中是一种消息处理机制。 new Handler(); 创建handler对象,常用在已经初始化了 Looper 的线程中调用这个构造函数(即非主线程),如果感觉不好理解,可以把Handler handler new Handler() 理解为常用在…

Vue3中使用自定义指令

一,自定义指令: 应用场景:禁用按钮多次点击 1.vue2 a. src/libs/preventClick.js import Vue from vue const preventClick Vue.directive(preventClick, {inserted: function (el, binding) {el.addEventListener(click, () > {if (!el…

MySQL多表查询(改进版)

1.创建student和score表 mysql> CREATE TABLE student (-> id INT(10) NOT NULL UNIQUE PRIMARY KEY ,-> name VARCHAR(20) NOT NULL ,-> sex VARCHAR(4) ,-> birth YEAR,-> department VARCHAR(20) ,-> address VARCHAR(50)-> ); Query O…

C#用double.TryParse(String, Double)方法将字符串类型数字转换为数值类型

目录 一、定义 二、实例 命名空间: System 程序集: System.Runtime.dll 一、定义 将数字的字符串表示形式转换为它的等效双精度浮点数。 一个指示转换是否成功的返回值。 public static bool TryParse (string? s, out double result…

Rust-所有权和移动语义

什么是所有权 拿C语言的代码来打个比方。我们可能会在堆上创建一个对象,然后使用一个指针来管理这个对象: Foo *p make_object("args");接下来,我们可能需要使用这个对象: use_object(p);然而,这段代码之…

初识OpenCV

首先你得保证你的虚拟机Ubuntu能上网 可看 http://t.csdnimg.cn/bZs6c 打开终端输入 sudo apt-get install libopencv-dev 回车 输入密码 回车 遇到Y/N 回车 OpenCV在线文档 opencv 文档链接 点zip可以下载,点前面的直接在线浏览,但是很慢 https…

AI嵌入式K210项目(3)-GPIO控制

文章目录 前言一、背景知识二、背景知识二、开始你的表演代码实现 总结 前言 前面介绍了开发板和环境搭建的基本情况,接下来我们开始学习使用C进行裸板开发,本节课先来学习下K210最基础的功能,引脚映射和点灯。 在开始具体学习之前&#xff…

跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置、窗口事件

引入GLFW: 在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36…

多云架构下的点击流数据分析

在出海的大趋势下,需要对点击流数据进行分析,以便更快的确定客户。作为多家云厂商的合作伙伴,九河云将提供点击流数据分析的改良方案。 对于这个需求可以借助aws的受众细分和定位解决方案,您可以应用基于云的分析和机器学习来减少…

Seaborn——可视化的具体API应用

一、Seaborn概述 Seaborn 是基于 matplotlib的图形可视化 python包。提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。 Seaborn在 matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seab…