浅谈sql server和 mysql触发器
因为最近出现了人员插入错误数据,找到了一个触发器,来解决问题。
触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。 所以触发器可以用来实现对表实施复杂的完整性约束。
sql server 中触发器分为instead of 和 after 触发器。
SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。
instead of 触发器我还没用到,网上有讲解,需要时再去查看。
after 触发器是用来对表操作之后又记录或者防止某种错误行为而产生的。after trigger 会生成两个表格,一个是inserted 一个是deleted 两个表。
这两个表由系统来维护,它们存在于内存中而不是在数据库中,可以理解为一个虚拟的表。
这两个表的结构总是与被该触发器作用的表的结构相同。
触发器执行完成后,与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。
对表的操作 Inserted逻辑表 Deleted逻辑表
增加记录(insert) 存放增加的记录 无
删除记录(delete) 无 存放被删除的记录
修改记录(update) 存放更新后的记录 存放更新前的记录
下面是after 3个实例
这是insert
CREATE TRIGGER [dbo].[testtrigger]
   ON  [dbo].[Staff]
   AFTER insert
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @StaffId varchar(24),@staffName varchar(24),@gender varchar(24),@address varchar(24);
    -- Insert statements for trigger here
SELECT @StaffId = staffID,@staffName = staffName,@gender = gender,@address = address FROM inserted
INSERT INTO dbo.CopyStaff values(@StaffId,@staffName,@gender,@address)
if(@StaffId=@staffName)
begin raiserror('重新插入',16,2);
rollback
endEND
这里面的rollback 返回不允许插入。也就是防止某种错误的发生。
delete
CREATE TRIGGER [dbo].[deletetrigger]
   ON [dbo].[Staff]
   AFTER delete
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Print’數據備份中’
insert into CopyStaff(staffID,staffName,gender,addr) select * from deleted
    -- Insert statements for trigger hereENDGO
update 
CREATE TRIGGER [dbo].[updatetrigger]
   ON  [dbo].[Staff] 
   AFTER update
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @date datetime
select @date = GETDATE()
SET NOCOUNT ON;
print'修改備份'
insert into copystaff(staffID,staffName,gender,addr) select staffID,staffName,gender,@date from deleted
    -- Insert statements for trigger hereENDGO做完一些操作,就会发现,如果对这次操作有什么联动想法,或者是对操作进行判断可以相当于inserted 和deleted 是两张表,在begin 和 end 之间进行操作的判断和记录。/ 和 \用法:
在最近突然发现为什么有的地方使用\ 有的地方使用/ 是不是有着某种规律。总结了以下几点。
/ 斜杠
1.最常见的就是浏览器分层就是用/
2.在xml和html 结束时都是斜杠/
<div></div>
3,代码中使用的注释都是/
4,日期都是用的/ 2012/12/24
\反斜杠
1,window 系统中使用的文件路径
F:\BT中轉資料夾\BTSOFT
2,在window中在子类中都是用\
3,\r,\n,\t 这些转义字符
redis 学习
redis 是微型数据库sql 储存在内存中,使数据传输变得快速
首先是安装Redis,从网站中下载redis安装
支持