一、触发器:特殊的存储过程

分为三种:insert、delete、update
insert触发器用到临时表:inserted存放的是新数据
delete触发器用到临时表:deleted存放的是旧数据
update触发器用到临时表:inserted、deleted
临时表--撤消rollback(回滚)、提交commit(硬盘默认)
1、创建触发器:
create trigger 触发器名称
on 表名 for 操作
as
begin
SQL语句
end
实例:禁止任何人向YG表中插入数据
create trigger tri01
on YG for insert
as
begin
if exists(select * from inserted)
begin
rollback
print '不允许插入新记录'
end
end
测试:
2、暂时关闭触发器
alter table YG disable trigger tri01
3、开启触发器
alter table YG enable trigger tri01
实例:禁止删除男同志记录
create trigger tri02
on YG for delete
as
begin
if exists(select * from deleted where 性别='男')
begin
rollback
print '禁止删除男同志记录'
end
end
作业:A、禁止更新YG表的数据
B、创建users表和count表
触发器、约束、用户、计算机名不一致的处理_约束
说明:当向users表中插入记录时,count表中的内容要跟着变化
create trigger tri00
on student for insert
as
begin
if exists(select * from inserted)
begin
update count set 人数=人数+1 where 性别 = (select users.性别 from inserted)
end
end

二、其他约束方法:check、 unique 、主键、外键

1、check保证记录取值的合法范围
例如:性别只能是男和女
右击表--修改--右击--check约束--添加--表达式--性别="男" or 性别="女"--表设计器:在创建或重新启动选'否'
2、unique确保记录的唯一性
右击表--修改--索引/键--常规--类型列是否唯一

三、用户

实例:创建一个windows用户ngq对yuangong表只能读
xp_cmdshell 'net user ngq ngq /add'
1、创建SQL用户:
A、数据库--安全性--登录名--去勾:强制实施密码
B、dufei数据库下--安全性--用户
2、复制(同步)
server1                  server2
DB1 发布/分发            订阅DB1
YG                      YG
出版社
触发器、约束、用户、计算机名不一致的处理_lesson_02
cmd -- services.msc -- 重启SQL Server、SQL Server agent
注:一台机器上用别的机器服务:连接--数据库引擎
修改sa的密码:
安全性--登录名--sa --密码
server1中:
复制--本地发布--右击新建发布 --
server2
进程帐户:server1\administrator
server2中:
复制 -- 本地订阅 -- 右击新建订阅--进程帐户:server1\administrator
说明:三种复制方法:
A、快照:体积大、速度慢、单向
B、事务:体积小、速度快、单向
C、合并:双向复制

四、计算机名不一致的解决方法

if serverproperty('servername')<>@@servername
begin
declare @server sysname
set @server=@@servername
exec sp_dropserver @server=@server
set @server=cast(serverproperty('servername') as sysname)
exec sp_addserver @server=@server,@local='local'
end
说明:select @@servername