2000中的触发器使用,SQL必知必会

SQL Server 表的管住_有关数据增加和删除查改的操作的详解(案例代码)-DML

触发器是数据库应用中的重用工具,它的应用很宽泛,近日写二个化学数据总括方面的软件,必要依照采集样板,自动测算方差,在那处,小编利用了触发器。
上面笔者摘录了SQL Server官方教程中的后生可畏段关于触发器的文字,确实有用的一点文字描述。

1 创造和垄断表(CREATE)

SQL INSERT INTO 语句
INSERT INTO 语句 

1、SQL INSERT INTO 语句(在表中插入)

INSERT INTO 语句用于向表中插入新记录。

______________________________________________________________________________________________________________

1.1 创建表CREATE

采取CREATE TABLE创建表,需付出以下消息:

  1. 新表的名字,在显要字CREATE TABLE之后给出。
  2. 表列的名字和概念,用逗号分隔。
  3. 局地DBMS还须要钦定表的职位。

创设产品Products表:

CREATE TABLE Products
(
 prod_id      char(10)       NOT NULL ,
 vend_id      char(10)       NOT NULL ,
 prod_name    char(255)      NOT NULL ,
 prod_price   decimal(8,2)   NOT NULL ,
 prod_desc    text           NULL 
);

星彩彩票app下载 1

增添暗中认可值的时候,使用首要字DEFAULT。

创办订单明细OrderItems表:

CREATE TABLE OrderItems
(
 order_num    int             NOT NULL ,
 order_item   int             NOT NULL ,
 prod_id      char(10)        NOT NULL ,
 quantity     int             NOT NULL      DEFAULT 1,
 item_price   decimal(8,2)    NOT NULL 
);

星彩彩票app下载 2


INSERT INTO 语句用于向表格中插入新的行。

SQL INSERT INTO 语法

INSERT INTO 语句可以用三种样式编写。
先是个表单未有一点名要插入数据的列的名号,只提供要插入的值:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

假若要为表中的具备列增添值,则无需在SQL查询中内定列名称。可是,请确定保证值的顺序与表中的列顺序相近。INSERT INTO语法如下所示:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

能够定义几个不论哪一天用INSERT语句向表中插入数据时都会奉行的触发器。

1.2 更新表ALTER

利用ALTER TABLE更新表,要考虑:

  1. 独具特殊的优越条件图景下,不要在表中包涵数据的时候对其进展翻新,应该在创制表的时候,思量现在的扩大性,防止对表的协会做大改观。
  2. 怀有的DBMS都允许对现成表扩张列,然则对所充实列的数据类型(甚至NULL和DEFAULT的施用)有所节制。
  3. 大大多DBMS允许重命名表中的列,不允许删除或改善表中的列。

给分销商Vendors表增多vend_phone列:

ALTER TABLE Vendors
ADD vend_phone CHAR(20);

星彩彩票app下载 3

去除承包商Vendors表的vend_phone列:

ALTER TABLE Vendors
DROP COLUMN vend_phone;

星彩彩票app下载 4


语法:INSERT INTO 表名称 VALUES (值1, 值2,....)

示范数据库

以下是"Customers" 表中的数据:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland

当触发INSERT触发器时,新的数据行就能够被插入到触发器表和inserted表中。inserted表是一个逻辑表,它富含了后生可畏度插入的数据行的三个别本。inserted表富含了INSERT语句中已记录的插入动作。inserted表还允许引用由初阶化INSERT语句而发生的日志数据。触发器通过检查inserted表来鲜明是还是不是执行触发器动作或如何举行它。inserted表中的行总是触发器表中风姿浪漫行或多行的别本。

2 插入数据(INSERT)

大家也得以内定所要插入数据的列:

INSERT INTO 实例代码

若果大家想在"Customers"表中插入二个新行。

咱俩得以采取以下SQL语句:

日记记录了颇负纠正数据的动作(INSERT、UPDATE和DELETE语句),但在业务日志中的新闻是不行读的。但是,inserted表允许你引用由INSERT语句引起的日志变化,那样就足以将插入数据与爆发的变迁实行比较,来验证它们或行使更为的动作。也足以平素援用插入的多少,而不必然它们存款和储蓄到变量中。

2.1 数据插入

INSERT用来将行插入(或增多)到数码库表。

安排有两种办法:

  1. 布置完整的行。
  2. 插入行的风流洒脱部分。
  3. 插入有些查询的结果。

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
插入新的行"Persons" 表:

