① 数据库中Triggers的作用已经用法
TRIGGERS表提供了关于触发程序的信息。
必须有SUPER权限才能查看该表。
TRIGGER_SCHEMA和TRIGGER_NAME列中分别含有相应数据库的名称以及触发程序的名称,在该数据库中,含有该触发程序。
Mysql 5.1包含对触发程序的支持。触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。例如,下述语句将创建1个表和1个INSERT触发程序。触发程序将插入表中某一列的值加在一起:
mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;
CREATE TRIGGER语法
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与TEMPORARY表或视图关联起来。
trigger_time是触发程序的动作时间。它可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。
trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
· INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
请注意,trigger_event与以表操作方式激活触发程序的SQL语句并不很类似,这点很重要。例如,关于INSERT的BEFORE触发程序不仅能被INSERT语句激活,也能被LOAD DATA语句激活。
可能会造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...语法:BEFORE INSERT触发程序对于每一行将激活,后跟AFTER INSERT触发程序,或BEFORE UPDATE和AFTER UPDATE触发程序,具体情况取决于行上是否有重复键。
对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。例如,对于某一表,不能有两个BEFORE UPDATE触发程序。但可以有1个BEFORE UPDATE触发程序和1个BEFORE INSERT触发程序,或1个BEFORE UPDATE触发程序和1个AFTER UPDATE触发程序。
DROP TRIGGER语法
DROP TRIGGER [schema_name.]trigger_name
舍弃触发程序。方案名称(schema_name)是可选的。如果省略了schema(方案),将从当前方案中舍弃触发程序。
② 数据库触发器有什么作用
触发器的作用:
自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。
同步实时地复制表中的数据。
实现复杂的非标准的数据库相关完整性规则。
可在写入数据表前,强制检验或转换数据。
触发器发生错误时,异动的结果会被撤销。
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令 (INSTEAD OF)。
(2)数据库触发进程扩展阅读:
分类
SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。
DML触发器
当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。
DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
DDL触发器
它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。
它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
登录触发器
登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。
因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。
参考资料来源:网络-触发器
③ 在数据库里怎么使用触发器
触发器是一类特殊的存储过程,开发人员也可以定义、编写符合业务需求的触发器来维护数据的完整性。触发器的控制流程及控制语句与存储过程相同,但触发器与存储过程还是有相当大的差别,触发器的定义格式及开启方式与存储过程不同,作为数据管理员或编程人员,熟练掌握触发器的用法对维护、操作数据库非常重要。基本语法1.创建触发器语法格式创建语法:CREATETRIGGER+触发器名称+触发时间点+触发事件+ON+表名+FOREACHROWBEGIN…END其中,触发时间点:BEFORE或AFTER,指明是在触发事件之前还是之后执行。
触发事件:INSERT、UPDATE、DELETE事件。例如,以下语句创建一个名字叫upd_check的触发器,其在对account表作更新(UPDATE)操作之前(BEFORE)自动触发。
CREATETRIGGERupd_…END2.删除触发器语法格式DROPTRIGGER+触发器名称3.触发器案例用tab.sql脚本创建表环境,然后用下面语句创建触发器。当往tab1表添加记录后将触发此触发器,将此新记录同时插入tab2表中。
DELIMITER//DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_(tab2_id)values(new.tab1_id);END;//DELIMITER;当用下面语句往tab1表插入记录时,tab2表中同时也添加了同样的记录,如图tab1数据表
tab1数据表
tab2数据表
INSERTINTOtab1(tab1_id)values(')
tab.sql
④ 数据库正在被另一个进程使用问题,怎么解决
别用附加数据了。。将数据库备份成bak文件,然后新建一个数据库,完全覆盖就ok了。。这种情况是你的数据库正在使用
⑤ SQl中触发器怎样执行的
先给你举个触发器的实例:
先创建两个表
Create
Table
Student(
--学生表
StudentID
int
primary
key,
--学号
....
)
Create
Table
BorrowRecord(
--学生借书记录表
BorrowRecord
int
identity(1,1),
--流水号
StudentID
int
,
--学号
BorrowDate
datetime,
--借出时间
ReturnDAte
Datetime,
--归还时间
...
)
创建触发器
Create
Trigger
truStudent
On
Student
--在Student表中创建触发器
for
Update
--为什么事件触发,在这里就是修改的时候会执行这个触发器,一旦你修改Student表,就会执行
As
--事件触发后所要做的事情
if
Update(StudentID)
begin
Update
BorrowRecord
Set
StudentID=i.StudentID
From
BorrowRecord
br
,
Deleted
d
,Inserted
i
--Deleted和Inserted临时表
Where
br.StudentID=d.StudentID
end
⑥ 数据库操作时什么时候使用触发器、什么时候使用程序控制
你可以在触发器里设置时间比较,例如,下面的例子说明中午12点以后才触发。
SQL> create table test1
2 (
3 a number(10)
4 )
5 ;
Table created.
SQL>
SQL> create table test2
2 (
3 a number(10)
4 )
5 ;
Table created.
SQL> create or replace trigger test1_insert
2 after insert on test1
3 for each row
4 declare
5 -- local variables here
6 begin
7
8 If to_number(to_char(sysdate , 'hh24')) > 12 Then
9 insert into test2 values (:new.a);
10 end if ;
11
12 end test1_insert;
13 /
Trigger created.
SQL> select to_number(to_char(sysdate , 'hh24')) from al ;
TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))
----------------------------------
14
SQL> insert into test1 values (1) ;
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test2 ;
A
----------
1
SQL> select to_number(to_char(sysdate , 'hh24')) from al ;
TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))
----------------------------------
4
SQL> insert into test1 values (2) ;
1 row created.
SQL> select * from test2 ;
A
----------
1
⑦ 数据库中触发器的作用是什么
触发器是数据库提供给程序员和数据分析员来保证数据完整性的一种机制,它是一种与数据表事件相关的特殊的存储过程。触发器的执行不是由程序调用,也不需要手工开启,而是由数据表上的事件来触发,当用户对一个数据表进行增、删、改操作时就会激活它执行。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。
触发器功能强大,可以轻松可靠地实现许多复杂的功能,但也不能过于依赖触发器,滥用触发器会造成关系数据库及应用程序维护困难,性能、效率低下等问题的产生,在实际问题中,要根据实际需要选择合适的解决方案。触发器是一种特殊的存储过程,在插入、删除、修改特定表中的数据时触发执行,拥有比数据库本身更强大的数据控制能力,其作用有以下四大方面。
1.数据安全数据安全主要是指对信息系统中的业务数据提供一种数据变更的审核机制,当其通过安全策略的审核后,允许用户变更相关数据,否则直接拒绝数据变更的请求。
安全原理:基于数据库的值使用户具有操作数据库的某种权利。
((1)可以基于时间限制用户的操作。例如,不允许下班后和节假日修改数据库数据。
(2)可以基于数据库中的数据限制用户的操作。例如,不允许股票价格的升幅一次超过10%。
2.数据审计数据审计主要是指对数据服务器上的记录进行变更时的一种用户权限的即时审查与用户行为的全方位记录,以便事后对数据变更过程的追溯,保证数据变更的合法性。
审计原理:跟踪用户对数据库的操作。
((1)审计用户操作数据库的语句。
(2)把用户对数据库的更新写入审计表。
3.数据约束数据约束是指对用户的操作行为将导致业务数据与实际情况相悖的行为进行检查约束,而不让其发生,从而保证数据的完整性与一致性。
约束原理:对用户操作与实际逻辑的约束检查。
((1)实现数据完整性检查和约束。例如,回退任何企图买进超过自己资金的货物。
(2)提供可变的缺省值。
4.数据连环更新数据连环更新是指当对数据进行更新操作时,将所有与此数据相关联的数据作联合的更新操作,以保证数据的完整性与一致性。
连环更新原理:对关联数据作联合更新操作。
((1)修改或删除时级联修改或删除其他表中与之匹配的行。
(2)修改或删除时把其他表中与之匹配的行设成NULL值。
(3)修改或删除时把其他表中与之匹配的行级联设成缺省值。
⑧ 数据库变化能否触发应用程序
很简单,只要扫描数据库的操作记录。就是那个用于恢复数据库的记录。
当看到有新的记录时,就说明有了某种操作。
要不就是在自己设计数据库,给他分配一个中断。
要得到这种信息,就只有这两种办法,要么中断,要么扫描。
朋友,SQL就是一种查询语言,就是要你去询问,它才有信息返回给你。如果你要服务器主动发数据库改变的信息给你,除非你在服务器端安装自己设计(过程化的,区别于SQL的非过程)的程序。
mysql当然没有这种功能。
如果你是实时的,那可以每段时间就要求服务器发送记录表给你的终端,你再扫描表。
⑨ 请问:数据库中的触发器是用来做什么的
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。
触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。
使用触发器的优点
触发器的优点如下:
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣
⑩ 关于SQLserver数据库的进程问题
一般来说SQL的进程有几个
SQL
BROWSER
你的客户端连接的进程
SQLSERVR你的数据库实例的主服务
SQLWB
这是你启动MANAGER
STUDIO后产生的进程
SQLWRITER
省略
SQLAGENT
省略
似乎是这些,我也记不清楚了
如果你设置成手动,那么你设置的这些服务不会启动,但是进程上会存在。特别是SQLSERVR(其他的我没注意),此时你观察它的内存使用量,虽然不算特别大,但是也够大了。但你启动你的SQL
SERVER时,内存使用量会增加很多。(我理解是此时连接了你的服务器,所以要占用内存)
而当你关闭了SQLSERVER以后,内存使用量并不会减少太多,说明你的服务器依旧在运行。
所以根据我的这个观察,我觉得,你将
服务设置手动,只是设置了该服务器的实例不会自动运行。而不是SQL
SERVER这个软件不会自动运行。
如果真的要全部停止服务的话。似乎你用SQL
SERVER
CONFIGURATION
来设置服务应该可以实现你的要求/