SQL Server 定义数据完整性 6大约束

1.创建一客户张表

 1 IF OBJECT_ID(‘dbo.Employees‘, ‘U‘) IS NOT NULL
 2   DROP TABLE dbo.Employees;
 3
 4 CREATE TABLE dbo.Employees
 5 (
 6   empid     INT         NOT NULL,
 7   firstname VARCHAR(30) NOT NULL,
 8   lastname  VARCHAR(30) NOT NULL,
 9   hiredate  DATE        NOT NULL,
10   mgrid     INT         NULL,
11   ssn       VARCHAR(20) NOT NULL,
12   salary    MONEY       NOT NULL
13 );

2.主键约束

-- Primary key
ALTER TABLE dbo.Employees
  ADD CONSTRAINT PK_Employees
  PRIMARY KEY(empid);
  

对于主键约束后台将创建一个唯一索引,以物理机制强制逻辑的唯一性约束

3.唯一约束

-- Unique
ALTER TABLE dbo.Employees
  ADD CONSTRAINT UNQ_Employees_ssn
  UNIQUE(ssn);

4.外键约束 创建一张订单表 插入外键

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,
  custid    VARCHAR(10) NOT NULL,
  orderts   DATETIME2   NOT NULL,
  qty       INT         NOT NULL,
  CONSTRAINT PK_Orders
    PRIMARY KEY(orderid)
);
-- Foreign keys
ALTER TABLE dbo.Orders
  ADD CONSTRAINT FK_Orders_Employees
  FOREIGN KEY(empid)
  REFERENCES dbo.Employees(empid);

5.CHECK约束

-- Check
ALTER TABLE dbo.Employees
  ADD CONSTRAINT CHK_Employees_salary
  CHECK(salary > 0.00);

6.默认约束

-- Default
ALTER TABLE dbo.Orders
  ADD CONSTRAINT DFT_Orders_orderts
  DEFAULT(SYSDATETIME()) FOR orderts;

-- Cleanup
DROP TABLE dbo.Orders, dbo.Employees;

原文地址:https://www.cnblogs.com/yuanzijian-ruiec/p/9311358.html

时间: 2024-10-04 23:11:47

SQL Server 定义数据完整性 6大约束的相关文章

SQL Server日志文件过大 大日志文件清理方法 不分离数据库

SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库--〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式是不需要做数据库分离和附加操作的. SQL 2008收缩清空日志方法: 1.在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库就不支持时间点备份了.1).选择数据库–属性-选项-恢复模式–选择简单.2).收缩数据库后,再调回完整.2

Sql Server 主键 外键约束

主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如果为表指定了主键约束, 数据库引擎 将通过为主键列自动创建唯一索引来强制数据的唯一性. 当在查询中使用主键时,此索引还允许对数据进行快速访问. 如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一. 如下图所示, Purchasing.ProductVend

SQL Server使用sp_rename重命名约束注意事项

在SQL Server中,我们可以使用sp_name这个系统存储过程重命名数据库中对象的名称. 此对象可以是表. 索引. 列. 别名,约束等数据类型(具体可以参考官方文档).上周在使用这个函数重构数据库中约束的时候,遇到了下面错误,如下所示: USE AdventureWorks2014; GO sp_rename 'ErrorLog.DF_ErrorLog_ErrorTime', 'DF_ErrorLog_ErrorTime_old'; GO Msg 15225, Level 11, Stat

SQL Server 自动增长过大

一.背景 我们遇到的问题如下图所示:自动增长无端端就按照这样的比例进行增长: (Figure1:问题所在) 尝试使用SSMS修改自动增长值,就会出现下面的错误: (Figure2:错误信息) 遇到上面的问题,我们需要解决两个问题: 1. 把数据文件收缩到一定范围内的值,腾出磁盘空间: 2. 重新设置自动增长的值,可以按照百分比,也可以使用指定的空间大小,我个人倾向使用n*1024M这样的值,仅供参考: 3. 如果有需要你也可以进行日志文件的收缩: 二.解决过程 1. 使用下面的脚本修改自动增长的

关于SQL Server数据表的五中约束

1.主键约束(PRIMARY KEY) 主键约束可以在表中定义一个主键值,它可以唯一确定表中每一条记录,每个表中只能有一个主键约束(只能有一个主键约束的意思并不是说受主键约束的列只能有一个),并且受主键约束的列不能为空值.如果主键约束定义在不止一列上,则某一列中的值可以存在重复,但是受主键约束的所有列的组合值必须唯一. 2.唯一性约束(UNIQE) 唯一性约束确保在非主键列中不输入重复的值.用于指定一个或多个列的组合具有唯一性,以防止在列中输入重复的值.可以在一个表中定义多个唯一性约束,但是只能

Sql Server系列:键和约束

1. 约束的类型 约束可以分为3大类:实体约束.域约束和参照完整性约束. 1.1> 实体约束 实体约束都是关于比较行的,实体约束并不关心整体列中的数据,它只对特定行感兴趣. 1.2> 域约束 域约束处理一个或多个列,确保一个特定列或一组特定列满足特地的标准.在插入或更新一行时,域约束不考虑其他行.如限定UnitPrice列的值大于或等于0,这就是域约束. 1.3> 参照完整性约束 如果某列的值必须与其他列(该列可能在同一个表中,或者更通常的是在不同的表中)的值匹配,这就意味着创建了参照完

sql server 查找字段上的约束

1. 当字段没有默认值或者约束的时候可以使用: alter table [table_name] drop column [column_name] 来删除. 当有默认值的时候应该先删除默认值,然后再删除此列,不然会报错.具体方法如下 select b.name from sysobjects b join syscolumns a on b.id = a.cdefault where a.id = object_id('表名') and a.name = '列名'”; ALTER TABLE

SQL SERVER 数据日志太大,磁盘没有空间,直接删除数据库日志后,显示 恢复挂起。

问题简述: sharepoint的某个站点对应的数据库日志太大了,想把日志瘦身.于是我把整个数据库分离,然后附加数据库来重新生成日志文件.谁知道在附加的时候,居然报错"附加数据库报错:由于数据库没有完全关闭,无法重新生成日志" 问题原因:原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的.如果事务日志文件被手动删除或者由于硬件或环境问题而丢失,则可能出现此错误. 处理办法: 一.把分离之前的日志文件也复制过来一齐附加嘛从错误提示看, 应该是你的日志文件中还包

SQL Server数据完整性

我们在学习数据库的过程中,经常会听到两个概念:数据冗余和数据完整性.数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况,我们说,为了性能着想,数据库中允许有一些数据冗余,但是要保持数据的完整性. 数据完整性=可靠性+准确性,这里我们要清楚以下几点: • 数据存放在表中 • “数据完整性的问题大多是由于设计引起的” • 创建表的时候,就应当保证以后数据输入是正确的 ——错误的数据.不符合要求的数据不允许输入 本质而言,保证数据的完整性 = 实施完整性约束 完整