MySQL基础知识09触发器

id

1

 


 

3、update,会将新数据放在inserted表里,老多少放在deleted表里

update #t
set name='new value'
OUTPUT deleted.id,deleted.name,inserted.id,inserted.name  
where id=2

insert into MyTest4 (id ,fname ,lname , salary) values

3.1. 触发器的应用的例子

 

 

假如存在以下数据表:

mysql>  create table history (id integer auto_increment primary key, old_value varchar(100), new_value varchar(100), time timestamp);

Query OK, 0 rows affected (0.02 sec)

 

mysql> create table test1 ( value varchar(100) primary key);

Query OK, 0 rows affected (0.03 sec)

 

需求:

动用history表来记录test1表的记录的换代历史图景。

 

消除办法:

创办五个触发器:

(1)触发器1:在test1表新扩充记录时,向history数据表插入一条记下,记录初阶值。

(2)触发器2:在test1表修改记录时,向history数据表插入一条记下,记录旧值和新值。

(3)触发器3:在test1表删除记录时,向hisotry数据表插入一条记下,记录最终的值。

 

 

触发器1:

drop trigger if exists tr_p0;

delimiter $$

create trigger tr_p0 before insert

on test1 for each row

begin

 insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

end;

$$

delimiter ;

 

 

触发器2:

drop trigger if exists tr_p1;

delimiter $$

create trigger tr_p1 before update

on test1 for each row

begin

 insert into history (old_value,new_value,time) values (OLD.value, NEW.value, current_timestamp());

end;

$$

delimiter ;

 

 

触发器3:

drop trigger if exists tr_p2;

delimiter $$

create trigger tr_p2  before delete

on test1 for each row

begin

 insert into history (old_value,new_value,time) values (OLD.value, NULL, current_timestamp());

end;

$$

delimiter ;

 

 

测验结果:

mysql> insert into test1 values ('001');

Query OK, 1 row affected (0.01 sec)

 

mysql> select * from test1;

-------

| value |

-------

| 001   |

-------

1 row in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

---- ----------- ----------- ---------------------

1 row in set (0.00 sec)

 

mysql> insert into test1 values ('002');