实例

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');

以后,选自 "Customers" 表的多少如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal Tom B. Erichsen Skagen 21 Stavanger 4006 Norway

 

2.2 插入完整的行

INSERT钦定表名和插入到新行中的值。

INSERT INTO Customers
VALUES('1000000006','Toy Land','123 Any Street',
       'New York','NY','11111','USA',NULL,NULL);

星彩彩票app下载 5

布署数据时,各列必得以它们在表定义中出现的次序填充。

上边的SQL语句中度信任于表中列的概念次序,还依附于其便于获得的次第新闻。即便可以获取这种次序消息,也无法担保各列在下壹次表结构改换后维持完全相通的顺序。由此,编写正视于特定列次序的SQL语句是特别不安全的。

实际上,在插入数据的时候,最棒交给填充列的风流倜傥风度翩翩。

INSERT INTO Customers(cust_id,cust_contact,cust_email,
                      cust_name,cust_address,cust_city,
                      cust_state,cust_zip)
VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street',
       'New York','NY','11111');

星彩彩票app下载 6

注意:不管采取哪个种类INSERT语法,VALUES的多少都一定要科学。


LastName
FirstName
Address
City
Carter
Thomas
Changan Street
Beijing

星彩彩票app下载, 仅在钦赐的列中插入数据

小编们还是能只在内定的列中插入数据。

以下SQL语句插入多个新行,但只在“CustomerName”、“City”和“Countryn”列中插入数据(CustomerID字段将自动更新):

示例

2.3 插入部分行

插入部分行,表示能够只给某个列提供值,别的列不提供值。

INSERT INTO Customers(cust_id,cust_name,cust_address,
                      cust_city,cust_state,cust_zip)
VALUES('1000000006','Toy Land','123 Any Street',
       'New York','NY','11111');

星彩彩票app下载 7

轻易易行的列必须满足以下某个条件:

  1. 该列定义为允许NULL值(无值或空值)。
  2. 在表定义中给出暗中认可值。这代表只要不给出值,将动用暗中认可值。

SQL 语句:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
结果

实例

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

明天,选自 "Customers" 表的数目如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal null null Stavanger null Norway

在本例中,将成立三个触发器。无论什么日期订购产品(无论曾几何时向Order Details表中插入一条记下),那个触发器都将立异Products表中的一列(UnitsInStock)。用原本的值减去订购的数码值即为新值。

2.4 插入检索出的数据

INSERT能够将SELECT语句的询问结果插入表中,那便是所谓的INSERT SELECT。它由一条INSERT语句和一条SELECT语句组成。

意气风发旦想把另一个表中的买主列合併到Customers表中。

INSERT INTO Customers(cust_id,cust_contact,cust_email,
                      cust_name,cust_address,cust_city,
                      cust_state,cust_zip,cust_country)
SELECT cust_id,cust_contact,cust_email,cust_name,cust_address,
       cust_city,cust_state,cust_zip,cust_country
FROM CustNew;

星彩彩票app下载 8

INSERT SELECT中SELECT语句能够饱含WHERE子句,以过滤插入的多少。

INSERT平时只插入大器晚成行,须求插入多行,必需实践七个INSERT语句。INSERT SELECT是个差别,它能够用一条INSERT插入多行,不管SELECT语句再次回到多少行,都将被INSERT插入。


LastName
FirstName
Address
City
Carter
Thomas
Changan Street
Beijing
Gates
Bill
Xuanwumen 10
Beijing

2、SQL Delete 语句(删除表中的记录)

DELETE语句用于删除表中现成记录。

USE Northwind

2.5 从三个表复制到另三个表

有少年老成种多少插入不接收INSERT语句。要将一个表的内容复制到三个簇新的表(运营中开创的表),能够接纳SELECT INTO语句。

MariaDB、MySQL、Oracle、PostgreSQL和SQLite的语法如下:

CREATE TABLE CustCopy AS SELECT * FROM Customers;

星彩彩票app下载 9

在行使SELECT INTO时,须要掌握的事体:

  1. 其他SELECT选项和子句都足以应用,蕴涵WHERE和GROUP BY。
  2. 可应用联合从多个表插入数据。
  3. 任由从几个表中检索数据,数据都只能插入到叁个表中。

在钦命的列中插入数据"Persons" 表:

