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 选项:

时间: 2024-11-29 07:35:14

sql基础语法-创建表和约束的相关文章

SQL基础语法和函数

SQL常用查询语句和函数 (2012-05-09 09:44:55) 转载▼ 标签: sql查询 函数 sql常用语句 it 分类: SQL SQL SELECT 语法 SELECT 列名称 FROM 表名称 SELECT LastName,FirstName FROM Persons --------------------------------------------------------------------------------- SQL SELECT DISTINCT 语句 在

SQL基础语法等

--1.while循环 declare @sum int declare @i int set @i=1 set @sum=0 while(@i<101) begin set @sum =@sum+@i set @i=@i+1 if(@i>90) print @i end print @sum --2.goto语句 declare @num int set @num=100 flag: print @num select @num=@num+1 while(@num<106)goto f

SQL基础语法(笔记)

SQL基础语法:1.SELECT :SELECT 列名称 FROM 表名称 以及 SELECT * FROM 表名称2.DISTINCT:SELECT DISTINCT 列名称 FROM 表名称3.WHERE:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值4.ORDER BY 语句用于根据指定的列对结果集进行排序.默认升序:ASC,降序:DESC5.INSERT:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....),

SQL基础:数据表的创建

1. 先选择创建表所在的数据库 2. 创建表 3. 查看表是否创建成功 4. 主键:要求主键列的数据唯一,且不允许为空.主键能够唯一的标识表中的每一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度. 主键分为:单字段主键和多字段联合主键. 4.1 单字段主键 4.1.1 定义方式一:在定义列的同时指定主键 4.1.2 定义方式二:在定义完所有的列之后指定主键 4.2 多字段联合主键 5. 使用外键约束 外键用来在两个表之间建立连接,可以是一列或多列.一个表的外键可以是

[Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图

目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章也只能先躺在收藏夹里,慢慢去消化了.废话不多说了,进入正题,那么这篇文章就让我们接着学习SchemaExport工具的使用吧,如何使用SchemaExport为表添加约束,生成存储过程,生成视图? 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactor

SQL 基础语法(一)

SQL 语法 数据库表 一个数据库通常包含一个或多个表.每个表由一个名字标识(例如"客户"或者"订单").表包含带有数据的记录(行). 下面的例子是一个名为 "Persons" 的表:    Id    LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Chang

Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间

alter table userInfo add(msn varchar2(20));   1.建表 create table userInfo ( id number(6), name varchar2(20), sex number(1), age number(3), birthday date, address varchar2(50), email varchar2(25), tel number(11) );   2.创建约束 不带约束名称的: create table userIn

使用SQL Server 2012创建表

一.使用图形化界面创建表 在管理平台中,展开指定的服务器和数据库,打开想要创建新表的数据库,用右键单击“表”对象,从弹出的快捷菜单中选择“新建表”选项,就会出现“新建表”窗口,如图所示,在该窗口中,可以定义列名.数据类型.是否允许空.及其它相关属性等. 二.使用Transact-SQL语句建表 输入SQL命令 写完代码后,首先点击“√”以验证语法是否正确,然后点击“!执行”,执行SQL语句. 如果没有出错,将会有提示 原文地址:https://www.cnblogs.com/cyx-b/p/12

SQL 基础之创建其他方案对象(十五)

视图概述: – 从视图中创建.修改和检索数据 – 在视图上的数据操纵语言(DML)操作 – 删除视图 数据库对象 Object 对象 Description 描述 Table 表 基本的数据存储集合,由行和列组成. View 视图 从一张表或多张表中抽出的逻辑上相关的数据集合 Sequence 序列 生成规律的数值 Index 索引 提高查询性能 Synonym 同义词 给对象起的别名 什么是视图?我的理解就是从一张表或多张表创建一个自定义的关联虚拟表 视图有如下几个优点: 限制数据访问 简化查