| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> SQL的约束(下) -> 正文阅读 |
|
[大数据]SQL的约束(下) |
SQL的约束(下): 数据库表: ?er图: ? D. SQL Server唯一约束 SQL Server UNIQUE约束简介: SQL Server UNIQUE 约束用于确保存储在列或列组中的数据在表中的行中是唯一的。 以下语句创建一个表: hr.persons ,其 email 邮件列中的数据在表的行中是唯一的: 在此语法中,将 UNIQUE 约束定义为列约束。 还可以将 UNIQUE 约束定义为表约束: ? SQL Server自动创建 UNIQUE 索引以强制存储在参与 UNIQUE 约束的列中的数据的唯一性。 因此,如果尝试插入重复行,SQL Server将拒绝更改并返回一条错误消息,提示说已违反 UNIQUE 约 束。 以下语句在 hr.persons 表中插入一个新行: 上面语句按预期工作。 由于 email 具有 UNIQUE 约束,同一表中 email 列的值不能相同,所以下面插入 语句会失败: ? SQL Server发出类似下面错误消息: ? 如果没有为 UNIQUE 约束指定名称,SQL Server将自动为其生成名称。 在此示例中,自动生成的约束名称为: UQ__persons__XAXCDXXXXXE8240E4E ,是不是有点不太可读? 要为 UNIQUE 约束指定特定名称,请使用 CONSTRAINT 关键字,如下所示:? ? 上面语句中,指定了 UNIQUE 约束名称为: unique_email 。 为 UNIQUE 约束指定名称的好处是:
UNIQUE约束与PRIMARY KEY约束 : 尽管 UNIQUE 和 PRIMARY KEY 约束都强制数据的唯一性,但是当要强制实现不是主键列的列或列组的唯一性时,应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。 与 PRIMARY KEY 约束不同, UNIQUE 约束允许 NULL 值。 此外, UNIQUE 约束将 NULL 视为常规值,因 此,它只允许每列一个 NULL 。 以下语句插入一行,其 email 列中的值为 NULL : ? 现在,如果尝试在 email 列中再插入一个 NULL ,则会收到错误消息: ? 执行上面插入语句,将会提示以下错误: ? 具有多列的UNIQUE约束 : 要为一组列定义 UNIQUE 约束,可以将其写为表约束,列名以逗号分隔,如下所示: ? 以下示例创建一个 UNIQUE 约束,此约束包含两列:person_id 和 skill_id :? ? 将UNIQUE约束添加到列 : 将 UNIQUE 约束添加到表中的现有列或一组列时,SQL Server首先检查这些列中的现有数据,以确保所 有值都是唯一的。 如果SQL Server找到重复值,则它将返回错误,并且不会执行添加 UNIQUE 约束。 以下显示了向表中添加 UNIQUE 约束的语法: ? 假设有以下 hr.persons 表: ? 以下语句向 email 列添加 UNIQUE 约束: ? 类似地,以下语句将向 phone 列添加 UNIQUE 约束: ? 删除UNIQUE约束 : 要删除 UNIQUE 约束,请使用 ALTER TABLE DROP CONSTRAINT 语句,如下所示: ? 以下语句用于从 hr.person 表中删除名称为: unique_phone 的约束:?? ? 修改UNIQUE约束: SQL Server没有任何直接语句来修改 UNIQUE 约束,因此,如果要更改约束,则需要先删除约束并重新 创建约束。 SQL UNIQUE 约束SQL UNIQUE 约束UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 SQL UNIQUE Constraint on CREATE TABLE下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束: MySQL:
SQL Server / Oracle / MS Access:
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access:
SQL UNIQUE Constraint on ALTER TABLE当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL: MySQL / SQL Server / Oracle / MS Access:
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Persons 撤销 UNIQUE 约束如需撤销 UNIQUE 约束,请使用下面的 SQL: MySQL:
SQL Server / Oracle / MS Access:ALTER TABLE Persons E. SQL Server检查约束 SQL Server CHECK约束简介: CHECK约束用于指定必须满足布尔表达式的列中的值。 例如,要求价格必须为正数值,可以使用: ? 如上所见, CHECK 约束定义位于数据类型之后。 它由 CHECK 关键字和括号中的逻辑表达式组成: ? 还可以使用 CONSTRAINT 关键字为约束分配单独的名称,如下所示: ? 显式名称有助于对错误消息进行分类,并允许在要修改它们时引用约束。 如果未以这种方式指定约束名称,SQL Server会自动生成名称(随机字符)。 请参阅以下插入语句: ? SQL Server发出以下错误: ? 发生错误的原因是单价不大于 CHECK 约束中指定的 0 值。 以下语句可以正常工作,因为 CHECK 约束中定义的逻辑表达式的计算结果为 TRUE :? ? SQL Server CHECK约束和NULL: CHECK 约束拒绝导致布尔表达式求值为 FALSE 的值。 因为 NULL 计算为 UNKNOWN ,所以可以在表达式中使用它来绕过约束。 例如,可以插入单价为 NULL 的产品,如以下查询中所示: ? 上面语句能够成功地执行。 SQL Server将 NULL 插入 unit_price 列,但未返回错误。 要解决此问题,需要对 unit_price 列使用 NOT NULL 约束。 检查引用多列的约束: CHECK 约束可以引用多个列。 例如,在 test.products 表中存储常规和折扣价格,并且希望确保折扣价格始终低于常规价格: ? unit_price 和 discounted_price 的前两个约束看起来应该很熟悉。 第三个约束使用未附加到特定列的新语法。它在逗号分隔列列表中显示为单独的行项目。 前两列约束是列约束,而第三列约束是表约束。 注意,可以将列约束写为表约束。 但是,不能将表约束写为列约束。 例如,可以按如下方式重写上述语句: ? 又或者, ? 还可以使用与列约束相同的方式为表约束指定名称: ? 将CHECK约束添加到现有表: 要将 CHECK 约束添加到现有表,可使用 ALTER TABLE ADD CONSTRAINT 语句。 假设有以下一个名称 test.products 表: ? 要将 CHECK 约束添加到 test.products 表,请使用以下语句: ? 要添加带有 CHECK 约束的新列,请使用以下语句: ? 要添加名为 valid_price 的 CHECK 约束,请使用以下语句: ? 删除CHECK约束: 要删除 CHECK 约束,请使用 ALTER TABLE DROP CONSTRAINT 语句: ? 如果为 CHECK 约束指定了名称,则可以在语句中引用该名称。 但是,如果不确定有没有为 CHECK 约束指定名称,可使用以下语句查看: ? 例如: ? 此语句发出许多信息,包括约束名称: ? 以下语句删除 positive_price 约束: ? 禁用CHECK约束: 要禁用插入或更新的 CHECK 约束,请使用以下语句: ? 以下语句禁用 valid_price 约束: ? SQL CHECK 约束SQL CHECK 约束CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。 SQL CHECK Constraint on CREATE TABLE下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。 My SQL:
SQL Server / Oracle / MS Access:
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access:CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), SQL CHECK Constraint on ALTER TABLE如果在表已存在的情况下为 "Id_P" 列创建 CHECK 约束,请使用下面的 SQL: MySQL / SQL Server / Oracle / MS Access:
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access:
撤销 CHECK 约束如需撤销 CHECK 约束,请使用下面的 SQL: SQL Server / Oracle / MS Access:
MySQL:ALTER TABLE Persons 以上就是我最近整理的新的知识内容,现在分享给你们,希望可以帮助到你们。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 | -2025/5/1 14:59:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |