UNIQUE

简介: 【11月更文挑战第14天】

SQL UNIQUE 约束详解

UNIQUE 约束在 SQL 中用于确保某列或某几列的组合值在表中是唯一的。这意味着在应用了 UNIQUE 约束的列中,不能有两条记录具有相同的值,除非该值为 NULLUNIQUE 约束有助于维护数据的完整性,特别是在需要确保某些标识符(如电子邮件地址、电话号码等)在整个表中唯一的情况下。

特点和使用场景

  • 允许 NULL 值:与 PRIMARY KEY 不同,UNIQUE 约束允许列中有 NULL 值,并且可以有多个 NULL 值。
  • 多列唯一性:可以在多个列上设置 UNIQUE 约束,这样只有当这些列的组合值唯一时,才能插入新记录。
  • 多个 UNIQUE 约束:一个表可以有多个 UNIQUE 约束,但只能有一个 PRIMARY KEY 约束。

SQL UNIQUE 约束语法

在创建表时,可以为特定列或多个列定义 UNIQUE 约束:

CREATE TABLE table_name
(
    column1 data_type UNIQUE,
    column2 data_type UNIQUE,
    ...
);

或者,为多个列定义一个 UNIQUE 约束:

CREATE TABLE table_name
(
    column1 data_type,
    column2 data_type,
    UNIQUE (column1, column2)
    ...
);

代码示例

假设我们正在创建一个名为 Persons 的表,其中包含人的 ID、姓氏、名字和电子邮件地址。我们希望确保 P_Id(假设为电子邮件地址)在整个表中是唯一的。

CREATE TABLE Persons (
    P_Id varchar(255) UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

在这个例子中:

  • P_Id 列被定义为 UNIQUE,这意味着在插入或更新 Persons 表的记录时,P_Id 的值必须是唯一的,不能有两条记录具有相同的 P_Id 值。
  • 如果尝试插入具有已存在的 P_Id 值的新记录,数据库系统将返回错误。

在多列上应用 UNIQUE 约束

如果我们需要确保 LastNameFirstName 的组合是唯一的,可以这样定义:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int,
    UNIQUE (LastName, FirstName)
);

在这个例子中,LastNameFirstName 的组合值必须是唯一的。如果尝试插入具有相同姓氏和名字的另一条记录,数据库系统将返回错误。

目录
相关文章
|
4月前
|
存储 安全 C++
C++ 11新特性之unique_ptr
C++ 11新特性之unique_ptr
113 4
|
8月前
|
C++
C++智能指针unique_ptr
C++智能指针unique_ptr
41 0
C++11 unique_ptr智能指针
C++11 unique_ptr智能指针
39 0
|
关系型数据库 MySQL 索引
不会2023年你还不知道Mysql中index、primary key、unique key、foreign key是什么和如何创建吧?
不会2023年你还不知道Mysql中index、primary key、unique key、foreign key是什么和如何创建吧?
112 0
|
数据库
Incorrect table definition; there can be only one auto column and it must be defined as a key
Incorrect table definition; there can be only one auto column and it must be defined as a key
188 0
Incorrect table definition; there can be only one auto column and it must be defined as a key
|
8月前
|
关系型数据库 分布式数据库 PolarDB
InnoDB unique check 的问题
unique secondary index 是客户经常使用的场景,用来保证index 上的record 的唯一性。但是大量的客户在使用unique secondary index以后,会发现偶尔会有死锁或者不应该锁等待的时候,却发生锁等待的情况。也有很多客户来问我们这个问题。理论上PolarDB ...
125 0
InnoDB unique check 的问题
|
存储 程序员 编译器
std::unique_ptr 删除器的秘密
### TL;DR - 使用无状态的函数对象作为 std::unique_ptr 的删除器不会占用额外的内存空间;而使用函数指针或有状态的函数对象则会增加 std::unique_ptr 对象的大小,其中 std::function 的内存开销最大,应尽量避免使用。 - MSVC 使用 compressed pair 来存储 std::unique_ptr 的原始指针和删除器,利用 Empty
1158 0
|
C++ 容器
STL中的unique和unique_copy函数
一、unique函数 这个函数的功能就是删除相邻的重复元素,然后重新排列输入范围内的元素,并返回一个最后一个无重复值的迭代器(并不改变容器长度)。 例如: 1 vectorq(10); 2 for(int i = 0; i < 10; i++){ 3 ...
1254 0
1041 Be Unique (20)
#include #include #include #include #include using namespace std; int main() { int n; cin >> n; ...
767 0
|
测试技术 索引 关系型数据库
[20171211]UNIQUE LOCAL(Partitioned)Index
[20171211]UNIQUE LOCAL (Partitioned) Index.txt --//如何在分区表中建立local unique index呢?自己对分区表这部分内容了解很少,参考链接: --//https://hemantoracledba.
1154 0