SQL DELETE 语句

DELETE 语句用于删除表中的行。

CREATE TRIGGER OrdDet_Insert

3 更新和删除数据(UPDATE、DELETE)

LastName
FirstName
Address
City
Carter
Thomas
Changan Street
Beijing
Gates
Bill
Xuanwumen 10
Beijing

SQL DELETE 语法

DELETE FROM table_name
WHERE condition;

以下是 "Customers" 表中的数据:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

ON [Order Details]

3.1 更新数据UPDATE

二种接纳UPDATE的措施:

  1. 履新表中的特定行。
  2. 履新表中的有所行。

主干的UPDATE语句由三局地组成:

  • 要翻新的表。
  • 列名和它们的新值。
  • 鲜明要修正哪些行的过滤条件。
UPDATE 表名
SET key1 = value1, key2 = value2
WHERE  满足条件、过滤条件

开支者ID为1000000005现行反革命有了Email,需求改过她的笔录。

UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';

星彩彩票app下载 10

履新八个列:

UPDATE Customers
SET cust_contact = 'Sam Roberts',
    cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';

星彩彩票app下载 11

要删减某些列的值,可设置它为NULL(参预表定义允许NULL值)。

UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '1000000005';

星彩彩票app下载 12

留意:UPDATE语句也可使用子查询,使得能用SELECT语句检索出的数额更新列数据。


SQL 语句:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
结果

SQL DELETE 实例代码

假设大家想从"Customers" 表中删去顾客“阿尔Freds Futterkiste”。

咱俩选用以下SQL语句:

FOR INSERT

3.2 删除数据DELETE

三种选用DELETE的点子:

  1. 从表中删除特定的行。
  2. 从表中删除全体行。

主题的DELETE语句由两局地组成:

  • 要删减的表。
  • 分明要刨除哪些行的过滤条件。
DELETE FROM 表名
WHERE  满足条件、过滤条件

DELETE FROM Customers
WHERE cust_id = '1000000006';

星彩彩票app下载 13

DELETE无需列名或通配符,删除的是整行并不是删除列。要刨除钦点的列,能够利用UPDATE语句。

DELETE语句从表中删除行,以致是剔除表中的持有行,然则,DELETE不删除表本身。

借使想从表中删除全体行,不要使用DELETE。可使用TRUNCATE TABLE语句,它成功相仿的行事,而速度越来越快(因为不记录数据的改过)。


LastName
FirstName
Address
City
Carter
Thomas
Changan Street
Beijing
Gates
Bill
Xuanwumen 10
Beijing
Wilson
 
Champs-Elysees
 

实例

DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';

明天,"Customers" 表如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

AS

3.3 使用UPDATE和DELETE的指导标准

  1. 只有确实计划更新和删除每意气风发行,不然绝对不要采纳不带WHERE子句的UPDATE或DELETE语句。
  2. 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELETE举办测验,保障它过滤的是正确的笔录,以免编写的WHERE子句不得法。
  3. 追加DBMS更新和删除数据库的权杖,防止推行不带WHERE子句的UPDATE或DELETE语句。

大器晚成经您发掘文中有不清楚只怕有题目标地点,请在江湖争辩区留言,我会依照你的商议,更新文中相关内容,多谢!

SQL UPDATE 语句Update 语句

去除全数数据

你能够去除表中的保有行,而不须求删除该表。那表示表的协会、属性和目录将保证不改变:

DELETE FROM table_name;

或者

DELETE * FROM table_name;

注意:在未曾备份的情景下,删除记录要非常的小心!因为您剔除了无法重新!

UPDATE P SET

Update 语句用于校订表中的数据。

3、SQL UPDATE 语句(更新表中的笔录)纠正

UPDATE 语句用于立异表中的存活记录。

UnitsInStock = P.UnitsInStock – I.Quantity

语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
Person:

SQL UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。 

FROM Products AS P INNER JOIN Inserted AS I

LastName
FirstName
Address
City
Gates
Bill
Xuanwumen 10
Beijing
Wilson
 
Champs-Elysees
 

SQL UPDATE 语法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

ON P.ProductID = I.ProductID

更新某生机勃勃行中的二个列

演示数据库

以下是 "Customers" 表中的数据:

CustomerID CustomerName ContactName Address City PostalCode Country
Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

  DELETE触发器的办事历程

