设为首页 收藏本站
查看: 867|回复: 0

[经验分享] 31. SQL -- 完整性及约束(2)

[复制链接]

尚未签到

发表于 2018-10-23 08:31:44 | 显示全部楼层 |阅读模式
  唯一性束:
  所谓唯一性约束(unique constraint)不过是数据表内替代键的另一个名称而已。替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可。换句话说,在唯一列内不允许出现数据重复的现象唯一性约束指定一个或多个列的组合的值具有唯一性,以防止在列中输入重复的值。唯一性约束指定的列可以有NULL 属性。
  语法:
  CONSTRAINT constraint_name
  UNIQUE [CLUSTERED | NONCLUSTERED]
  (column_name1[, column_name2,…,column_name16])
  DEMO1
  创建国家(Country)表,指定国家不能重复,ID号为主键。
  CREATE TABLE Country
  (
  cCountryId CHAR(3) PRIMARY KEY, /*省略部分关键字,行级约束,没有指定约束名*/
  cCountry CHAR(25) NOT NULL UNIQUE ) /*行级约束,没有指定约束名*/
  插入3条数据:
  insert into Country
  values
  ('A01','china'),
  ('A02','yemen'?xml:namespace>),
  ('A03','IR')
  查看结果:
  select * from Country
  新插入一条数据,在列cCountry中指一条记录与之前插入记录值相同的数值:
  insert into Country
  values ('A04','china')
  出下如下错误:
  消息2627,级别14,状态1,第2 行
  违反了UNIQUE KEY 约束'UQ__Country__62A4127E20C1E124'。不能在对象'dbo.Country' 中插入重复键。
  语句已终止。
  DEMO2:若表已创建,通过ALTER TABLE来进行创建UNIQUE约束
  alter table country
  add constraint UQ_Country_cCountry unique (cCountry)
  /*表级约束*/
  图形化界面创建:
  数据库 → 表 → 设计 → 选择创建约束的列 → 右键 → 索引/键
  创建约束
  
  CHECK约束:
  CHECK 约束(CHECK 约束:定义列中可接受的数据值,检查约束通过限制插入列中的值来实施域完整性。可以在一列上定义多个检查约束。它们按照定义的次序被实施。当约束被定义成表级时,单一的检查约束可以被应用到多列,也可以将多个 CHECK 约束应用于单个列。当除去某个表时,也将除去 CHECK 约束。
  CHECK约束的限制:
  ○1 、CHECK 约束不接受计算结果为FALSE 的值。因为空值的计算结果为UNKNOWN,所以表达式中存在这些值可能会覆盖约束,例如,假设对int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值10(即 MyColumn = 10)。如果将值NULL 插入到 MyColumn,数据库引擎将插入 NULL 且不返回错误。
  ○2 、如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效
  ○3 、执行 DELETE 语句时不验证CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果
  DEMO:假设对表 CheckTbl 执行下列语句。
  INSERT INTO CheckTbl VALUES (10, 10)
  GO
  DELETE CheckTbl WHERE col1 = 10;
  即使 CHECK 约束指定表 CheckTbl 必须至少包含 1 行,DELETE 语句也会成功
  语法:
  CONSTRAINT constraint_name
  CHECK [NOT FOR REPLICATION]
  (logical_expression)
  CHECK约束可以连同下列关键字或命令一起指定:
  IN关键字
  使用IN 关键字可以确保:键入的值被限制在一个常数表达式列表中。
  例如:下列命令在表Shopper的列cCity上创建了CHECK约束chkCity,这样就能将输入限制在合法的城市中。
  CREATE TABLE Shopper
  (
  cCity CHAR(15) NOT NULL CONSTRAINT chkCity CHECK(cCity IN ('Boston', 'Chicago','
  Dallas','New York', 'Paris','Washington'))
  )
  LIKE关键字
  使用LIKE关键字可以通过通配符来确保输入某一列的值符合一定的模式。
  例如:
  CHECK (cShopperId LIKE ‘[0-9][0-9][0-9][0-9] [0-9][0-9]‘)
  上述CHECK约束指定[0-9]——[0-9],之间只能包含六位数值。
  BETWEEN 关键字
  可以通过BETWEEN关键字来指明常数表达式的范围。该范围中包括上限值和下限值。
  例如:
  CHECK (siToyQoh BETWEEN 0 AND 100)
  上述CHECK约束指定了属性siToyQoh的值只能在0和100之间。
  创建Check约束时应遵循的规则:
  它可以在列级或表级创建。
  它用来限制可以插入到该列的值。
  它可以包含用户自定义的搜索条件。
  它不能包含子查询。
  如果创建时指定了WITH NOCHECK选项,就不检查已有数据。
  它可以引用同一表中的其他列
  DEMO:限制表tb2中列silowerage输入值需>=2,列siupperage输入值需=2)
  alter table tb2
  add constraint CK_tb2_siupperage
  check (siupperage

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625197-1-1.html 上篇帖子: 30. SQL -- 完整性及约束(1) 下篇帖子: sql 中IsNull函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表