[读书笔记]SQL约束
目的:通过在列级或表级设置约束,确保数据符合某种数据完整性规则
实现:数据库主动地检查维护数据的完整性
手段:约束,数据类型,触发器
----------------------------------------------------------------------------------------------------------------------------------------------------
约束的三种类型:
实体约束,域约束,参照完整性约束
具体实现方法:
主键约束,外键约束,唯一约束,CHECK约束,DEFAULT约束,规则,默认值
[归类]
域约束:对于列而言,确保列的数据满足特定的标准。CHECK约束,DEFAULT约束,规则和默认值
实体约束:对于行而言,只关心特定的行,每一行都的特定列都有唯一值。主键约束,唯一约束
参照完整性约束:某列的值必须与其他列的值匹配。外键约束
----------------------------------------------------------------------------------------------------------------------------------------------------
区别约束和规则、默认值:
规则和默认值的应用较早于CHECK和DEFAULT约束,它们是较老的SQL备用约束的一部分,主要是为了向后兼容而使用。
约束:是一个表的特征,本身没存在形式;
规则、默认值:是单独定义,然后绑定到表上。
----------------------------------------------------------------------------------------------------------------------------------------------------
[语法]
添加约束——使用 ALTER TABLE <table name>
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name>
<constraint type> <constraint parameters…>
外键约束
<column name><data type><nullability>
FOREIGN KEY REFERENCES <table name>(<column name>)
[ON DELETE {CASCADE|NO ACTION|SET NULL|SET DEFAULT}]
[ON UPDATE {CASCADE|NO ACTION|SET NULL|SET DEFAULT}]
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name>
FOREIGN KEY (<column name>) REFERENCES <table name>(<column name>)
唯一约束
<column name> <data type> <nullabiliby>
UNIQUE
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name>
UNIQUE (<column name>)
CHECK约束
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name>
CHECK
(<rule…>)
DEFAULT约束
<column name> <data type> <nullability>
DEFAULT <default value>
ALTER TABLE <table name>
ADD CONSTRAINT <default name>
DEFAULT <value> for <column name>
在创建约束时忽略无效的数据
利用SQL Server创建约束时,如果现有的数据无法满足约束要求,则无法创建该约束。有两种解决办法:1)修改现有的数据,使其符合约束要求;2)在ALTER语句中添加WITH NOCHECK 选项:
ALTER TABLE <table name>
WITH NOCHECK
ADD CONSTRAINT <constraint name>
<constraint type>..
临时禁用已存在的约束
ALTER TABLE <table name>
NOCHECK
CONSTRAINT <constraint name>
启用已禁止的约束
ALTER TABLE <table name>
CHECK
CONSTRAINT <constraint name>
删除约束
alter table <tablename>
drop constraint <constraintname>
修改约束
先删除约束,后再添加
最新文章
- 关于BeanUiles.copyPropertis()的用法
- cri-o 创建非infra容器
- 集合框架null与size=0
- 【转】linux下cpio命令使用
- Oracle怎样方便地查看报警日志错误
- 【Java接口实现动态加载不同的类】
- elasticsearch基础概念
- Struts(十二):异常处理:exception-mapping元素
- Java实现内部类
- MVC基本开发介绍 (1)列表展示
- python format()用法
- 【XSY2669】归并排序 树状数组 简单组合数学
- VS2013编译报错error C4996: &#39;sprintf&#39;: This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
- Hive记录-hive权限控制
- 数据渲染模板引擎,template-web的使用
- The MySQL Server
- TensorFlow:tf.nn.max_pool实现池化操作
- DB2序列和主键自增长
- 命令行运行python项目文件,报错:ModuleNotFoundError: No module named &#39;xxxx&#39; 解决办法
- Twitter OA prepare: even sum pairs
热门文章
- ecshop首页调用评论及图片
- 【英语】Bingo口语笔记(26) - Take系列
- Java之路
- Java中String为什么是final
- 实现LoaderCallbacks接口动态循环加载网上图片并展示在手机屏幕上 ...
- GenericRepository
- js内置对象-Date对象
- ASP.NET MVC3细嚼慢咽---(1)网站创建与发布
- C字符串和C++中string的区别 &;&;&;&;C++中int型与string型互相转换
- Spring Batch的事务-Part 1:基础