一.约束的分类

  实体约束:关于行的约束,比如某一行出现的值就不允许别的行出现,如主键

  域约束:关于列的约束,对表中所有行的某些列进行约束,如check约束

  参照完整性约束:如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,如外键约束

二.约束的命名

  主键约束命名实例:

    pk_Student ; (pk_表名)

  check约束命名实例:

    ck_Student_Name;(ck_表名_字段名)

三.键约束

  1.主键约束

    ①.在创建表的时候创建约束:  

 create table student
 (
     ID int identity not null primary key, --创建表的时候添加约束
     Name ) not null
 )

    ②.在已存在的表上创建主键约束:

 --在已存在的表上创建主键约束
 alter table teacher
 add constraint pk_teacher_ID
 primary key(ID)

    上面的语句告诉了Sql Server以下信息:

    a.添加了一个约束到表中

    b.约束的名称

    c.什么约束(约束类型)

    d.约束作用域那一列

    ③.创建复合主键

 --创建符合约束
 alter table emp
 add constraint [PK_emp] primary key nonclustered
 (
 ID,
 Code
 )

  2.外键约束

    ①.对外键的理解

      两个表中存在相同的字段(如学生表和成绩表中都存在学号字段),该字段在其中一张表中能够主键(如学生表),在另一张表中不能作为主键(如成绩表),则在不能作为主键的表中称为外键

      如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键

    ②.示例

      新建一个班级表,字段有班级编号,班级名称

      新建一个学生表,字段有学生编号,班级编号,学生姓名,将表中的班级编号字段设置为外键

      代码:

    

--键班级表
create table class
(
    classid int primary key,
    classname )
)
--见学生表
create table students
(
    studentid int primary key,
    classid int,
    stuname ),
    foreign key(classid) references class(classid)
)

    向学生表中插入一行记录,此时班级表中没有内容:

,,'小明');

    提示报错,因为此时班级表中没有对应的班级

    先向班级表中插入一行记录,在向学生表中插入属于该班级的学生信息

,'一班');
,,'小明');

    

    ③.在创建表时添加外键约束

--在创建表时创建外键约束
create table customer
(
    customerId int identity not null primary key,
    customerName ) not null
)
create table orders
(
    orderId int identity not null primary key,
    customerId int not null foreign key references customer(customerId)  --约束类型-外键-引用表(列名)
)

     ④.在已经存在的表中添加外键约束

     ⑤.级联动作

     ⑥.外键约束的其他考虑

  

Sql Server数据库之约束的更多相关文章

  1. 关于SQL SERVER数据库学习总结

    对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...

  2. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  3. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  4. SQL Server - 数据库初识

      在互联网笔试中,常遇到数据库的问题,遂来简单总结,注意,以 Sql Server 数据库为例. 数据库 数据库系统,Database System,由数据库和数据库管理系统组成. 数据库,Data ...

  5. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  6. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

  7. SQL Server数据库学习总结

    经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的     一图胜“十”言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数 ...

  8. SQL Server缺省约束、列约束和表约束

    SQL Server缺省约束是SQL Server数据库中的一种约束,下面就为您介绍SQL Server缺省约束.列约束和表约束的定义方法啊,供您参考. SQL Server缺省约束 SQL Serv ...

  9. 使用PowerDesigner 设计SQL Server 数据库

    工具: Sybase PowerDesigner 12.5 Microsoft  SQL Server 2005 第一步:概念数据模型 打开PowerDesigner 软件,设计“概念数据模型”(Co ...

随机推荐

  1. zabbix3.4安转

    其实很简单  在官网上有安装文档,我只不过是将官网上的拿了下来 安装apache和php 数据库mariadb(我的系统是centos7的所以安装mariadb) 开始zabbix的安装 本次实验 系 ...

  2. 深入理解synchronized方法同步的是方法还是对象?

    一.运用synchronized关键字 首先我们来看看一个多线程中线程不安全的列子 代码如下: 共享数据类: public class NotSynchronizated extends Thread ...

  3. Selenium 基础知识

    被测产品是B/S 结构,那么推荐selenium selenium 并不是单纯的一个工具,他是一组工具的集合 1. selenium IDE 是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器 ...

  4. some learning

    一.windows下迁移access到mysql Windows下 Access 数据 迁移到 Mysql(5.5)数据库 . 具体做法 . 在access的表中选择,文件->导出->保存 ...

  5. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

  6. 【代码问题】SiameseFC

    [SiameseFC]: L Bertinetto, J Valmadre, JF Henriques, et al. Fully-convolutional siamese networks for ...

  7. Python程序打包之PyInstaller

    1.背景说明 [Python版本]Python 2.7.14 [系统平台]Windows 7 [优缺点描述]据说PyInstaller 比较慢,但是PyInstaller打包出来的exe简洁(就一个文 ...

  8. 链表(list)使用注意

    如下代码是linux上的链表接口源码,使用的这个链表(list)源码,可以方便快捷的建立链表队列,但使用时需要注意的坑有: 1.不支持,多对多,否则在add的时候,因为要加入链表的对象只有一块list ...

  9. Mysql临时文件目录控制

    查看mysql的log-error日志发现如下错误: ERROR 3 (HY000): Error writing file '/tmp/MYbEd05t' (Errcode: 28) 这是由于mys ...

  10. centos6.5虚拟机无法访问外网解决办法

    安装了centos6.5虚拟机,使用的是桥接方式.把所有的配置已经写到/etc/sysconfig/network-scripts/ifcfg-eth0中后,发现内网可以ping通,外网却无法访问. ...