课上实训 3个表+16道题
police(pno警号,pid身份证号)
文章图片
pcase(cno案件编号,cname案件名称,ctype案件类型,cbrief案件简介)
文章图片
pc(pno警号,cno案件编号,ptime出警时间)
文章图片
1.请用SQL 语句和对象资源管理器两种方法定义Police表的主键Pno;删除已经输入的某一记录的主键值,分析:为什么Pno置为‘’没有违反非空约束?
alter table police
add constraint pno_pk primary key(pno)
文章图片
‘’看着是空值,实际并不是,实际上是varchar类型,比如一个简单的python语句即可说明
文章图片
2.检查语句:update Police set Pno= NULLwhere Pno=‘100001’,分析其是否正确?
不正确,pno是主键,不允许为空值
3.将案件表Case的Cno字段定义为主键,约束名称为Cno_pk;
alter table pcase
add constraint Con_pk primary key(cno)
文章图片
4.为Case表中的字段Cname添加唯一值约束;
alter table pcase
add constraint Cname_pk unique(cname)
文章图片
5.将PC表的Pno及Cno字段组合定义为主键,约束名称为PC_pk;
alter table pc
add constraint PC_pk primary key(pno,cno)
文章图片
6.对于数据表PC的Pno、Cno字段定义为外码,使之与Police表的主码Pno及表Case表的主码Cno对应,通过数据库关系图实现如下参照完整性:
(1)删除Policeman表中记录的同时删除PC表中与该记录Pno字段值相同的记录;
(2)修改Case表Cno字段值时,该字段在PC表中的对应值也应修改。
create table pc1
(pno varchar(10),
cno varchar(12),
foreign key(pno) references police(pno)
on delete cascade,
foreign key(cno) references pcase(cno)
on update cascade
)
文章图片
7.定义check约束,要求警号Pno必须为6位数字字符,6位数字字符都在0~9中取值;
alter table police
add constraint tel_pk check(pno like ('[0-9][0-9][0-9][0-9][0-9][0-9]'))
文章图片
8.定义Police表中警员年龄Page在18~60范围内取值;
alter table police
add constraint age_pk check(page>17 and page<61)
文章图片
9.定义Police表中警员性别列Psex中只能输入“男”或“女”;
alter table police
add constraint sex_pk1 check(psex in ('男','女'))
文章图片
10.定义Police表中警员性别默认值为“男”;
【SQL数据库|SQL数据库实操 第五波 完整性约束和触发器】alter table police
add constraint sex_pk default '男' for psex
文章图片
11.删除Police表的年龄范围的约束条件;
alter table police
drop constraint age_pk
文章图片
12.修改Police表警员的警号必须为6为数字字符的约束,改为7位0-9之间的数字字符;
alter table police
drop constraint tel_pk;
alter table police
add constraint tel_pk check(pno like ('[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'));
这里我失败了,sql语句没有出错,drop删除约束能正常运行,但是创建7位数字字符约束时失败了
文章图片
csdn上说要么删除数据,要么手动创建约束,把“在创建或重新启用时检查现有数据”默认为“是”把它设置为 否
13.删除在cases表上设置的唯一值约束、以及police表上设置的所有check约束;
alter table pcase
drop Cname_pk;
alter table police
drop constraint age_pk,sex_pk,sex_pk1,tel_pk;
文章图片
14.在Police表建立触发器T1,要求:当在警员信息中添加、删除或修改信息后,显示各不同警衔的警员人数;
create trigger T1 on police
after delete,insert,update
as
begin
select prank,count(prank) from police group by prank
end
文章图片
验证成功
文章图片
15.建立触发器T2,要求Police数据表中禁止删除“100001”警号的警员信息,分析当建立触发器语句中存在rollback transaction与否的区别;
create trigger T2 on police
instead of delete
as
if exists (select * from deleted where pno='100001')
begin
print'no!'
rollback transaction
end
文章图片
验证成功
文章图片
如果建立触发器语句中不存在rollback transaction,即不能回滚,就是删除了之后也不能倒回去,不能实现禁止删除的功能,当建立触发器语句中存在rollback transaction时,就可以在触发事件后回滚到原来的状态,实现了禁止删除的功能
16.创建触发器T3实现向Police表中插入数据时查询全部数据。
create trigger T3 on police
for insert
as
begin
select * from police
end
文章图片
验证成功
文章图片
推荐阅读
- 数据库|Oracle数据库
- mysql|阿里一面(SQL 优化有哪些技巧)
- MySql|MySQL之四种SQL性能分析工具
- php|PHP与MySQL数据库——连接数据、插入数据、删除数据、返回结果集
- CockroachDB|CockroachDB: The Resilient Geo-Distributed SQL Database 论文阅读笔记
- 数据库|MySQL之DDL操作表
- 数据库|MySql -- 不存在则插入,存在则更新或忽略
- 计算机毕业设计|计算机毕业设计android的图书馆图书借阅座位预订app(源码+系统+mysql数据库+Lw文档)
- android|计算机毕业设计Android安卓医院挂号预约系统软件app(源码+系统+mysql数据库+Lw文档)