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)
分区索引失效情况【数据发生移动导致索引失效】
好的代码就和美食一样,都是需要时间烹饪出来的!