sql修改約束語法練習


--以系統管理員身份登錄到SQL Server服務器,並使用T-SQL語句實現以下操作;
--1. 將stu數據庫中student表的sno定義為主鍵;
alter table [student] add constraint PK_student primary key (sno)
--2. 將數據庫stu的表course的cno字段定義為主鍵,約束名稱為cno_pk;
alter table [course] add constraint cno_pk primary key (cno)
--3. 為表course中的字段cname添加唯一值約束;
alter table [course] add constraint UQ_course_name unique (cname)
--alter table[course] drop constraint UQ_canme
--4. 將數據庫stu的表sc的sno及cno字段組合定義為主鍵,約束名稱為sc_pk;
alter table[sc] drop constraint PK_sc
alter table[sc] add constraint PK_sc primary key(sno,cno)
--5. 對於數據表sc的sno、cno字段定義為外碼,使之與表student的主碼sno及表course的主碼cno對應,實現如下參照完整性:
alter table[sc]
add constraint FK_sc_sno foreign key(sno) references student(sno)
alter table[sc]
add constraint FK_sc_cno foreign key(cno) references course(cno)
--1) 刪除student表中記錄的同時刪除sc表中與該記錄sno字段值相同的記錄;
create trigger s_c
on student after delete
as
begin
declare @preid char(9);
select @preid=sno from deleted;
delete sc where sno=@preid
end;
--2) 修改student表某記錄的sno時,若sc表中與該字段值對應的有若干條記錄,則拒絕修改;
create trigger modify_sno_rule
on student for insert
as
begin
declare @m_id char(9);
declare @num int;
select @m_id=sno from inserted;

end;
--3) 修改course表cno字段值時,該字段在sc表中的對應值也應修改;
----4) 刪除course表一條記錄時,若該字段在在sc表中存在,則刪除該字段對應的記錄;
--5) 向sc表添加記錄時,如果該記錄的sno字段的值在student中不存在,則拒絕插入;
--6. 定義check約束,要求學生學號sno必須為9位數字字符,且不能以0開頭,第二三位皆為0;
alter table [student] add constraint CK_sno1 check(sno like'[1-9][0][0][0-9][0-9][0-9][0-9][0-9][0-9]')
--7. 定義stu數據庫中student表中學生年齡值在16-25范圍內;
alter table student add constraint CK_age check(sage between 16 and 25)
--8. 定義stu數據庫中student表中學生姓名長度在2-8之間;
alter table student add constraint CK_name_length check(sname like'__'|'___'|'____'|'_____'|'______'|'_______'|'________')
--9. 定義stu數據庫中student表中學生性別列中只能輸入“男”或“女”;
alter table student add constraint CK_sex check(ssex like'男'|'女')
--10. 定義stu數據庫student表中學生年齡值默認值為20;
alter table student add constraint DF_age default(20) for Sage
--11. 修改student表學生的年齡值約束可以為15-30范圍內;
alter table student drop constraint CK_age
alter table student add constraint CK_age check(sage between 15 and 30)
--12. 刪除上述唯一值約束、外鍵約束及check約束;
alter table [course] drop constraint UQ_course_name
alter table [student] drop constraint CK_sno1
alter table student drop constraint CK_age
alter table student drop constraint CK_name_length
--13.向sc表中插入或修改一條記錄時,通過觸發器檢查記錄學號字段的值在student表中是否存在,
--同時還要檢查課程號的值是否存在若不存在,則取消插入或修改,否則插入成功;執行對sc的插入、修改操作,驗證觸發器的執行。
create trigger logic1 on student
for insert or update

--14.設計一更新觸發器,當course表中的cno列修改時,激活該觸發器同時更新sc表中的記錄。
--15.設計一觸發器,約束數據庫系統課程的課容量為80。
--16.選做題:設計實例,驗證after觸發器與instead of觸發器的異同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM