SQL server 笔记9(备份还原触发器事务三范式)

------备份还原 --右键数据库---任务
--备份:在不影响数据库正常运行的情况下,将数据备份到一个.bak结尾的文件夹
--还原:将bak文件还原到数据库

-----分离、附加
--分离:将数据库与数据库服务进行分离
--附加:将数据库mdf文件,附加到数据库服务上


--触发器:一种特殊的存储过程  特殊的地方在于,触发器是通过对数据库表的操作来引发 触发的动作只有‘增删改’
--存储过程是通过exec人为执行

create trigger student_insert --创建触发器
on student --指定触发器所在的表
for insert --当执行insert的操作时,自动的触发触发器,for和alter都是在操作后执行,也可以改成alter
as
    update student set ssex='' where sno=103
go

select*from student

create trigger student_delete
on student
instead of delete --替换某个操作,用触发器的过程来替换删除的操作,不再能够删除student表数据
as
    update student set sbirthday='2015-4-29' where sno=105
go

delete from student

--create trigger 触发器名
--on 表名
--(for/alter/instead of)+动作(insert/delete/update/)
--as
--    存储过程内容
--go
--for/alter 先执行操作,再触发触发器
--instead of 直接替换操作

--drop trigger 触发器名  删除触发器



--触发器中的临时表:deleted,inserted
create trigger course_delete
on course
instead of delete
as
    select *from deleted
go
delete from course
--deleted是一个临时表,里面存储着你要删除的那些数据
create trigger course_delete
on course
instead of delete
as
    delete from score where cno in(select cno from deleted)
    delete from course where cno in(select cno from deleted)
go

--删除前先备份数据到备份表之后再删除


--事务:保障整个流程的完整执行,全部没有问题,统一提交,一旦有问题回到原点
begin tran --事物开始
--开始写流程语句
--语句写完之后
if @@ERROR>0  --@@ERROR存储语句中的错误编号,没有错误是0
rollback tran--回滚事物
else
commit tran--提交事物


-----数据库设计三范式
--1.每一列里面的值都是单一的
--2.满足1,每个表都要有主键
--3.满足2,外键表中只出现主键表中的主键列,其他列不要出现。当一个表中出现了三列及以上的数据经常出现重复时,就需要把这些列拿出来单独建一个表
--设一个主键,然后在原来表中只出现主键就可以了
原文地址:https://www.cnblogs.com/happinesshappy/p/4466888.html