SQL的五大约束作用、语法、应用场景及举例

SQL的五大约束包括主键约束(PRIMARY KEY)、唯一性约束(UNIQUE)、外键约束(FOREIGN KEY)、非空约束(NOT NULL)和默认约束(DEFAULT)
sql约束的作用:主要是保证数据的完整性、准确性和一致性,从而确保数据库中存储的数据质量

温馨提示:以下举例为mysql版本,若您是oracle或其他数据库,语法会有差异!!!

  1. 主键约束(PRIMARY KEY):确保某列必须要有唯一的标识符。
    应用场景:用于唯一标识数据库表中的每条记录。
    注意点:一个表中只能有一个主键,主键列的值必须是唯一的,不能为空。
    举例
CREATE TABLE Employees (  EmployeeID int NOT NULL,  FirstName varchar(50),  LastName varchar(50),  BirthDate date,  PRIMARY KEY (EmployeeID)  
);

在上述示例中,EmployeeID被定义为主键,确保每个员工都有一个唯一的标识符。
当表被创建后,可以使用ALTER TABLE语句来添加或删除约束

--添加
ALTER TABLE 表名   ADD PRIMARY KEY (列名);
--例子:将"user_info"表的"UserID"列设置为主键
ALTER TABLE user_info ADD PRIMARY KEY (UserID);
--删除
ALTER TABLE 表名  DROP  PRIMARY KEY ;
--例子:删除用户表的主键
ALTER TABLE user_info DROP PRIMARY KEY ;
  1. 唯一性约束(UNIQUE):唯一性约束确保在非主键列中不输入重复的值。
    应用场景:用于防止在列中输入重复的值。
    注意点:唯一性约束允许空值,但当和参与唯一性约束的任何值一起使用时,每列只允许一个空值。
    举例
    CREATE TABLE Users (  UserID int NOT NULL,  Username varchar(50) NOT NULL,  Email varchar(100),  UNIQUE (Username),  UNIQUE (Email)  
    );
    
    在上述示例中,UsernameEmail字段都被定义为唯一约束,确保用户名和电子邮件地址都是唯一的。
    当表被创建后,可以使用ALTER TABLE语句来添加或删除约束
--添加唯一约束
ALTER TABLE 表名 ADD UNIQUE (列名);
-- 例子
ALTER TABLE user_info ADD UNIQUE (USERID);
-- 删除唯一约束
ALTER TABLE 表名 DROP  KEY 字段名;
-- 例子
ALTER TABLE user_info DROP KEY USERID;
  1. 外键约束(FOREIGN KEY):外键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。
    应用场景:用于保证数据库表之间的关系,确保数据表中的数据符合某种引用完整性。
    注意点:外键列的值必须在被参照表的相应列中有对应的数据。

    CREATE TABLE Orders (  OrderID int NOT NULL,  OrderNumber int NOT NULL,  CustomerID int,  PRIMARY KEY (OrderID),  FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)  
    );
    

    Orders表中的CustomerID字段是一个外键,它引用另一个表Customers中的CustomerID字段,确保订单与客户的关联关系。
    当表被创建后,可以使用ALTER TABLE语句来添加或删除约束

--添加外键
ALTER TABLE 表名  ADD FOREIGN KEY 约束名(列名) REFERENCES 另一个表名 (列名);
-- 例子
ALTER TABLE user_role ADD FOREIGN KEY user_role_userid (userid) REFERENCES user_info (userid);
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;
-- 例子
ALTER TABLE user_role DROP FOREIGN key user_role_userid ;
  1. 非空约束(NOT NULL):设置非空约束,该字段不能为空。
    应用场景:用于确保某列必须有值,不能为NULL。
    注意点:非空约束是一种强制性的约束,它要求列中的值必须被指定,不能为NULL。
CREATE TABLE ContactDetails (  ContactID int NOT NULL,  Name varchar(100) NOT NULL,  PhoneNumber varchar(20)
);

在上述示例中,Name字段被定义为非空约束,确保联系人的姓名不能为空。
当表被创建后,可以使用ALTER TABLE语句来添加或删除约束

--添加非空约束
ALTER TABLE 表名 MODIFY 列名 字段类型 NOT NULL;
-- 例子
ALTER TABLE user_info MODIFY userID varchar(64)  NOT NULL;
-- 删除非空约束
ALTER TABLE 表名 MODIFY 列名 字段类型 NULL;
-- 例子
ALTER TABLE user_info MODIFY userID varchar(64) NULL;
  1. 默认约束(DEFAULT):该数据的默认值。
    应用场景:为没有提供输入值的字段或列提供默认值。
    注意点:默认值必须满足列的数据类型的要求,如果未指定值则会自动使用默认值。

    CREATE TABLE Products (  ProductID int NOT NULL,  ProductName varchar(100),  Price decimal(10, 2),  DefaultStock int DEFAULT 0
    );
    

    在上述示例中,DefaultStock字段被定义为默认约束,其默认值为0。当插入新产品时,如果没有指定库存数量,则会默认给0。
    当表被创建后,可以使用ALTER TABLE语句来添加或删除约束

--添加DEFAULT约束
ALTER TABLE 表名 ALTER 字段名  SET DEFAULT 默认值;
-- 例子
ALTER TABLE user_info ALTER CITY  SET DEFAULT '北京';
-- 删除DEFAULT约束
ALTER TABLE 表名 ALTER 字段名 DROP DEFAULT;
-- 例子
ALTER TABLE user_info ALTER CITY DROP DEFAULT;

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

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

相关文章

《ORANGE’S:一个操作系统的实现》读书笔记(三十五)内存管理(三)

