34,576
社区成员
发帖
与我相关
我的任务
分享
CREATE DATABASE s;
USE s;
CREATE TABLE student
(
stu_ID VARCHAR(8)PRIMARY KEY,
stu_name VARCHAR(10)NOT NULL,
stu_sex VARCHAR(6)NOT NULL,
stu_birth DATETIME,
class VARCHAR(4)NOT NULL,
stu_email VARCHAR(40)
)
drop table student
INSERT INTO student VALUES('101','李明','女','1983-09-18','11','liming@163.com')
INSERT INTO student VALUES('102','王二','男','1984-01-01','11','wanger@163.com')
INSERT INTO student VALUES('103','李开','男','1984-01-01','11','likai@163.com')
--来检查学生的邮箱地址是否相同,如果相同,输出'inserting fail',并且回滚事务;如果不相同,则插入成功。
CREATE TRIGGER student_insert
ON student
AFTER INSERT
AS
IF exists (SELECT stu_email FROM inserted a where a.stu_email in (select stu_email from student))
BEGIN
PRINT 'Inserting fail'
ROLLBACK
END
ELSE
BEGIN
PRINT 'Inserting success'
END
DROP TRIGGER student_insert
INSERT INTO student VALUES('114','lengbing','女','1985-12-12','11','1lengbingssh@sina.com')
select * from student
create table student
(stu_ID VARCHAR(8)PRIMARY KEY,
stu_name VARCHAR(10)NOT NULL,
stu_sex VARCHAR(6)NOT NULL,
stu_birth DATETIME,
class VARCHAR(4)NOT NULL,
stu_email VARCHAR(40))
INSERT INTO student VALUES('101','李明','女','1983-09-18','11','liming@163.com')
INSERT INTO student VALUES('102','王二','男','1984-01-01','11','wanger@163.com')
INSERT INTO student VALUES('103','李开','男','1984-01-01','11','likai@163.com')
create trigger student_insert
on student for insert
as
begin
if exists(select 1 from inserted
where stu_email in
(select a.stu_email
from student a
left join inserted b on a.stu_ID=b.stu_ID
where b.stu_ID is null))
begin
print 'Inserting fail'
rollback transaction
end
else
begin
print 'Inserting success'
end
end
-- 插入一个不同E-mail的数据
INSERT INTO student VALUES('114','lengbing','女','1985-12-12','11','1lengbingssh@sina.com')
/*
Inserting success
(1 row(s) affected)
*/
select * from student
/*
stu_ID stu_name stu_sex stu_birth class stu_email
-------- ---------- ------- ----------------------- ----- ----------------------------------------
101 李明 女 1983-09-18 00:00:00.000 11 liming@163.com
102 王二 男 1984-01-01 00:00:00.000 11 wanger@163.com
103 李开 男 1984-01-01 00:00:00.000 11 likai@163.com
114 lengbing 女 1985-12-12 00:00:00.000 11 1lengbingssh@sina.com
(4 row(s) affected)
*/
-- 插入一个相同E-mail的数据
INSERT INTO student VALUES('115','lengbing','女','1985-12-12','11','likai@163.com')
/*
Inserting fail
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
*/
select * from student
/*
stu_ID stu_name stu_sex stu_birth class stu_email
-------- ---------- ------- ----------------------- ----- ----------------------------------------
101 李明 女 1983-09-18 00:00:00.000 11 liming@163.com
102 王二 男 1984-01-01 00:00:00.000 11 wanger@163.com
103 李开 男 1984-01-01 00:00:00.000 11 likai@163.com
114 lengbing 女 1985-12-12 00:00:00.000 11 1lengbingssh@sina.com
(4 row(s) affected)
*/
CREATE TRIGGER student_insert
ON student
AFTER INSERT
AS
IF (SELECT count(stu_email) FROM student
where stu_email in (select stu_email from inserted )) >=2 --个数大于等于2 ,说明导致了重复
BEGIN
PRINT 'Inserting fail'
ROLLBACK
END
ELSE
BEGIN
PRINT 'Inserting success'
END