zoukankan      html  css  js  c++  java
  • 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)

    分区索引失效情况【数据发生移动导致索引失效】
    
    
    好的代码就和美食一样,都是需要时间烹饪出来的!
  • 相关阅读:
    2019nc#7
    ABC133F
    2019DX#6
    2019DX#5
    2019dx#4
    解决一般图最大匹配——带花树算法
    2019nc#4
    B-generator 1_2019牛客暑期多校训练营(第五场)
    hdu-6638 Snowy Smile
    hdu-6621 K-th Closest Distance
  • 原文地址:https://www.cnblogs.com/slmdr9/p/5329524.html
Copyright © 2011-2022 走看看