当触发DELETE触发器后,从受影响的表中删除的将要被停放到三个不一样常常的deleted表中。deleted表是多个逻辑表,它保留已被剔除数据行的二个别本。deleted表还允许援用由领头化DELETE语句发生的日记数据。

动用DELETE触发器时,要求考虑以下的事项和规格:

l         当某行被增添到deleted表中时,它就不再存在于数据库表中;因而,deleted表和数据库表未有一样的行。

l         创造deleted表时,空间是从内部存款和储蓄器中分配的。deleted表总是被存放在高速缓存中。

l         为DELETE动作定义的触发器并不实践TRUNCATE TABLE语句,原因在于日志不记录TRUNCATE TABLE语句。

示例

在本例中,将创制多少个触发器,无论什么时候删除二个产品体系(即从Categories表中删除一条记下),该触发器都会更新Products表中的Discontinued列。全体受影响的成品都标识为1,标示不再行使这几个制品了。

USE Northwind

CREATE TRIGGER Category_Delete

       ON Categories

       FOR DELETE

AS

       UPDATE P SET Discontinued = 1

              FROM Products AS P INNER JOIN deleted AS d

              ON P.CategoryID = d.CategoryID

 

咱俩为 lastname 是 "Wilson" 的人增加 firstname:

SQL UPDATE 实例

以下SQL语句为第贰个客商(CustomerID = 1)更新了“CustomerName”和“City”:

UPDATE触发器的办事历程

可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和破获数据后像(after image)的INSERT语句。当在概念有触发器的表上实施UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。

触发器检查deleted表和inserted表以致被更新的表,来明确是不是更新了多行以至哪些推行触发器动作。

可以选取IF UPDATE语句定义叁个监视钦定列的数量更新的触发器。那样,就足以让触发器轻便的隔开出特定列的位移。当它检查评定到钦定列已经更新时,触发器就能越发施行适当的动作,比方发出错误音讯提出该列无法革新,也许依赖新的翻新的列值推行一应有尽有的动作语句。

 

语法

IF UPDATE (<column_name>)

例1

本例阻止客商改过Employees表中的EmployeeID列。

USE Northwind

GO

CREATE TRIGGER Employee_Update

       ON Employees

       FOR UPDATE

AS

IF UPDATE (EmployeeID)

