SQL Server 数据库基本记录(三)

393 阅读4分钟

继续上一篇内容 SQL Server 数据库基本记录(二)

数据表

数据的完整性:数据的准确性和可靠性,不准确、不一致的数据,则导致数据 失去了完整性

实体完整性

  • 要求表中的所有的行唯一
UserId UserPwd UserName Gender
bobo 123456 王波 0

不能添加以下行,加粗部分表示重复

bobo 123456 王波 0
  • 约束方法:唯一约束、主键约束、标识列

域完整性约束

  • 保证列值符合规定要求
UserId UserPwd UserName Gender
bobo 123456 王波 0

不能添加以下行,加粗部分表示密码长度小于六位

yuyu 1236 王雨 1
  • 约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束

引用完整性约束

  • 要求两表相同字段必须一致
SortId SortName
1 手机数码
2 图书音像
3 家用电器

下表相同字段必须一致,不能填写主键中未存在的内容

SortId CommodityName
1 IPhone 8
1 OnePlus 5
3 三门冰箱

下表不可添加,因为 SortId 不存在 4

SortId CommodityName
4 电商时代
  • 约束方法:外键约束

主外键

主键

  1. 表中一列或几列组合的,能够唯一标识表中的每一行
  2. 一个表只能有一个主键
  3. 多列组合当主键称为复合主键

原则:最少性和唯一性

外键

  1. 相对应于主键
  2. 一个表可以有多个外键

标识列

  • 自动增长列自动编号
  • 本身没有具体的含义,只是用来标识不同的实体

标识列的实现方式

  • 标识列用来区分不同的实体
  • 定义成标识列时,需要指定 标识种子标识增量,默认值都为 1
  • 标识列通常也被定义为 主键
  • 定义为标识列的列必须是 整型
  • 标识列数据是 自动增加 的,不能手动的为标识列插入值

空值:NULL 在填入数据值时可不填 默认值:表中的某列,用户不输入数据的时候,将被自动填入

数据类型

分类 数据类型 说明
文本数据类型
字符数据包括任意字母、符号或数字字符的组合
char
varchar
nchar
nvarchar
text
ntext
固定长度的非 Unicode 字符数据
可变长度非 Unicode 数据
固定长度的 Unicode 数据
可变长度的 Unicode 数据
存储长文本信息
存储可变长度的长文本
日期和时间 datetime
数字数据类型
仅包含数字,包括整数和浮点数
int、smallint、float、real、numcric(18,0) 整数、浮点数
货币类型数据
十进制货币值
money
bit 数据类型
表示 是/否 的数据
bit 存储布尔数据类型

创建表

USE E_Market -- 指向当前所操作的数据库
GO -- 批处理标识
CREATE TABLE CommoditySort	-- 创建名为 CommoditySort 的表
(
	SortId int IDENTITY(1,1) NOT NULL,	-- SortId 列,不允许空值
	SortName varchar(50) NOT NULL	-- SortName 列,长度 50,不允许空值
)

约束

约束类型

  1. 主键约束:要求主键列不能为空以及唯一
  2. 非空约束:要求该列不能存在空值
  3. 唯一约束:要求该列的值必须唯一,允许为空,但只能出现一个空值
  4. 检查约束:限制某列取值的范围是否合适
  5. 默认约束:设计某列的默认值
  6. 外键约束:用于在两表之间建立关系,需要指定引用主键的时哪一列
  • 主键约束与唯一约束的区别 -- 主键约束所在的列不允许有空值,唯一约束所列允许空值 -- 每个表中可以有一个主键,多个唯一键

语法

ALTER TABLE 表名
ADD CONSTRAINT 约束名 约束类型_约束列

E.g:
USE E_Market
GO
-- 为用户表UserInfo添加约束
ALTER TABLE UserInfo
ADD CONSTRAINT PK_UserId PRIMARY KEY(UserId),	-- 主键约束
	CONSTRAINT CK_UserPwd CHECK(LEN(UserPwd)>=6),	-- 唯一约束
	CONSTRAINT CK_Gender CHECK(Gender=0 OR Gender=1),	-- 唯一约束
	CONSTRAINT DF_GENDER DEFAULT(0) FOR Gender,	-- 默认约束
GO

适用于表中没有任何数据时,若有数据,会报错

约束取名规则

推荐采用:约束类型_约束列

约束名 例如
主键 (Primary Key) 约束 PK_UserId
唯一 (Unique Key) 约束 UK_UserCardId
默认 (Default Key) 约束 DF_UserPasspwd
检查 (Check Key) 约束 CK_Gender
外键 (Foreign Key) 约束 FK_SortId

语法_已存在数据

ALTER TABLE 表名 WITH NOCHECK
ADD CONSTRAINT 约束名 约束类型 具体的约束说明

E.g:
-- 向已存在数据的表中添加约束
ALTER TABLE Employee WITH NOCHECK
ADD CONSTRAINT CK_EmployeeId CHECK(LEN(EmployeeId)=18)
GO

对表中现有的数据不做检查,只对添加约束后再录入的数据进行检查

删除约束

ALTER TABLE 表名
DROP CONSTRAINT 约束名

E.g:
-- 删除检查约束
ALTER TABLE Employee
DROP CONSTRAINT CK_EmployeeId
GO
  • 有时候表之间存在关系,删除约束时提示存在关系,这时需要先删除主键
-- 先删除主键
ALTER TABLE Employee
DROP CONSTRAINT PK_Employee
GO

-- 再删除检查约束
ALTER TABLE Employee
DROP CONSTRAINT CK_EmployeeId
GO

数据库关系图

  • 对特定的数据库表进行可视化管理与分析
  • 一个数据库中可以创建多个数据库关系图

删除数据表

DROP TABLE 表名

E.g:
IF EXISTS (SELECT * FROM sysobjects WHERE name='CommodityInfo') -- 检测要删除的表是否存在
DROP TABLE CommodityInfo