约束意味着什么?

时间:2014-08-01 20:59:36

标签: sql-server

我是SQL新手,我正在尝试创建一个带约束的表,但我之前没有使用过constrant,我实际上并不确定这个约束对于PId,LastName的uc_ID是什么?

我想创建一个只允许列中字母数字值的约束?

代码:

CREATE TABLE Persons
 (
 PId   int   identity(1,1)       NOT NULL,
 LastName           varchar(25)  NOT NULL,
 FirstName          varchar(25)  NOT NULL,
 Address1           varchar(25)  NOT NULL,
 City               varchar(25) NOT NULL
 CONSTRAINT uc_ID UNIQUE (PId,LastName)
 )

CREATE TABLE E
 (
 PId            int identity(1,1) NOT NULL,
 LastName           varchar (25)  NOT NULL,
 FirstName          varchar (25)  NOT NULL,
 Address1           varchar (25)  NOT NULL,
 City               varchar (25)  NOT NULL
 CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9]%')
 )

另一个例子(不是):

CREATE TABLE EEE
 (
 PId            int identity(1,1) NOT NULL,
 FirstName          varchar (50)  NOT NULL,
 CONSTRAINT CHECK ([FirstName]    LIKE '%[A-Za-z]%')
 )

3 个答案:

答案 0 :(得分:1)

表示Pid + LastName的组合必须是唯一的 由于Pid是一种身份,在正常情况下它不能被复制,所以约束似乎有所减少。

答案 1 :(得分:1)

尝试:

ALTER TABLE TableName ADD CONSTRAINT Only_Characters_And_Numbers CHECK ColumnName NOT LIKE '%[^A-Z0-9 ]%'

答案 2 :(得分:0)

如果您想要一个只允许列中包含字母数字字符的约束,您可以使用此约束(例如FirstName

ALTER TABLE [Persons] ADD CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9 ]%')

免责声明:taken from here(已测试)。

如果要在创建表时添加约束:

CREATE TABLE Persons
 (
 PId   int   identity(1,1)       NOT NULL,
 LastName           varchar(25)  NOT NULL,
 FirstName          varchar(25)  NOT NULL,
 Address1           varchar(25)  NOT NULL,
 City               varchar(25) NOT NULL
 CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9 ]%')
 )

请注意,每个数据库的约束名称都是唯一的。

或者,您可以创建AFTER INSERTAFTER UPDATE触发器来进行此验证,但在这种情况下,约束可以正常工作。