内存管理到目前为止实现了fork()、exit()和wait(),而我们的目标是实现一个可以执行命令的shell,可无论Init进程fork出多少进程,它也都只是Init而已。所以我们还需要一个系统调用,它就是exec(),这篇文章就来记录exec()的…

最长公共前缀(Leetcode14)

例题: 分析: 我们可以先定义两个变量 i , j, j表示数组中的每一个字符串, i 表示每个字符串中的第几个字符。一列一列地进行比较,先比较第一列的字符,若都相同,则 i ,继…

MySQL存储过程和触发器

存储过程和触发器是数据库中用于执行特定任务的两种重要的数据库对象。它们由SQL语句组成,被预先编译并存储在数据库中,可以通过调用来执行。以下是对存储过程和触发器的简要说明以及如何创建和使用它们: 存储过程(Stored Proced…

成功解决「MySQL问题1」启动mysql时:发生系统错误5拒绝访问

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) ✈️公众号 | 热爱技术的小郑 。文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G 教程资…

【数据结构】 顺序表的基本操作 (C语言版)

一、顺序表 1、顺序表的定义: 线性表的顺序存储结构,即将表中的结点按逻辑顺序依次存放在一组地址连续的存储单元里。这种存储方式使得在逻辑结构上相邻的数据元素在物理存储上也是相邻的,可以通过数据元素的物理存储位置来反映其逻辑关系。…

漫漫数学之旅009

文章目录 经典格言数学习题古今评注拓展学习(一)大数定理(二)伯努利级数 经典格言 真正的问题,不在于机器是否思考,而在于人们是否思考。——BF斯金纳(B. F. Skinner) BF斯金纳&…

ubuntu双屏扩展

nvidia 驱动安装 安装依赖 sudo apt-get update #更新软件列表 sudo apt-get install g gcc make build-essential libc6-dev禁用nouveau sudo vim /etc/modprobe.d/blacklist.conf #在最后添加如下两行:blacklist nouveauoptions nouveau modeset0 #然后更新…

MVC和MVVM区别和VUE关系

MVC(Model-View-Controller)和 MVVM(Model-View-ViewModel)是两种常见的前端架构模式,它们的主要区别在于处理业务逻辑和数据操作的方式。 MVC中,View(视图)可以直接访问Model&…

低代码+物联网: 重塑智慧社区,开启未来生活新纪元

在数字化时代的推动下,人们对于智能化生活的需求不断增长。而作为连接物理世界和数字世界的重要桥梁,物联网技术发挥着至关重要的作用。最近几年,低代码开发平台的兴起更是给物联网应用开发带来了革命性的改变。本文将探讨低代码和物联网的结…

2024首更---Web Service 教程

Web Services 简介 Web Services 可使您的应用程序成为 Web 应用程序。 Web Services 通过 Web 进行发布、查找和使用。 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTMLXML 如果您希望首先学习这些项目,请在…

2024年华数杯国际赛A题:放射性废水处理建模 思路模型代码解析

2024年华数杯国际赛A题:放射性废水处理建模(Radioactive Wastewater from Japan) 一、问题描述 2011年3月,日本东海岸发生了地震,引发了福岛第一核电站事故,导致三个核反应堆熔毁,并在一场巨大…

MySQL部署

1、卸载mariadb rpm -qi mariadb-libs yum remove mysql-libs -y 2、查看操作系统内核版本及硬件架构 uname -a 3、查看glibc版本 ldd --version 4、下载mysql压缩包 wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar 5、解压到/mnt目录…

[java基础揉碎]基本数据类型转换

介绍 当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型, 这个就是自动类型转换。 数据类型按精度(容量)大小排序为: 自动类型转换注意和细节 1.有多种类型的数据混合运算时,系统首先自动…

如何在浏览器上设置 VPN 网络虚拟专用网络

如何在DT浏览器上设置 VPN 网络 虚拟专用网络(VPN)是一种用公用网络架设专用网络的技术。如何在DT浏览器上设置 VPN 呢,先下载DT浏览器,建议在官方网站下载最新版,安装,在DT浏览器首页点更多,网…

Stable Diffusion中的Embeddings

什么是Embeddings? Embeddings是一种数学技术,它允许我们将复杂的数据(如文本或图像)转换为数值向量。这些向量是高维空间中的点,可以捕捉数据的关键特征和属性。在文本处理中,例如,embeddings可…

php基础学习之变量

php使用变量的必要性 PHP 是一种动态网站开发的脚本语言,动态语言特点是交互性,会有数据的传递,而 PHP作为“中间人”,需要进行数据的传递,传递的前提就是 PHP 能自己存储数据(临时存储) php变量的使用 定义&#xf…

linux系统nginx工具的访问控制

访问控制 nginx访问控制模块基于ip访问控制配置语法 基于用户的信任登录配置文件更改建立登录用户 nginx访问控制模块 基于IP的访问控制:http_access_module 基于用户的信任登录:http_auth_basic_module 两个同时只能开启一个 基于ip访问控制 配置语法 …

HTML以及CSS相关知识总结(一)

近日就开始回顾html和css相关知识啦,并且会学习html5和css3的新知识,以下是我对记忆不太深刻的地方以及新知识点的总结: Web标准: 结构:用于对网页元素进行整理和分类,即HTML 表现:用于设置网页…

使用 Node 创建 Web 服务器

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下: var http require(http); 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口)&#x…

「最大化最小值」或者「最小化最大值」采样二分

分割数组的最大值 给定一个非负整数数组 nums 和一个整数 k ,你需要将这个数组分成 k 个非空的连续子数组。 设计一个算法使得这 k 个子数组各自和的最大值最小 思路:段数分的越多,最大值就越小,从不分段开始找,l为M…