sql基础语法-创建表和约束
创建数据库表
USE SQL2016
IF OBJECT_ID('dbo.Employees','U') IS NOT NULL
DROP TABLE dbo.Employees; Create TABLE dbo.Employees
(
empid INT NOT NULL,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
salary Money Null
); USE SQL2016
IF OBJECT_ID('dbo.Orders','U') IS NOT NULL
DROP TABLE dbo.Orders; Create TABLE dbo.Orders
(
orderid INT NOT NULL,
empid INT NOT NULL,
customerid VARCHAR(30) NOT NULL,
qty INT NOT Null,
orderdatetime DATETIME2 NOT NULL,
CONSTRAINT PK_Orders--建立表时,直接创建主键约束
PRIMARY KEY (orderid)
);
--表已经存在,创建主键约束
ALTER TABLE dbo.Employees
ADD CONSTRAINT PK_Employees
PRIMARY KEY(empid); --唯一约束
ALTER TABLE dbo.Employees
ADD CONSTRAINT UNQ_Employees_lastname
UNIQUE(lastname); --外键约束
ALTER TABLE dbo.Orders
ADD CONSTRAINT FK_Orders_Employees
FOREIGN KEY(empid)
REFERENCES dbo.Employees(empid); --CHECK约束
ALTER TABLE dbo.Employees
Add CONSTRAINT CHK_Employees_Salary
CHECK(salary>0.00); --默认约束
ALTER TABLE dbo.Orders
ADD CONSTRAINT DFT_Orders_orders
DEFAULT(SYSDATETIME()) FOR orderdatetime
创建测试数据
--创建测试数据 --以下两段脚本创建了 两个employee USE [SQL2016]
GO INSERT INTO [dbo].[Employees]
([empid]
,[firstname]
,[lastname]
,[salary])
VALUES
(1,'zhang','san',5000)
GO INSERT INTO [dbo].[Employees]
([empid]
,[firstname]
,[lastname]
,[salary])
VALUES
(2,'li','si',6000)
GO --以下脚本创建了两个orders USE [SQL2016]
GO INSERT INTO [dbo].[Orders]
([orderid]
,[empid]
,[customerid]
,[qty])
VALUES
(1,1,'CUS1',10)
GO INSERT INTO [dbo].[Orders]
([orderid]
,[empid]
,[customerid]
,[qty])
VALUES
(2,2,'CUS2',20)
GO
验证约束条件
验证外键约束,empid为3的employee不存在,故以下脚本报错
USE [SQL2016]
GO INSERT INTO [dbo].[Orders]
([orderid]
,[empid]
,[customerid]
,[qty])
VALUES
(3,10,'CUS1',10)
GO

验证外键约束,删除主表记录,主表中的值被其他表引用,empid=1的记录在order中被引用,故删除错误
USE [SQL2016]
DELETE FROM dbo.Employees WHERE empid=1
GO

验证外键约束,UPDATE主表记录,主表中的值被其他表引用,empid=1的记录在order表中被引用,故更新失败
USE [SQL2016]
UPDATE dbo.Employees set empid=4 where empid=1
GO

外键约束默认执行 no action引用操作,即delete 和 update 数据时,如果被引用,则默认不允许操作。

其他选项:
CASCADE:将级联相关的行
SET DEFAULT:将相关行设置为默认值
SET NULL:将相关行设置为NULL
将Delete Rule 和Update Rule 改为 CASCADE后。
执行以下脚本,将empid=1改为4,删除empid=2的记录。则应该自动修改Orders里的empid=1的改为4,删除empid=2的orders
USE [SQL2016]
GO
UPDATE dbo.Employees set empid=4 where empid=1 DELETE FROM dbo.Employees WHERE empid=2 GO SELECT * FROM dbo.Orders

CHECK 约束仅当false时拒绝操作,当为true和unknow时允许操作,例如
-1000,拒绝操作
5000,允许操作
NULL,允许操作
WITH NOCHECK 选项:
sql基础语法-创建表和约束的更多相关文章
- ASP.NET实现二维码  ASP.Net上传文件  SQL基础语法  C# 动态创建数据库三(MySQL)  Net Core 实现谷歌翻译ApI 免费版  C#发布和调试WebService  ajax调用WebService实现数据库操作  C# 实体类转json数据过滤掉字段为null的字段
		
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
 - [SQL基础教程] 1-5 表的删除和更新
		
[SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...
 - openresty开发系列15--lua基础语法4表table和运算符
		
openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也 ...
 - SQL 基础语法(创建表空间、用户、并授予权限、数据的增删改查) --(学习笔记)[转]
		
--创建表空间 名:lyayzh_test create tablespace lyayzh_test --创建表数据文件 名:lyayzh_test_data.dbf 必须以dbf为后缀 dataf ...
 - [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
		
目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章 ...
 - SQL 基础语法(一)
		
SQL 语法 数据库表 一个数据库通常包含一个或多个表.每个表由一个名字标识(例如"客户"或者"订单").表包含带有数据的记录(行). 下面的例子是一个名为 & ...
 - SQL基础语法提纲
		
一.SQL需知5点 1.SQL是Structured Query Language的缩写,是用来访问关系型数据库的,非过程化的,高级编程语言. 2.SQL具有语法高度综合统一,高度的非过程化,对集合进 ...
 - SQL学习笔记:表的约束
		
目录 NOT NULL约束 INDEX 索引 CHECK 约束 DEFAULT 约束 UNIQUE 约束 PRIMARY KEY 约束 FOREIGN KEY 约束:简单的说,就是创建表的时候,对表或 ...
 - MySQL数据分析-(10)SQL基础操作之表操作
		
大家好,我是jacky,很高兴跟大家继续分享MySQL数据分析实战课程,前面我们学习了库层面增删改查的SQL语句,这次课jacky将给大家介绍表层面的增删改查, (一)本课时的学习逻辑 表层面的增删改 ...
 
随机推荐
- 更多的使用自定义元素(CustomElement)。
			
更多的使用自定义元素(CustomElement).
 - nginx搭建支持http和rtmp协议的流媒体server之中的一个
			
实验目的:让Nginx支持flv和mp4格式文件,支持RTMP协议的直播和点播:同一时候打开RTMP的HLS功能 资料:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的 ...
 - MFC上显示摄像头JPEG图片数据的两种方法
			
其一是借助opencv,其二是利用流对象. 方法一: CvMat *mat; ,,CV_8UC1); ,,CV_8UC1,JPEGBuf); /*初始化矩阵信息头,这里的JPEGBuf就是JPEG图像 ...
 - iOS开发中对于一些常用的相对路径(持续更新)
			
1.iOS开发的证书的描述文件放置地点 ~/Library/MobileDevice/Provisioning Profiles 2.$(SRCROOT)代表的是这个项目文件夹所在的位置 $(PR ...
 - HTTP服务器用什么组件或者方式比较好
			
我目前用Indy的HttpServer组件来编写,但遇到一个暂时没有办法解决的问题,就是上传文件到这个HTTPServer,如果文件名包含中文,则会出现乱码.网上查了一下,这是个indy的遗留问题,据 ...
 - Java 绘制环形的文字 (Circle Text Demo)
			
1. [代码]CircleTextDemo.java import java.awt.*;import java.awt.event.*;import java.awt.geom.*; /** ...
 - 一步一步学Silverlight 2系列(14):数据与通信之WCF
			
一步一步学Silverlight 2系列(14):数据与通信之WCF 概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框 ...
 - 屏幕适配-使用autoLayout
			
当遇见xib中无法删除的控件时. 将这个错误的控件拖离本xib(第一个元素.xib文件是有许多元素组成的集合),确保这个xib是正确的.重新创建一个xib文件,将这个正确的xib元素整个复制过去. 在 ...
 - 【iOS】KVC 和 KVO 的使用场景
			
http://blog.csdn.net/chenglibin1988/article/details/38259865 Key Value Coding Key Value Coding是coc ...
 - 如何让虚拟机的Ubuntu上网?
			
先声明 本文使用的虚拟机: VMware Workstation 14 Pro 本文使用的Ubuntu : ARM裸机1期加强版配套的Ubuntu16.04 特别注意:如果你使用的虚拟机和Ubuntu ...