BEGIN

       RAISERROR ('Transaction cannot be processed.

       ***** Employee ID number cannot be modified.', 10, 1)

       ROLLBACK TRANSACTION

END

 

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
结果

实例

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;

最近,选自 "Customers" 表的数量如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4

Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

    INSTEAD OF触发器的劳作进度

能够在表或视图上钦赐INSTEAD OF触发器。实践这种触发器就能够取代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每生机勃勃种触发动作(INSERT、UPDATE或 DELETE),每三个表或视图只好有一个INSTEAD OF触发器。

INSTEAD OF触发器被用来创新这个并未有章程通过不荒谬艺术立异的视图。比方,平常不可能在贰个根据连接的视图上开展DELETE操作。可是,可以编写制定三个INSTEAD OF DELETE触发器来落到实处删除。上述触发器能够访谈那么些倘诺视图是二个的确的表时已经被删去的数据行。将被删去的行存储在八个名称叫deleted的劳作表中,就疑似AFTELacrosse触发器同样。雷同地,在UPDATE INSTEAD OF触发器还是INSERT INSTEAD OF触发器中,你能够访谈inserted表中的新行。

不能够在包括WITH CHECK OPTION定义的视图中开创INSTEAD OF触发器。

 

示例

在本例中,创造了贰个德意志联邦共和国客户表和一个墨西哥客商表。放置在视图上的INSTEAD OF触发器将把改善操作重新定向到合适的基表上。这时候爆发的插入是对CustomersGer表的插入实际不是对视图的插入。

创建四个带有客商数据的表:

SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany'

SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico'

GO

 

在该数据上创设视图:

CREATE VIEW CustomersView AS

SELECT * FROM CustomersGer

UNION

SELECT * FROM CustomersMex

GO

 

创办多少个在上述视图上的INSTEAD OF触发器:

CREATE TRIGGER Customers_Update2

ON CustomersView

INSTEAD OF UPDATE AS

DECLARE @Country nvarchar(15)

SET @Country = (SELECT Country FROM Inserted)

IF @Country = 'Germany'

  BEGIN

   UPDATE CustomersGer

    SET CustomersGer.Phone = Inserted.Phone

    FROM CustomersGer JOIN Inserted

    ON CustomersGer.CustomerID = Inserted.CustomerID

  END

ELSE

  IF @Country = 'Mexico'

  BEGIN

   UPDATE CustomersMex

    SET CustomersMex.Phone = Inserted.Phone

    FROM CustomersMex JOIN Inserted

    ON CustomersMex.CustomerID = Inserted.CustomerID

  END

 

通过改正视图,测验触发器:

UPDATE CustomersView SET Phone = ' 030-007xxxx'
  WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersView
  WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersGer
  WHERE CustomerID = 'ALFKI'

--------------------------------------------
这正是说具体的讲,对于多列数据,如何总括方差呢?:

星彩彩票app下载 14CREATE TRIGGER [calT1T2T3] ON dbo.DCLB 
星彩彩票app下载 15FOR  INSERT,UPDATE
星彩彩票app下载 16AS
星彩彩票app下载 17update P
星彩彩票app下载 18SET
星彩彩票app下载 19星彩彩票app下载 20/**//*
星彩彩票app下载 21算算方差的触发器
星彩彩票app下载 22*/
星彩彩票app下载 23P.T1=(I.P1 I.P2 I.P3 I.P4 I.P5 I.P6),
星彩彩票app下载 24P.T2=(I.Y1 I.Y2 I.Y3 I.Y4 I.Y5 I.Y6 ),
星彩彩票app下载 25P.T3=SQRT(P.T1*P.T1 P.T2*P.T2)
星彩彩票app下载 26
星彩彩票app下载 27FROM DCLB AS P INNER JOIN Inserted AS I
星彩彩票app下载 28ON P.SID = I.SID
星彩彩票app下载 29
星彩彩票app下载 30
星彩彩票app下载 31
星彩彩票app下载 32
星彩彩票app下载 33
星彩彩票app下载 34
星彩彩票app下载 35
星彩彩票app下载 36
星彩彩票app下载 37

触发器的应用很方便,何况也很简短,首要的是知情inserted进程。可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和破获数据后像(after image)的INSERT语句。当在概念有触发器的表上实施UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。触发器检查deleted表和inserted表甚至被更新的表,来规定是还是不是更新了多行以至哪些实行触发器动作。

 

LastName
FirstName
Address
City
Gates
Bill
Xuanwumen 10
Beijing
Wilson
Fred
Champs-Elysees
 

更新三个记录

WHERE子句决定了即将更新的记录数据。

以下SQL语句将把国家/地区为"Mexico"的富有记录的关系人姓名更新为“Juan”:

UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';

“Customers”表中的抉择将来看起来像这么:

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
2 Ana Trujillo Emparedados y helados Juan Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Juan Mataderos 2312 México D.F. 05023 Mexico
4

Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

 

履新某意气风发行中的若干列

Update 警告!

履新记录时要小心。假使您省略WHERE子句,全数记录将被更新!

UPDATE Customers
SET ContactName='Juan';

"Customers" 表将如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Juan Obere Str. 57 Frankfurt 12209 Germany
2 Ana Trujillo Emparedados y helados Juan Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Juan Mataderos 2312 México D.F. 05023 Mexico
4

Around the Horn Juan 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Juan Berguvsvägen 8 Luleå S-958 22 Sweden

至于查看比较复杂,前面详细再说吧!!!

 

大家会校订地址(address),并丰盛城市称号(city):

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'WHERE LastName = 'Wilson'
结果

LastName
FirstName
Address
City
Gates
Bill
Xuanwumen 10
Beijing
Wilson
Fred
Zhongshan 23
Nanjing

SQL DELETE 语句

DELETE 语句

DELETE 语句用于删除表中的行。

语法:DELETE FROM 表名称 WHERE 列名称 = 值
Person:

LastName
FirstName
Address
City
Gates
Bill
Xuanwumen 10
Beijing
Wilson
Fred
Zhongshan 23
Nanjing

去除某行

"弗瑞德 Wilson" 会被删除:

DELETE FROM Person WHERE LastName = 'Wilson' 
结果:

LastName
FirstName
Address
City
Gates
Bill
Xuanwumen 10
Beijing

剔除全体行

能够在不删除表的意况下删除全部的行。那意味表的组织、属性和目录都以完全的:

DELETE FROM table_name

或者:

DELETE * FROM table_name

 

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:2000中的触发器使用,SQL必知必会

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。