SQL键值约束、索引使用

 1 添加約束的方式:    [exec sp_helpconstraint 表名]->可用于查找到表创建的约束
 2 CREATE TABLE stuInfo
 3 (
 4 stuName VARCHAR(20) NOT NULL,非空約束
 5 stuNo CHAR(6), Primary key(stuNo), 主鍵約束
 6 stuAge INT NOT NULL check(stuAge between 15 and 40),檢查約束
 7 stuID NUMERIC(18,0),unique(stuID),唯一約束
 8 
 9 CREATE TABLE stuMarks
10 (
11 stuNo CHAR(6) NOT NULL,
12 foreign key(stuNo) references stuInfo(stuNo)外鍵約束
13 )
14 
15 
16 另外一種方法:
17 ALTER TABLE stuInfo
18 ADD CONSTRAINT PK_stuNo PRIMARY KEY(stuNo)添加主鍵約束
19 
20 ALTER TABLE stuInfo
21 ADD CONSTRAINT UQ_stuID UNIQUE(stuID)添加唯一約束
22 
23 添加多个字段的唯一约束:
24 ALTER TABLE stuInfo
25 ADD CONSTRAINT UQ_stuID UNIQUE(字段1,字段2…)添加唯一約束
26 
27 DEFAULT约束用于向列中插入默认值,如果没有规定其它的值,那么会将默认值添加到所有的新纪录(如果该列存在唯一约束
当添加重复列信息时,则可能不填充默认值):
28 ALTER TABLE stuInfo 29 ADD CONSTRAINT DF_stuAddress DEFAULT (‘地址不詳’) FOR添加默認約束 30 stuAddress 31 32 ALTER TABLE stuInfo 33 ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)添加檢查約束 34 35 ALTER TABLE stuMarks 36 ADD CONSTRAINT FK_stuNo 37 FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)添加外鍵約束
 1 SQL Server也可以禁用约束检查
 2 语句为
 3 Alter table 表名 nocheck constraint 约束名
 4 或者可以禁用表的所有约束
 5 Alter table 表名 nocheck constraint all
 6 对于禁用整个数据库的约束貌似没有什么直接的方法,变通的方法是用语句拼接出禁用约束的语句,然后执行
 7 拼接语句为
 8 SELECT 'alter table ['+OBJECT_SCHEMA_NAME(object_id)+'].['+OBJECT_NAME(object_id)+'] NOCHECK CONSTRAINT all'  FROM sys.tables WHERE is_ms_shipped=0;
 9 启用约束检查的方法
10 Alter table 表名 Check constraint 约束名
11 Alter table 表名 Check constraint all  (启用表的所有约束)
Alter table 表名 disable constraint 约束名
 1 外鍵約束的具體使用:
 2 RESTRICT | CASCADE | SET NULL | NO ACTION  外键的使用需要满足下列的条件:
 3   1. 两张表必须都是InnoDB表,并且它们没有临时表。
 4   2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
 5   3. 建立外键关系的对应列必须建立了索引。
 6   4. 假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。
 7   如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:
 8   1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
 9   2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。
10   3. NO ACTION: InnoDB拒绝删除或者更新父表。
11   4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。
12   5. SET DEFAULT: InnoDB目前不支持。
13   外键约束使用最多的两种情况无外乎:
14   1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;
15   2)父表更新时子表也更新,父表删除时子表匹配的项也删除。
16   前一种情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE RESTRICT;后一种情况,可以使用ON UPDATE CASCADE ON DELETE CASCADE
1 创建唯一索引:(当添加唯一约束也可创建出唯一索引)
2 Create UNIQUE INDEX idxWorkerNo ON T_Employee_Live_Detail(WorkerNo)
3 创建不唯一非聚集索引:Create NONCLUSTERED INDEX [索引名] ON 表名(列名)
4 创建聚簇索引:
5 CREATE  CLUSTERED  INDEX  mycolumn_cindex  ON  mytable(mycolumn)
6 WITH  ALLOW_DUP_ROW
7 创建唯一非聚集索引:Create Table [表名] ADD CONSTRAINT [索引名] UNIQUE NONCLUSTERED(列名)
8 唯一聚簇索引:
9 CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

分区索引失效情况【数据发生移动导致索引失效】

 

posted @ 2016-03-28 16:29  温故余学  阅读(864)  评论(0编辑  收藏  举报