在 SQL 中,约束是规定表中的数据规则。若存在违反约束的行为,行为就会被阻止。它能帮助管理员更好地管理数据库,并且确保数据库中数据的正确性和有效性。例如在后台的数据库设计中对要输入的数据进行核查或判断,再决定是否写入数据库,这都是约束的应用。
NOT NULL 约束强制列不接受 NULL 值,强制字段始终包含值,这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。
先通过一个例子感受一下 NOT NULL 的作用
下面的 SQL 强制 ID
列、 LastName
列以及 FirstName
列不接受 NULL 值:
CREATE TABLE `Persons` ( `ID` int NOT NULL, `LastName` varchar(255) NOT NULL, `FirstName` varchar(255) NOT NULL, `Age` int );
示例代码
在一个已创建的表的 Age
字段中添加 NOT NULL 约束如下所示:
ALTER TABLE `Persons` MODIFY `Age` int NOT NULL;
在一个已创建的表的 Age
字段中删除 NOT NULL 约束如下所示:
ALTER TABLE `Persons` MODIFY `Age` int NULL;
注意
不要把 NULL 值与空串相混淆。NULL 值是没有值,
它不是空串。如果指定' '(两个单引号,其间没有字符),这
在 NOT NULL 列中是允许的。空串是一个有效的值,它不是无
值。NULL 值用关键字 NULL 而不是空串指定。
在前面的学习中我们知道了 NOT NULL 约束是强制列不接受 NULL 值,在有些情况下,我们不希望一个表中出现重复的记录,这时候我们需要用到 UNIQUE 约束来解决这些问题。下面我们来介绍一下。
下面的 SQL 在 Persons
表创建时在 P_Id
列上创建 UNIQUE 约束:
MySQL
CREATE TABLE `Persons` ( `P_Id` int NOT NULL, `LastName` varchar(255) NOT NULL, `FirstName` varchar(255), `Address` varchar(255), `City` varchar(255), UNIQUE (`P_Id`) )
SQL Server / Oracle / MS Access
CREATE TABLE `Persons` ( `P_Id` int NOT NULL UNIQUE, `LastName` varchar(255) NOT NULL, `FirstName` varchar(255), `Address` varchar(255), `City` varchar(255) )
命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:
MySQL / SQL Server / Oracle / MS Access
CREATE TABLE `Persons` ( `P_Id` int NOT NULL, `LastName` varchar(255) NOT NULL, `FirstName` varchar(255), `Address` varchar(255), `City` varchar(255), CONSTRAINT uc_PersonID UNIQUE (`P_Id`,`LastName`) )
当表已被创建时,在 P_Id
列创建 UNIQUE 约束:
MySQL / SQL Server / Oracle / MS Access
ALTER TABLE `Persons` ADD UNIQUE(`P_Id`)
当表已被创建时,需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:
MySQL / SQL Server / Oracle / MS Access
ALTER TABLE `Persons` ADD CONSTRAINT uc_PersonID UNIQUE (`P_Id`,`LastName`)
如需撤销 UNIQUE 约束 :
MySQL
ALTER TABLE `Persons` DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access
ALTER TABLE `Persons` DROP CONSTRAINT uc_PersonID
在前面的学习中我们学会了 NOT NULL 约束和
UNIQUE 约束的使用,今天带大家来认识主键约束,也叫 PRIMARY KEY 约束。
PRIMARY KEY 约束唯一标识数据库表中的每条记录 ,简单的说,PRIMARY KEY = UNIQUE + NOT NULL ,从技术的角度来看,PRIMARY KEY 和 UNIQUE 有很多相似之处。但还是有以下区别:
如:
表一:用户
id
(主键),用户名表二: 银行卡号
id
(主键),用户id
(外键)则表一为主表,表二为从表。