Query OK, 1 row affected (0.01 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

---- ----------- ----------- ---------------------

2 rows in set (0.00 sec)

 

mysql> update test1 set value='A001' where value='001';

Query OK, 1 row affected (0.03 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

| 17 | 001       | A001      | 2017-08-29 11:50:27 |

---- ----------- ----------- ---------------------

3 rows in set (0.00 sec)

 

mysql> select * from test1;

-------

| value |

-------

| 002   |

| A001  |

-------

2 rows in set (0.00 sec)

 

mysql> update test1 set value='A001B' where value='A001';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql> select * from test1;

-------

| value |

-------

| 002   |

| A001B |

-------

2 rows in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

| 17 | 001       | A001      | 2017-08-29 11:50:27 |

| 24 | A001      | A001B     | 2017-08-29 11:50:58 |

---- ----------- ----------- ---------------------

4 rows in set (0.00 sec)

 

mysql> delete from test1 where value='A001B';

Query OK, 1 row affected (0.02 sec)

 

mysql> select * from test1;

-------

| value |

-------

| 002   |

-------

1 row in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

| 17 | 001       | A001      | 2017-08-29 11:50:27 |

| 24 | A001      | A001B     | 2017-08-29 11:50:58 |

| 31 | A001B     | NULL      | 2017-08-29 11:51:20 |

---- ----------- ----------- ---------------------

5 rows in set (0.00 sec)

 

能够看到,在行使触发器之后,history表中一度成功的记录了test1表的记录的改动历史图景。

 

 

可以在多少进行增加和删除改的时候,能够回到受影响的行。先计划一张表

假如大家有叁个名称叫MyTestDB的数据库,在那之中有三个名字为MyTest1的表,数据库和表的始建进程如下:

1. 触发器的语法结构

触发器的语法如下:

 

CREATE TRIGGER trigger_name trigger_time trigger_event

    ON tbl_name FOR EACH ROW trigger_stmt

 

其中,trigger_time的值为BEFORE只怕AFTERubicon,表示触发器的口舌在激活该触发器的口舌此前或之后试行。

trigger_event钦定激活该触发器的讲话的体系,满含以下二种:

INSERT:将新行插入到数码表中,富含INSERT、LOAD DATA 和REPLACE语句。

UPDATE:修改现成行的数额,蕴含UPDATE语句。

DELETE:删除现成数量,富含DELETE和REPLACE语句。

 

 

1、insert ,影响行在inserted表里

insert into MyTest2 select 5 , 'Tony' , 'Mcnamara' , 150300.00

3.2. 触发器和专门的学业的例子

回来结果:

(1 row(s) affected)

2. 触发器的明白

 

对于同二个数据表的同一个风云和同一个年华,不可能有三个触发器。比方,对于数据表table1,不可以有多少个BEFORE INSERT触发器,也不可能有两各AFTEEvoque INSERT触发器。然而允许有贰个BEOFRE INSERT触发器和三个AFTE本田CR-V INSERT触发器同偶尔间存在。

 

在触发器中,使用小名OLD和NEW分别引用动作爆发时的本来记录数据和新记录数据。

事件

OLD(只读)

NEW(可使用SET修改)

BEFORE INSERT

无效

将要插入的数据

AFTER INSERT

无效

已经插入的数据

BEFORE UPDATE

将要被修改的原始数据

将要代替原始数据的新数据

AFTER UPDATE

已经被修改的原始数据

已经代替了原始数据的新数据

BEFORE DELETE

将要被删除的原始数据

无效

AFTER DELETE

已经被删除的原始数据

无效

 

只要在触发器中接纳了不算的OLD或NEW,则在创设触发器时会报错。

 

(1)在INSERT触发器中不容许选择OLD。

mysql> delimiter $$

mysql> create trigger tr_p0 before insert

    -> on test1 for each row

    -> begin

    ->  insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

    ->  insert into t1 values ( concat(OLD.value, NEW.value) );

    -> end;

    -> $$

ERROR 1363 (HY000): There is no OLD row in on INSERT trigger

mysql> delimiter ;

 

(2)在DELETE触发器中不容许行使NEW。

mysql> delimiter $$

mysql> create trigger tr_p2  before delete

    -> on test1 for each row

    -> begin

    ->  insert into history (old_value,new_value,time) values (OLD.value, NEW.value, current_timestamp());

    -> end;

    -> $$

ERROR 1363 (HY000): There is no NEW row in on DELETE trigger

mysql> delimiter ;

 

 

始建触发器时,ON钦定的数据表tbl_name必需已经存在;不容许创造针对不设有的数据表的触发器。

 

TRUNCATE TABLE语句并不会触发基于DELETE事件的触发器。

 

 

USE [MyTestDB] 
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest4]')AND type in (N'U')) 
DROP TABLE [dbo].[MyTest4] 
GO 
USE [MyTestDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[MyTest4]( 
[Id] [int] NULL, 
[Fname] [varchar](100) NULL, 
[Lname] [varchar](100) NULL, 
[salary] [money] NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

4.2. 触发器中不能够促成循环触发的说话

 

在叁个触发器中,不可能富含导致触发器的循环触发的言语。上面的触发器由test1表的BEFORE INSERT事件触发,而在该触发器中推行了一条test1表上的insert语句,那将产生触发器的巡回触发,产生三个死循环。这种情景在概念触发器时纵然并不报错,可是在向test1表插入新数据时将报告贰个荒谬。

 

mysql> delimiter $$

mysql> create trigger tr_p0 before insert

    -> on test1 for each row

    -> begin

    ->  insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

    ->  insert into test1 values ( concat('001_', NEW.value) );

    -> end;

    -> $$

Query OK, 0 rows affected (0.01 sec)

 

mysql> delimiter ;

mysql>

mysql> select * from test1;

Empty set (0.00 sec)

 

mysql> select * from history;

Empty set (0.00 sec)

 

mysql> insert into test1 values ('coe2coe@qq.com');

ERROR 1442 (HY000): Can't update table 'test1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

 

 

 

id name id name




2 d 2 new value

(1 row(s) affected)

 


 

4、OUTPUT INTO 协理将数据 插入到表里

DECLARE @outputTable TABLE(name1 varchar(100),name2 varchar(100))

update #t
set name='new value 3'
OUTPUT deleted.name,inserted.name into @outputTable
where id=2

SELECT * FROM @outputTable

(1 row(s) affected)

(1 row(s) affected)

3.3. 在触发器中期维修改所在行的多寡

在触发器中得以采用SET语句修改NEW.XXX的值,进而使得数据表中的新扩张行的数码变成修改后的值。

 

drop trigger if exists tr_p0;

delimiter $$

create trigger tr_p0 before insert

on test1 for each row

begin

 set NEW.value = concat( 'coe2coe:', NEW.value);

 insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

end;

$$

delimiter ;

 

 

施行结果如下:

mysql> truncate table test1;

Query OK, 0 rows affected (0.03 sec)

 

mysql> truncate table history;

Query OK, 0 rows affected (0.02 sec)

 

mysql> insert into test1 values ('001');

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from test1;

-------------

| value       |

-------------

| coe2coe:001 |

-------------

1 row in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ------------- ---------------------

| id | old_value | new_value   | time                |

---- ----------- ------------- ---------------------

|  3 | NULL      | coe2coe:001 | 2017-08-29 13:07:56 |

---- ----------- ------------- ---------------------

1 row in set (0.00 sec)

 

能够看见,数据表test第11中学新扩展的行的value字段的值由INSERT语句中的001化为了coe2coe_001,那就是触发器中的SET语句的效率。

 

create table #t
(
    id int identity primary key 
    ,name varchar(100)
)
go

insert into MyTest1 (id ,fname ,lname , salary) values (4 , 'Liz' , 'Carleno' , 151000.00)

3.2. 触发器和事情的例证

 

当导致触发器动作的话语存在于多少个作业中时,触发器中的语句也推行在该事务中。当原始语句的政工回滚时,触发器中的语句的效应也将被回滚;当原始语句的作业提交时,触发器中的语句的效果与利益也将被交给。

 

 

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

 

mysql> insert into test1 values ('003');

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from test1;

-------

| value |

-------

| 002   |

| 003   |

-------

2 rows in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

| 17 | 001       | A001      | 2017-08-29 11:50:27 |

| 24 | A001      | A001B     | 2017-08-29 11:50:58 |

| 31 | A001B     | NULL      | 2017-08-29 11:51:20 |

| 38 | NULL      | 003       | 2017-08-29 11:53:06 |

---- ----------- ----------- ---------------------

6 rows in set (0.00 sec)

 

mysql> rollback;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test1;

-------

| value |

-------

| 002   |

-------

1 row in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ----------- ---------------------

| id | old_value | new_value | time                |

---- ----------- ----------- ---------------------

|  3 | NULL      | 001       | 2017-08-29 11:49:34 |

| 10 | NULL      | 002       | 2017-08-29 11:50:02 |

| 17 | 001       | A001      | 2017-08-29 11:50:27 |

| 24 | A001      | A001B     | 2017-08-29 11:50:58 |

| 31 | A001B     | NULL      | 2017-08-29 11:51:20 |

---- ----------- ----------- ---------------------

5 rows in set (0.00 sec)

 

 

 

OUTPUT 子句

USE [master] 
GO 
IF EXISTS (SELECT name FROM sys.databases 
WHERE name = N'MyTestDB') 
DROP DATABASE [MyTestDB] 
GO 
Create database MyTestDB 
Go 
Use [MyTestDB] 
Go 
IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[MyTest1]') 
AND type in (N'U')) 
DROP TABLE [dbo].[MyTest1] 
GO 
USE [MyTestDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[MyTest1]( 
[Id] [int] NULL, 
[Fname] [varchar](100) NULL, 
[Lname] [varchar](100) NULL, 
[salary] [money] NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

4.1. 触发器无法调用再次回到结果集的蕴藏进程

 

insert into MyTest3

4.2. 触发器中不可能形成循环触发的言辞

id name


2 b

 


 

2、delete ,影响行在deleted表里

delete from #t
output deleted.id
where id = 1

回去结果:

下边大家用第二种价值观的插入方法同样丰硕5行数据,这里运用的是带SELECT从句和UNION从句的INSERT SQL语句,脚本如下:

  1. 触发器的语法结构

  2. 触发器的精晓

  3. 触发器的例证

name1 name2


new value new value 3

(1 row(s) affected)

 

 

)

 

无差异于的,大家再固然上述的MyTestDB数据库中有表MyTest3,如下:

3.3. 在触发器中期维修改所在行的数目

id name


1 a

批量插入:

insert into #t
output inserted.*
select 'b'

假定大家在上述的MyTestDB数据库中有表MyTest2,如下:

本文首要内容如下:

insert into #t(name)
output inserted.*
values('a')

(1 row(s) affected)

4. 触发器注意事项

 


进行结果如下:

3.1. 触发器的施用的例证

最终一种情势,须要插入数据的对象是MyTestDB数据库中的表MyTest4,如下:

4.1. 触发器不能够调用重回结果集的蕴藏进程

触发器中能够调用不回来结果集的囤积进程,但是不可能调用再次回到结果集的仓库储存进程。

 

以下存款和储蓄进度不回去任何结果集,由此能够常常调用。

drop procedure if exists sp_p5;

delimiter $$

 

create procedure sp_p5()

begin

set @x='coe2coe@qq.com';

end;

$$

delimiter ;

 

触发器:

drop trigger if exists tr_p0;

delimiter $$

create trigger tr_p0 before insert

on test1 for each row

begin

 insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

 call sp_p5();

end;

$$

delimiter ;

 

施行结果:

mysql> insert into test1 values ('coe2coe@qq.com');

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from test1;

----------------

| value          |

----------------

| 002            |

| 003            |

| coe2coe@qq.com |

----------------

3 rows in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ---------------- ---------------------

| id | old_value | new_value      | time                |

---- ----------- ---------------- ---------------------

|  3 | NULL      | 001            | 2017-08-29 11:49:34 |

| 10 | NULL      | 002            | 2017-08-29 11:50:02 |

| 17 | 001       | A001           | 2017-08-29 11:50:27 |

| 24 | A001      | A001B          | 2017-08-29 11:50:58 |

| 31 | A001B     | NULL           | 2017-08-29 11:51:20 |

| 52 | NULL      | 003            | 2017-08-29 12:01:54 |

| 59 | NULL      | coe2coe@qq.com | 2017-08-29 12:03:32 |

---- ----------- ---------------- ---------------------

7 rows in set (0.00 sec)

 

借使将上述存款和储蓄进程修改为回去结果集的积存进度,则无法在触发器中调用,不然在触发该触发器时将发生错误。此种情状下,在概念触发时并不会唤起任何不当。

 

mysql> drop procedure if exists sp_p5;

Query OK, 0 rows affected (0.01 sec)

 

mysql> delimiter $$

mysql>

mysql> create procedure sp_p5()

    -> begin

    -> select 'coe2coe@qq.com';

    -> end;

    -> $$

Query OK, 0 rows affected (0.01 sec)

 

mysql> delimiter ;

mysql>

mysql> drop trigger if exists tr_p0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> delimiter $$

mysql> create trigger tr_p0 before insert

    -> on test1 for each row

    -> begin

    ->  insert into history (old_value,new_value,time) values (NULL, NEW.value, current_timestamp());

    ->  call sp_p5();

    -> end;

    -> $$

Query OK, 0 rows affected (0.02 sec)

 

mysql> delimiter ;

 

 

使用以下语句触发该触发器,则提示错误。

mysql> select * from test1;

----------------

| value          |

----------------

| 002            |

| 003            |

| coe2coe@qq.com |

----------------

3 rows in set (0.00 sec)

 

mysql> insert into test1 values ('coe2coe');

ERROR 1415 (0A000): Not allowed to return a result set from a trigger

mysql> select * from test1;

----------------

| value          |

----------------

| 002            |

| 003            |

| coe2coe@qq.com |

----------------

3 rows in set (0.00 sec)

 

mysql> select * from history;

---- ----------- ---------------- ---------------------

| id | old_value | new_value      | time                |

---- ----------- ---------------- ---------------------

|  3 | NULL      | 001            | 2017-08-29 11:49:34 |

| 10 | NULL      | 002            | 2017-08-29 11:50:02 |

| 17 | 001       | A001           | 2017-08-29 11:50:27 |

| 24 | A001      | A001B          | 2017-08-29 11:50:58 |

| 31 | A001B     | NULL           | 2017-08-29 11:51:20 |

| 52 | NULL      | 003            | 2017-08-29 12:01:54 |

| 59 | NULL      | coe2coe@qq.com | 2017-08-29 12:03:32 |

---- ----------- ---------------- ---------------------

7 rows in set (0.00 sec)

 

 

从上述结果能够看看,在接触触发器时一旦发生了不当,则导致触发器触发的原始INSERT语句也停业了,在test1表中并不会见到该INSERT新扩张的笔录,history表也尚无有关记录。

 

 

(1 row(s) affected)

  1. 触发器注意事项

union select 2 , 'Hillary' , 'Swank' , 250000.00

4.3. 触发器的频率难题

 

 

触发器的接触是依据数据表的行记录触发的,即每一行数据都会变成触发器的三次接触。当一条SQL语句导致一大波行数据变动时,将会招致大气的触发器动作。那可能会促成相比较印证的属性难点。

不符合的采纳触发器,还大概引致部分锁方面的难题。因而,除非特别须求,尽量在应用程序中完成相关职业的数目操作,实际不是利用触发器。

 

施行结果如下:

 

insert into MyTest1 (id ,fname ,lname , salary) values (2 , 'Hillary' , 'Swank' , 250000.00)

3. 触发器的事例

 

(4 , 'Liz' , 'Carleno' , 151000.00),

4.3. 触发器的作用难点

我们向表插入数据的观念意识方法有八个,介绍如下:

(1 row(s) affected)

insert into MyTest2 select 1 , 'John' , 'Smith' , 150000.00

USE [MyTestDB] 
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest3]')AND type in (N'U')) 
DROP TABLE [dbo].[MyTest3] 
GO 
USE [MyTestDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[MyTest3]( 
[Id] [int] NULL, 
[Fname] [varchar](100) NULL, 
[Lname] [varchar](100) NULL, 
[salary] [money] NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

(1 row(s) affected)

insert into MyTest1 (id ,fname ,lname , salary) values (1 , 'John' , 'Smith' , 150000.00)

当今我们要用到SQL Server 2009中提供的新办法——行值构造器的插入SQL语句为上述表插入5行数据,这种措施能够在二个INSERT语句中二遍性插入多行数据,脚本如下:

insert into MyTest1 (id ,fname ,lname , salary) values (5 , 'Tony' , 'Mcnamara' , 150300.00)

union select 3 , 'Elisa' , 'Smith' , 120000.00

insert into MyTest1 (id ,fname ,lname , salary) values (3 , 'Elisa' , 'Smith' , 120000.00)

(5 row(s) affected)

insert into MyTest2 select 4 , 'Liz' , 'Carleno' , 151000.00

(3 , 'Elisa' , 'Smith' , 120000.00),

(1 row(s) affected)

union select 4 , 'Liz' , 'Carleno' , 151000.00

select 1 , 'John' , 'Smith' , 150000.00

方法二

insert into MyTest2 select 2 , 'Hillary' , 'Swank' , 250000.00

上边大家再用别的一种价值观的插入方法一样丰富5行数据,也正是选用带SELECT从句的INSERT SQL语句,脚本如下:

union select 5 , 'Tony' , 'Mcnamara' , 150300.00

相信大家都通晓哪些使用数据操作语言(DML)对SQL Server表的数据开展插队、删除和换代等拍卖。临时候,我们必要用INSERT语句举行插队的数目实际上是多得令人胸口痛,有大多观念但麻烦的情势能够用 来插入多量数目,可是SQL Server 二零零六提供了一种能够简化数据插入进程的新措施。本文将为大家简要介绍那些用来插入数据的点子之间的区别,此中囊括SQL Server 二零零六提供的新点子——行值构造器(Row Value Constructor)。

方法一

方法三

insert into MyTest2 select 3 , 'Elisa' , 'Smith' , 120000.00

(5 row(s) affected)

实践结果如下:

(1 row(s) affected)

(5 , 'Tony' , 'Mcnamara' , 150300.00)

近年来大家用守旧的ANSI插入语句向上表增多5行数据,这里须求用到带VALUE从句的INSERT SQL语句来插入数据,脚本如下:

USE [MyTestDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest2]')AND type in (N'U')) 
DROP TABLE [dbo].[MyTest2] 
GO 
CREATE TABLE [dbo].[MyTest2]( 
[Id] [int] NULL, 
[Fname] [varchar](100) NULL, 
[Lname] [varchar](100) NULL, 
[salary] [money] NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 

实行结果如下:

(1 row(s) affected)

方法四

(1 , 'John' , 'Smith' , 150000.00),

(2 , 'Hillary' , 'Swank' , 250000.00),

(1 row(s) affected)

本文由上海时时乐走势图发布于上海时时乐走势图官网,转载请注明出处:MySQL基础知识09触发器

您可能还会对下面的文章感兴趣: