MSSQL约束【转】

为了减少数据冗余和使数据库内容变的严谨,MSSQL数据库里引入了关系和约束。我们平时做一些小程序,需要使用到MSSQL数据库的时候大多没有严格去规划一下数据库的设计,但是真正开发的时候需要你严格的进行需求分析后再进行数据库设计,好的数据库设计对于维护和未来对程序的扩展有着非常大的好处。

      所以我觉的学习一下约束和关系还是挺重的。我是现学现卖,将学习的过程记录一下:

在学习之前先背几个单词,在需要在SQL语句写的时候用到:

  • Alter:改变
  • Primary:主要
  • Constraint:约束
  • Unique:唯一的、独特的
  • Foreign::外国的,外交的
  • Reference:参考,引用,提及
  • Cascade: 层叠,串联的

数据库约束是为了保证数据的完整性而实现的一套机制,约束有:

  • 非空约束
  • 主键约束(PK) Primary key constraint
  • 唯一约束(UQ) Unique constraint
  • 默认约束(DF) Default constraint
  • 检查约束(CK) Check constraint
  • 外键约束(FK) Foreign key constraint

我们首先来创建一张表teacher

?
create table teacher (     tId int not null,     tname nvarchar(50),     tage int,     tsalary int )

如何给表增加字段

alter table teacher

add ttest nvarchar(50)

如图,看到添加了ttest字段


先看一下主键约束

?
1 2 alter table teacher add constraint PK_Teacher primary key(tId)

维一约束:

?
1 2 alter table teacher add constraint  UQ_Teacher_tname unique(tname)

那么唯一约束有什么不同。我们可以往数据库插入两条数据

?
insert into teacher(tId,tname,tage,tsalary) values('1','Jack',18,'3000'); insert into teacher(tId,tname,tage,tsalary) values('2','Jack',21,'4000');

发现在执行第二条数据的时候报错:

消息2627,级别14,状态1,第1 行

违反了UNIQUE KEY 约束'UQ_Teacher_tname'。不能在对象'dbo.teacher' 中插入重复键。

通过这样,从而保证了数据的正确性

默认约束

?
alter table teacher add constraint DF_Teacher_age default(18) for tage

 

检查约束

?
--为了方便测试,进行检查约束前先对表添加一个sex字段 alter table teacher add tsex nvarchar(2)    --接着将表里的tsex字段数据全部改成男    update teacher set tsex='男'    --进行检查约束    alter table teacher    add constraint CK_Teacher_Tsex check (tsex='男' or tsex='女');    --测试检查约束    insert into teacher(tId,tname,tage,tsalary,tsex) values('3','CJ','32','10000','猫');

发现错误,因为猫不是正常规定的人的性别该有的男和女。

消息547,级别16,状态0,第1 行

INSERT 语句与CHECK 约束"CK_Teacher_Tsex"冲突。该冲突发生于数据库"MySchool",表"dbo.teacher", column 'tsex'。

语句已终止。

 

那里在工具里怎么设置呢? 右键字段tsex选择CHECK约束

在管理器的表设计里,右键Ttest选关系,如下图所示


也可以对年龄的范围进行约束:

?
alter table teacher add constraint CK_Teacher_Tage check(tage>=18 and tage<100);

外键约束:

+ View Code?
--为了进行外键约束的测试,先建一个表    create table student    (    sid int not null,    sname nvarchar(50),    sage int,    ssex nvarchar(2)    )    --往student表里追加一个字段用作外键约束    alter table student    add tid int not null    --往student表里插入一条数据    insert into student(sid,sname,sage,ssex,tid) values('1','春晓','23','男',1);    --将teacher表和student表进行外键约束    --由于是给student表的tid字段增加的外键约束,所以他所约束的另一张表的约束字段必需是主键    alter table student    add constraint FK_student_tId foreign key(tid) references teacher(tid)    --对student表的tid字段创建好外键后如果进行插入数据是teacher表里的tid字段里没有的值,那么会报错。    --例如下面的是错误的    insert into insert into student(sid,sname,sage,ssex,tid) values('1','春晓','23','男',100);    --如果要删除student表外键约束的主表teacher里的数据,会报错    delete teacher where tId=1;           --如何想要删除teacher表里的数据?要那么先要删除student表里tid=1的数据,才可以删除    --我们也可以在创建外键约束的时候,进行删除的级联设置    --如下SQL语句    alter table student    add constraint FK_student_tId foreign key(tid) references teacher(tid)    on delete cascade    --当然也可以进行级联修改:    alter table student    add constraint FK_student_tId foreign key(tid) references teacher(tid)    on update cascade

那么如何在管理器里进行外键的设置 如下图 右键tid选关系。在表的规范里进行设置主表和外表的关系,在Insert和Update规范里进行设置更新和删除的级联设置。

综合练习

+ View Code?
--下面来做一个踪合的约束设置 --创建一个Employee表 --对tId 设置为主键 --对tName 控制是唯一 --对tSex 控制只能是男女 --对tAge 控制只在-60之间默认值是    createtableEmployee (     tId intnotnull,     tName nvarchar(50),     tSex nvarchar(2),     tAge int )    altertableEmployee addconstraintPK_Employee_tId primarykey(tId), constraintUQ_Employee_tName unique(tName), constraintCK_Employee_tSex check(tSex='男'ortSex='女'), constraintCK_Employee_tAge check(tAge>=18 andtAge<=100), constraintDF_Employee_tAge default(18) fortAge    --现在我们将原来的Employee表删除,我们在创建表的时候进行约束设置 --对tId 设置为主键 --对tName 控制是唯一 --对tSex 控制只能是男女 --对tAge 控制只在-60之间默认值是 droptableEmployee createtableEmployee (     tId intnotnullprimarykey,     tName nvarchar(50) unique,     tSex nvarchar(2) check(tSex='男'ortSex='女'),     tAge intcheck(tAge>=19 andtAge<=60) default(18) )    --如何想在创建表的时候对约束起名字,可以写成这种形式 tSex nvarchar(2) constraintCK_Employee_tSex check(tSex='男'ortSex='女'),

最后我们那约束进行删除 该怎么办, 如下SQL语句:

?
alter table Employee drop constraint CK_Employee_tSex

原文地址:https://www.cnblogs.com/accumulater/p/12093237.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大