SQL约束的简介
基本介绍
约束(Constraint):
约束是SQLServer提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。
SQL Server中的 5 种约束:
主键约束(primary key)
外键约束(foreign key)
唯一约束(unique)
检查约束(check)
缺省确属(default)
新建数据表:
create table 表名(字段名,字段类型,[not null] [primary key] [unique] [check(...)] [default(...)])
新建完整性:
create table TempTabal
(
tempID int identity(1,1) primary key, --主键约束,自增长
tempName nvarchar(50) not null, --非空约束
tempGender char not null default('M') check(tempGender in ('F','M')) ,--默认值,Check约束
tempDate datetime not null default(getdate()), --默认得到系统时间
tempRange int not null check(tempRange>0 and tempRange<10),--范围check约束
tempFile nchar(10) not null check(tempFile like '%.mp3'), --添加约束,模糊匹配.mp3
tempUnique int unique,--唯一约束
tempGuid uniqueidentifier not null default(newid()) --使用newid()函数,随机获取列值
)
--添加外键约束
alter table 从表名 --[with check] --启用约束,[with no check]--禁用约束
add constraint 约束名
foreign key(从表中字段) references 主表名(主表中字段)
--删除约束
alter table 从表名
drop constraint 约束名
--添加约束
alter table 表名
add constraint 约束名
primary key(主键字段)
--删除约束
alter table 从表名
drop constraint 约束名
--添加一列
alter table 表名 add 字段名 字段类型 相关约束
详细使用
1。唯一性和主键约束。
要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。
创建约束
CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL PRIMARY KEY,
)
CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL CONSTRAINT PK_ID PRIMARY KEY,
)
CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL,
COL2 VARCHAR2(32) NOT NULL Foreign Key,
CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2)
)
修改约束
ALTER TABLE Table_Name
ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【这里表明了是聚集还是非聚集主键索引】
如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:
CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE)
2。外键约束。
剩下的约束写法都是差不多,这里就不多举例了。
CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE,
)
CREATE TABLE TABLE_NAME
(
COL1 VARCHAR2(32) NOT NULL,
CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL
)
这里需要注意的是ON 后面的内容。这个是关联的关键。与删除修改密切相关。
- NO ACTION:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。
- CASCADE: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。
- SET NULL:当父表数据被更新或删除时,子表中的相应数据被设置成NULL值,前提是子表中的相应列允许NULL值。
- SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。
3。检查约束。
检查列的类型和范围。语法:CONSTRAINT [constraint_name] CHECK (condition); 比如:check(Age >2)
4。空值约束、5。默认约束
还有两种方式,一种是默认值(default sysdate或者 default 1),
一种是限制空值Not Null【NOT NULL只能在列级定义】,
这也可以看成是约束,它的作用也是进行数据的完整性控制。
修改默认约束:
ALTER TABLE TABLENAME
ADD CONSTRAINT DF_TABLENAME_COL1 DEFAUIT('22') FOR COL1
修改空值约束
修改NOT NULL是四个约束当中最特殊的,直接用Modify Col_Name NOT NULL 即可
删除、禁用、启用约束、修改约束名
ALTER TABLE table_name
DROP CONSTRAINT constraint_name(删除约束)
DISABLE CONSTRAINT constraint_name;(启用约束)
ENABLE CONSTRAINT constraint_name;(禁用约束)ALTER TABLE table_name
RENAME CONSTRAINT old_constraint_name TO new_constraint_name(修改约束名)
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【禁用所有外键约束】
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【启用所有外键约束】
select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R';【删除所有外键约束 】
所有约束信息:SELECT * FROM user_constraints