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


SQL键值约束、索引使用的更多相关文章

  1. 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

    原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...

  2. SQL Server外键关系是强制约束,外键值也可以是空(NULL)

    在SQL Server中,实际上外键值可不可以为空(NULL),和外键关系是不是强制约束无关. 我们先在SQL Server数据库中建立两张表People和Car,一个People可以有多个Car,所 ...

  3. 经典SQL语句大全_主外键_约束

    一.基础(建表.建约束.关系) 约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整 ...

  4. SQL 数据类型、约束、索引及视图

    一.数据类型:整数:int,bigint,smallint小数:float,real,decimal(长度,精度),numeric(长度,精度)字符:char(n),varchar(n) 8000英文 ...

  5. SQL Server 创建约束图解 唯一 主键

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创 ...

  6. 【转】SQL Server 创建约束图解 唯一 主键-界面操作

    SQL Server 创建约束图解 唯一 主键-界面操作 SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束, ...

  7. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  8. SQL入门经典(五) 之键和约束

    这一篇博客主要讲键的创建,约束的创建.修改对象和删除对象. 主键:主键是每行的唯一标识符,必须包含唯一值(因此不能为NULL).由于主键在关系中数据库的重要性,因此它是所有键和约束中最重要的.一个表最 ...

  9. SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息

    原文:SQL点滴4-筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息 项目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确.我们 ...

随机推荐

  1. hdu5072 Coprime (2014鞍山区域赛C题)(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...

  2. Emmet语法实例(帮助快速开发)

    写完命令后按键 tab 就可以生成了. 应用于大多数已经内置或可以安装emmet的编辑器下级元素命令 > <!--div>p--> <div> <p>& ...

  3. js实现上下滑动侧边栏

    给一个原先的电子商务网站做修改,客户说想将原先上下滑动侧边栏改的更加人性化,希望将原先匀速滑动的侧边栏改成变速运动的侧边栏,在到达目的地之前速度越变越慢. 原先一开始的时候,,这个图片是硬生生地到达可 ...

  4. [设计模式] javascript 之 组合模式

    组合模式说明 组合模式用于简单化,一致化对单组件和复合组件的使用:其实它就是一棵树: 这棵树有且只有一个根,访问入口,如果它不是一棵空树,那么由一个或几个树枝节点以及子叶节点组成,每个树枝节点还包含自 ...

  5. ThinkPHP 修改,删除数据,全部显示

    1,修改数据 //数据修改 function Update() { $model = D("info"); /* //1,数组方式 $attr = array( "Cod ...

  6. eclipse安装spring插件

    1.打开eclipse点击help,点击about eclipse 2.点击最左侧图票查看eclipse版本 3.查看版本 4.进入http://spring.io/tools/sts/all,选择适 ...

  7. ii7安装php

    http://www.jb51.net/article/22372.htm 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使 ...

  8. Error 0x800704cf

    重装了系统,改过网络配置,结果共享和打印机连不上,显示Error 0x800704cf 在本地连接的属性里将"Client for Microsoft Networks"勾选上就可 ...

  9. 高性能Java网络框架 MINA

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  10. Leonbao:MapKit学习笔记

    以下仅作了解, 实际使用以百度地图居多, 因为百度地图有动态路径规划等接口 MapKit学习笔记    原帖: http://www.cocoachina.com/bbs/read.php?tid-6 ...