实现SQL server数据库完整性

2023-12-15 10:52:29

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

2. 完整性验证

(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')

运行的结果如下:

文章来源:https://blog.csdn.net/weixin_62399938/article/details/134888806
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。