SQL UNIQUE 唯一约束
时间:2018-11-15 17:49:20 来源:igfitidea点击:
在本教程中,我们将学习SQL的唯一约束以及如何确保指定的列中没有重复的值。
SQL唯一约束简介
唯一约束用于确保指定的列(不是主键列)中没有重复的值。
一个表只能有一个主键约束,但是可以有多个唯一约束。
与主键约束不同,可以为具有唯一约束的列输入空值NULL。但是,只允许一个空值NULL。
创建SQL唯一约束
可以使用CREATE TABLE或ALTER TABLE语句在表的一列或多列上创建唯一约束。
在表中的1列上创建SQL唯一约束
考虑以下用户表user:
它有一个userid列作为主键,唯一地定义表中的每一行。但是,用户名必须是唯一的,以便系统能够在两个用户登录时进行区分。要强制用户名的唯一性,可以额外创建一个唯一约束,如下所示:
CREATE TABLE users ( userid int(11) NOT NULL AUTO_INCREMENT, username varchar(25) DEFAULT NULL, password varchar(25) DEFAULT NULL, firstname varchar(45) NOT NULL, lastname varchar(45) NOT NULL, created date DEFAULT NULL, email varchar(255) DEFAULT NULL, PRIMARY KEY (userid), UNIQUE(username) )
如果您尝试输入用户名重复的一行,数据库系统将发出错误消息。
在表中的2列上创建SQL唯一约束
用户的电子邮件也必须是唯一的,以便当系统发出任何通知时,相应的用户将收到它。
同时还可以防止一个具有相同电子邮件地址的用户在系统中创建多个帐户。
您可以添加一个唯一的约束来强制执行此操作。
为了方便,SQL允许您为多个列定义一个唯一的约束,
要定义多个列上的唯一约束,我们将用逗号分隔的字段列表放在UNIQUE关键字后面的括号内。
如下所示:
CREATE TABLE users ( userid int(11) NOT NULL AUTO_INCREMENT, username varchar(25) DEFAULT NULL, password varchar(25) DEFAULT NULL, firstname varchar(45) NOT NULL, lastname varchar(45) NOT NULL, created date DEFAULT NULL, email varchar(255) DEFAULT NULL, PRIMARY KEY (userid), CONSTRAINT user_info UNIQUE(username,email) )
这将确保用户名和电子邮件值对在用户表中是唯一的。
注意,我们使用CONSTRAINT关键字为惟一约束进行命名。如果需要,我们可以使用这个名称来删除唯一约束。
使用SQL ALTER TABLE语句添加SQL唯一约束
还可以使用ALTER table语句向现有表添加唯一约束。
例如,下面的语句为用户名和电子邮件这两列添加了惟一约束。
ALTER TABLE users ADD CONSTRAINT user_info UNIQUE (username, email)
删除SQL唯一约束
要删除现有的唯一约束,您还可以使用如下的ALTER TABLE语句:
ALTER TABLE table_name DROP CONSTRAINT constraint_name
例如,要删除我们在上面例子中创建的user_info唯一约束,我们可以使用以下命令:
ALTER TABLE users DROP CONSTRAINT user_info