实现SQL server数据库完整性

1.创建一个数据库名为"erp"

  1. 主数据文件:初始容量为5MB,最大容量为50MB,递增量为1MB,其余参数自设。
  2. 事务日志文件:初始容量为3MB,最大容量为20MB,递增量为10%,其余参数自设。

创建的数据库如下:

二、在erp数据库下创建两个表:

  • 创建"erp" 数据库

首先建立一个"新建查询"然后在"新建查询"的页面写入以下代码后点击执行:

CREATE DATABASE [erp]

CONTAINMENT = NONE

ON PRIMARY

( NAME = N'erp', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\erp.mdf' , SIZE = 8192KB , MAXSIZE = 51200KB , FILEGROWTH = 1024KB )

LOG ON

( NAME = N'erp_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\erp_log.ldf' , SIZE = 3072KB , MAXSIZE = 20480KB , FILEGROWTH = 10%)

WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF

GO

代码执行完成后erp表建立完成,点击刷新即可看到

二、在"erp"数据库下创建表 请注意完整性的设计

(1)创建"部门表"

首先建立一个"新建查询"然后在"新建查询"的页面写入以下代码后点击执行:

USE [erp]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[C](

CNO\] \[nchar\](10) NOT NULL, \[CNAME\] \[varchar\](30) NOT NULL, \[CNumber\] \[int\] NULL, CONSTRAINT \[PK_C\] PRIMARY KEY CLUSTERED ( \[CNO\] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON \[PRIMARY

) ON [PRIMARY]

GO

  1. 创建"职工表"

首先建立一个"新建查询"然后在"新建查询"的页面写入以下代码后点击执行:

CREATE TABLE [dbo].[S](

SNO\] \[char\](6) NOT NULL, \[Sname\] \[varchar\](30) NOT NULL, \[Sex\] \[char\](2) NULL, \[Sphone\] \[int\] NOT NULL, \[Sadress\] \[varchar\](50) NULL, \[CNO\] \[char\](10) NULL, CONSTRAINT \[PK_S\] PRIMARY KEY CLUSTERED ( \[SNO\] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON \[PRIMARY\], CONSTRAINT \[IX_S\] UNIQUE NONCLUSTERED ( \[Sphone\] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON \[PRIMARY

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[S] ADD CONSTRAINT [DF_S_Sex] DEFAULT ('男') FOR [Sex]

GO

ALTER TABLE [dbo].[S] WITH CHECK ADD CONSTRAINT [CK_S] CHECK (([Sex]='男' OR [Sex]='女'))

GO

ALTER TABLE [dbo].[S] CHECK CONSTRAINT [CK_S]

GO

执行后生成的页面属性:

三、请插入记录验证完整性。

  1. 正确插入数据

(1)部门表(3条记录)

点击"新建查询"建立一新的页面输入一下代码对所需数据进行插入:

use erp

INSERT INTO A(CNO, Cname, Cnumber )

VALUES('S4', '文员', '50')

INSERT INTO A(CNO, Cname, Cnumber )

VALUES('S5', '董事', '12')

INSERT INTO A(CNO, Cname, Cnumber )

VALUES('S6', '金融操盘手','30')

代码输入后点击执行将数据插入到表A中去,然后用代码

use erp

select * from A

对表里数据进行查询结果如下:

  1. 职工表(3条记录)

点击"新建查询"建立一新的页面输入一下代码对所需数据进行插入:

use erp

INSERT INTO S(SNO, Sname, Sex,Sphone,Sadress,CNO )

VALUES('I1', '空心木偶', '男','13071603','广东茂名','S1')

INSERT INTO S(SNO, Sname, Sex,Sphone,Sadress,CNO )

VALUES('I2', '小红', '女','13071604','广东深圳','S2')

INSERT INTO S(SNO, Sname, Sex,Sphone,Sadress,CNO )

VALUES('I3', '小梓', '男','13071605','广东广州','S3')

代码输入后点击执行将数据插入到表A中去,然后用代码

use erp

select * from S

  1. 完整性验证

(1)违反"部门表"的PRIMARY KEY约束

由前面可以知道"部门号"是表A的主键,可以使用INSERT语句插入在表A中添加与已有数据相同的部门号,最后使用SELECT查询所插入的数据,观察运行后的结果,如果插入显示"部门号"重复从而插入失败即可验证部门表的PRIMARY KEY(主键)约束,代码如下:

USE ERP

INSERT INTO A(CNO, Cname, Cnumber )

VALUES('S1', '经理', '8')

select * from A

运行结果如下:

(2)违反"部门表"的NOT NULL约束

由前面表的设计可知"部门号"和"部门名称"都是NOT NULL,所以可以使用INSERT语句在部门表A中添加数据,在"部门号"和"部门名称"插入的数据为空,最后使用SELECT查询所插入的数据,从而验证部门表的NOT NULL约束,代码如下:

USE ERP

INSERT INTO A(CNO, Cname, Cnumber )

VALUES('NULL', 'NULL', '8')

select * from A

运行的结果如下:

(3)违反"职工表"的PRIMARY KEY约束

由前面可以知道"职工号"是表S的主键,可以使用INSERT语句插入在表S中添加与已有数据相同的职工号,最后使用SELECT查询所插入的数据,观察运行后的结果,如果插入显示"职工号"重复从而插入失败即可验证职工表的PRIMARY KEY(主键)约束,代码如下:

USE ERP

INSERT INTO S(SNO, Sname, Sex,Sphone,Sadress,CNO )

VALUES('I1', '刘德华', '男','13071683','广东湛江','S9')

运行的结果如下:

相关推荐
m0_748554813 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
QQ1__8115175154 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态4 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子4 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室4 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI4 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing4 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者4 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册4 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李4 小时前
2026 年 Web 前端开发的 8 个趋势!
前端