SQL SERVER数据定义——实验篇

一 建立一个数据库,名为:学生管理

 在学生管理数据库中,参考教材第四章的三张表要求,建立学生表,课程表,成绩表

要求:(1)根据教材上的具体数据内容来自定义各列属性类型的宽度,做好主码约束

       (2)做好三个表之间外键约束

     (3)使用insert命令向三个表中各建立若干实际数据(认真对待,以后实验经常要使用到这三个表)

1 学生表(学号PK,  姓名 , 专业名 , 性别 ,入校成绩 ,手机号, 照片 ,备注)

要求:学号为主键; 姓名的长度介于2-5;性别的取值只能限于”男,女”之一,且默认值为:男;入校成绩只能取介于200-700之间.

2 课程表(课程号PK ,  课程名称 , 任课教师 ,  学分)

3 成绩表(学号FK,  课程号FK,  成绩),注意,成绩表的学号和课程号分别是学生表和课程表的外键. 课程号为4位字符串,其中第一位为字母”D”,后面2位为0-9的数字; 成绩值只能取0-100之间.

create table XS
(
xh char(9)primary key,
xsname char(16)NOT NULL,
zyname varchar(30)NOT NULL,
xb char(2)CHECK(xb IN('男','女')) default('男')NOT NULL,
rxcj int check(rxcj>200and rxcj<700) NOT NULL,
sjh char(11) ,
ZP char(11) ,
bz char(30),
)

create table KC
(
kch char(4) check(kch like'[D][0-9][0-9][0-9]') primary key,
kcmc char(20)NOT NULL,
rkls char(8) NOT NULL,
xf int NOT NULL,
)

create table CJ
(
xh char(9),
kch char(4)check(kch like'[D][0-9][0-9][0-9]'),
cj int check(cj<100and cj>0),
foreign key(xh) REFERENCES XS(xh),
foreign key(kch) REFERENCES KC(kch),
)

二 练习SQL的其它数据定义功能(表结构的修改):

1向学生表中增加身高(指定数值型,3位2位小数),出生日期,是否党员,是否团员四列;

USE XSGL 
alter table XS add sg decimal(3,2)
alter table XS add csrq datetime
alter table XS add dy char(2)CHECK(dy IN('是','否'))
alter table XS add ty char(2)CHECK(ty IN('是','否'))

2删除是否团员一列

use XSGL
alter table XS drop column ty

4为手机号列增加约束:必须为11位,且每位为数字;为性别列增加一个约束,插入新记录时默认值为’男’

alter table XS add CONSTRAINT sjh check(sjh like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
alter table XS add CONSTRAINT xb DEFAULT('男')

5向课程表中增加”任课教师”列

alter table KC add rkjs char(30)

6对已有表,增加约束,限制身高在1.00-2.0米之间

alter table XS add CONSTRAINT sg check(sg>1.00and sg<2.00)

7对课程表中的课程名称进行唯一限制

alter table KC add CONSTRAINT kcmc unique (kcmc)

三 向三个表中添加数据内容

 使用insert into 命令在以上三表中各录入有效数据至少5行。 特别注意这些数据按关键字相互存在联系的

引例:向成绩表中插入一个学生的一门课成绩:

Insert into 成绩表(学号,课程号,成绩) values (‘0000001’,’D102’,78)

 Insert into CJ(xh,kch,cj) values ('0000001','D101',78)
Insert into CJ(xh,kch,cj) values ('0000002','D101',89)
Insert into CJ(xh,kch,cj) values ('0000003','D102',90)
Insert into CJ(xh,kch,cj) values ('0000004','D103',90)
Insert into CJ(xh,kch,cj) values ('0000005','D103',60)
Insert into CJ(xh,kch,cj) values ('0000006','D104',30)
Insert into CJ(xh,kch,cj) values ('0000007','D105',99)

Insert into KC(kch,kcmc,rkjs,xf) values ('D101','数据库','张少华',32)
Insert into KC(kch,kcmc,rkjs,xf)  values ('D102','数据结构','杨柳',48)
Insert into KC(kch,kcmc,rkjs,xf)  values ('D103','C++','王建',48)
Insert into KC(kch,kcmc,rkjs,xf)  values ('D104','计算机网络','吴敏',64)
Insert into KC(kch,kcmc,rkjs,xf)  values ('D105','网络协议','李燕',32)

USE XSGL
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000001','李华','土木工程','男',588,'13234567802','无照片','无备注',1.78,2003-12-09,'否')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000002','刘小燕','信息安全','女',601,'13234567802','有照片','无备注',1.58,2002-01-08,'是')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000003','张强','软件工程','男',590,'13234567803','无照片','有备注',1.80,2004-10-07,'否')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000004','吴梅','土木工程','女',607,'13234567804','有照片','无备注',1.67,2003-09-16,'是')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000005','李大壮','金融','男',578,'13234567805','有照片','无备注',1.89,2004-07-07,'否')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000006','王春春','物联网','女',690,'13234567806','有照片','有备注',1.67,2002-01-09,'否')
Insert into XS(xh,xsname,zyname,xb,rxcj,sjh,ZP,bz,sg,csrq,dy) values ('0000007','何小华','物联网','男',540,'13234567807','无照片','无备注',1.79,2003-05-26,'是')

### 关于 SQL Server 中的数据定义功能 (DDL) SQL Server 提供了一组强大的工具用于管理和监控数据定义语言(Data Definition Language, DDL)事件。这些事件涵盖了数据库结构的变化操作,例如创建、修改或删除表、视图、索引等对象的操作。 #### 服务器级别与数据库级别的 DDL 审核 通过启用 SQL Server 的审计功能,可以捕获并记录所有的 DDL 操作。这不仅有助于跟踪变更历史,还能增强安全性以及合规性管理。具体来说: - **服务器级 DDL 事件**:这类事件涉及整个实例范围内的架构更改活动。例如,当管理员在一个特定的 SQL Server 实例上新增加了一个登录账户或者移除了某个现有用户时,此类动作会被视为一种服务器层面的 DDL 变更[^1]。 - **数据库级 DDL 事件**:相比之下,这种类型的事件仅限于指定数据库内部发生的结构调整行为。比如,在某数据库里新建一张表格或是调整已存在列属性的过程都属于这一范畴。 以下是两个简单的例子展示如何利用触发器机制实现基本的 DDL 控制逻辑: ```sql -- 创建一个捕捉 CREATE_TABLE 和 ALTER_TABLE 动作的日志记录表 CREATE TABLE ddl_log ( EventTime DATETIME, EventType NVARCHAR(100), TSQLCommand NVARCHAR(MAX) ); GO -- 设置针对当前数据库所有 create_table 或 alter_table 请求的通知处理程序 CREATE TRIGGER track_ddl_changes ON DATABASE FOR CREATE_TABLE,ALTER_TABLE AS BEGIN INSERT INTO dbo.ddl_log VALUES(GETDATE(), EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(max)'), EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')); END; ``` 上述脚本首先建立了一个名为 `ddl_log` 的日志表用来保存每次发生相关联的 DDL 活动的具体细节;接着定义了一个基于数据库的对象——即触发器 `track_ddl_changes` ,它会在任何满足条件的情况下自动执行并将相应信息插入到前面提到的那个日志表当中去。 另外值得注意的是,如果需要进一步探索有关 CDC(Change Data Capture)方面的知识,则可以通过调用系统存储过程如 `sys.sp_cdc_help_change_data_capture` 来获取更多关于变化数据捕获配置的信息[^2]。 最后提醒一下各位同学,在实际动手实践之前最好先仔细阅读官方文档及相关资料,这样能够有效避免一些常见的错误陷阱,提高学习效率[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值