【数据库】(三)-- mysql 数据库操作应用

【数据库】(三)-- mysql 数据库操作应用

操作说明

使用 navicat 针对 mysql 进行 sql 的使用,mysql 运行在本地的 docker 环境的应用容器中。

语法和关键字什么的查看《SQL必知必会》或网络教程,这里只对 SQL 进行实际运行结果进行实验。

创建数据库(CREATE

基本方式

设计数据库

数据库视图模型

mysql数据库视图

mysql 数据库视图

创建数据库 SQL

-- 如果数据库mysql_db_test存在便执行删除mysql_db_test数据库操作
DROP DATABASE IF EXISTS mysql_db_test;

-- 如果数据库mysql_db_test不存在便执行创建mysql_db_test数据库操作
CREATE DATABASE IF NOT EXISTS mysql_db_test;

-- 使用建好的数据库mysql_db_test
USE mysql_db_test;

创建数据库表 SQL

-- Sams Teach Yourself SQL in 10 Minutes, 5th Edition
-- http://forta.com/books/0135182794/
-- Example table creation scripts for MySQL & MariaDB
-- 对脚本适当修改

-- ----------------------
-- Create Customers table 
-- 创建一个关于顾客的表
-- ----------------------
CREATE TABLE Customers
(
  cust_id      char(10)  NOT NULL ,
  cust_name    char(50)  NOT NULL , 
  cust_address char(50)  NULL ,
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL 
);

-- -----------------------
-- Create OrderItems table
-- 创建一个订购项目详情表
-- -----------------------
CREATE TABLE OrderItems
(
  order_num  int          NOT NULL ,
  order_item int          NOT NULL ,
  prod_id    char(10)     NOT NULL ,
  quantity   int          NOT NULL ,
  item_price decimal(8,2) NOT NULL 
);


-- -------------------
-- Create Orders table
-- 创建一个订购单
-- -------------------
CREATE TABLE Orders
(
  order_num  int      NOT NULL ,
  order_date datetime NOT NULL ,
  cust_id    char(10) NOT NULL 
);

-- ---------------------
-- Create Products table
-- 创建产品详情表
-- ---------------------
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 
);

-- --------------------
-- Create Vendors table
-- 创建商户详情表
-- --------------------
CREATE TABLE Vendors
(
  vend_id      char(10) NOT NULL ,
  vend_name    char(50) NOT NULL ,
  vend_address char(50) NULL ,
  vend_city    char(50) NULL ,
  vend_state   char(5)  NULL ,
  vend_zip     char(10) NULL ,
  vend_country char(50) NULL 
);

创建数据库约束

-- -------------------
-- Define primary keys
-- 定义一些主键
-- -------------------
ALTER TABLE Customers ADD PRIMARY KEY (cust_id);
ALTER TABLE OrderItems ADD PRIMARY KEY (order_num, order_item);
ALTER TABLE Orders ADD PRIMARY KEY (order_num);
ALTER TABLE Products ADD PRIMARY KEY (prod_id);
ALTER TABLE Vendors ADD PRIMARY KEY (vend_id);

-- -------------------
-- Define foreign keys
-- 定义一些外键
-- -------------------
ALTER TABLE OrderItems ADD CONSTRAINT FK_OrderItems_Orders FOREIGN KEY (order_num) REFERENCES Orders (order_num);
ALTER TABLE OrderItems ADD CONSTRAINT FK_OrderItems_Products FOREIGN KEY (prod_id) REFERENCES Products (prod_id);
ALTER TABLE Orders ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (cust_id) REFERENCES Customers (cust_id);
ALTER TABLE Products ADD CONSTRAINT FK_Products_Vendors FOREIGN KEY (vend_id) REFERENCES Vendors (vend_id);

插入数据(INSERT

基本方式

INSERT 用来将行插入 (或添加) 到数据库表。

插入有几种方式:

  • 插入完整的行;
  • 插入行的一部分;
  • 插入某些查询的结果。

数据库数据插入 SQL 脚本

-- ------------------------
-- Populate Customers table
-- 生成顾客表的测试数据
-- ------------------------
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000001', 'Village Toys', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'John Smith', 'sales@villagetoys.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000002', 'Kids Place', '333 South Lake Drive', 'Columbus', 'OH', '43333', 'USA', 'Michelle Green');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000003', 'Fun4All', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', 'jjones@fun4all.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000004', 'Fun4All', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'USA', 'Denise L. Stephens', 'dstephens@fun4all.com');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000005', 'The Toy Store', '4545 53rd Street', 'Chicago', 'IL', '54545', 'USA', 'Kim Howard');

-- ----------------------
-- Populate Vendors table
-- 生成商铺表的测试数据
-- ----------------------

INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('BRS01','Bears R Us','123 Main Street','Bear Town','MI','44444', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('BRE02','Bear Emporium','500 Park Street','Anytown','OH','44333', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('DLL01','Doll House Inc.','555 High Street','Dollsville','CA','99999', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('FRB01','Furball Inc.','1000 5th Avenue','New York','NY','11111', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('FNG01','Fun and Games','42 Galaxy Road','London', NULL,'N16 6PS', 'England');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('JTS01','Jouets et ours','1 Rue Amusement','Paris', NULL,'45678', 'France');

-- -----------------------
-- Populate Products table
-- 生成产品表的数据
-- -----------------------

INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR01', 'BRS01', '8 inch teddy bear', 5.99, '8 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR02', 'BRS01', '12 inch teddy bear', 8.99, '12 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR03', 'BRS01', '18 inch teddy bear', 11.99, '18 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG01', 'DLL01', 'Fish bean bag toy', 3.49, 'Fish bean bag toy, complete with bean bag worms with which to feed it');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG02', 'DLL01', 'Bird bean bag toy', 3.49, 'Bird bean bag toy, eggs are not included');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG03', 'DLL01', 'Rabbit bean bag toy', 3.49, 'Rabbit bean bag toy, comes with bean bag carrots');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RGAN01', 'DLL01', 'Raggedy Ann', 4.99, '18 inch Raggedy Ann doll');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL01', 'FNG01', 'King doll', 9.49, '12 inch king doll with royal garments and crown');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL02', 'FNG01', 'Queen doll', 9.49, '12 inch queen doll with royal garments and crown');

-- ---------------------
-- Populate Orders table
-- 生成订单表的数据
-- ---------------------

INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20005, '2020-05-01', '1000000001');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20006, '2020-01-12', '1000000003');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20007, '2020-01-30', '1000000004');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20008, '2020-02-03', '1000000005');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20009, '2020-02-08', '1000000001');

-- -------------------------
-- Populate OrderItems table
-- 生成订单项目清单表的数据
-- -------------------------

INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 1, 'BR01', 100, 5.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 2, 'BR03', 100, 10.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 1, 'BR01', 20, 5.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 2, 'BR02', 10, 8.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 3, 'BR03', 10, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 1, 'BR03', 50, 11.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 2, 'BNBG01', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 3, 'BNBG02', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 4, 'BNBG03', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 5, 'RGAN01', 50, 4.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 1, 'RGAN01', 5, 4.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 2, 'BR03', 5, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 3, 'BNBG01', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 4, 'BNBG02', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 5, 'BNBG03', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 1, 'BNBG01', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 2, 'BNBG02', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 3, 'BNBG03', 250, 2.49);

使用 navicat 自定生成测试数据

截屏2022-09-08 10.12.10

先不进行性能相关的测试所以先不做大量数据的测试样本!!!

更新和删除数据(UPDATE & DELETE

基本方式

更新 (修改) 表中的数据,可以使用 UPDATE 语句。

从表中删除 (去掉) 数据,使用 DELETE 语句。

分别有两种更改表数据的方式:

  • 更新或删除表中的特定行;
  • 更新或删除表中的所有行。

有两种使用 DELETE 的方式:

  • 从表中删除特定的行;
  • 从表中删除所有行。

基本的 UPDATE 语句由三部分组成,分别是:

  • 要更新的表;
  • 列名和它们的新值;
  • 确定要更新哪些行的过滤条件。

更新数据表数据

举例:

客户 1000000005 现在有了电子邮件地址,因此他的记录需要更新,语句如下:

-- 查询客户ID为10000005的客户记录数据
SELECT	* FROM	Customers WHERE	cust_id = 1000000005;

-- 更新客户ID为10000005的客户邮箱地址数据
UPDATE Customers 
SET cust_email = 'kim@thetoystore.com ' 
WHERE
	cust_id = 1000000005;
	
-- 查询客户ID为10000005的客户记录数据
SELECT	* FROM	Customers WHERE	cust_id = 1000000005;

结果如下:

SELECT	* FROM	Customers WHERE	cust_id = 1000000005
> OK
> Time: 0s


UPDATE Customers 
SET cust_email = 'kim@thetoystore.com ' 
WHERE
	cust_id = 1000000005
> Affected rows: 1
> Time: 0s


SELECT	* FROM	Customers WHERE	cust_id = 1000000005
> OK
> Time: 0s

截屏2022-09-08 11.02.19

删除数据表数据

举例:

客户信息变更需要删除插入的新的客户 ID 为 1000006 的数据记录

插入一条模拟数据

-- 插入一条新的客户数据
INSERT INTO Customers (
	cust_id,
	cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country,
	cust_contact 
)
VALUES
	(
		'1000000006',
		'The cs Store',
		'1111 53rd Street',
		'jiaozuo',
		'IL',
		'54545',
		'CHINA',
	  'cs' 
	);

[

删除客户 ID 为 100000006 的记录数据

-- 删除客户ID为100000006的记录数据
DELETE FROM Customers WHERE cust_id= 1000000006;
-- 查询客户ID为1000000006的客户记录数据
SELECT	* FROM	Customers WHERE	cust_id = 1000000006;
DELETE FROM Customers WHERE cust_id= 1000000006
> Affected rows: 1
> Time: 0s
-- 查询客户ID为1000000006的客户记录数据
SELECT	* FROM	Customers WHERE	cust_id = 1000000006
> OK
> Time: 0s

查询数据(SELECT

基本方式

查询是数据库做常使用的方式,根据场景的不同有不同的使用方法;

  • 检索数据
  • 数据排序
  • 过滤数据
  • 函数
  • 数据聚集与分组
  • 联结表
  • 组合查询

查询筛选

查询带数据筛选的列

-- 查询产品表中价格少于10的产品名称和产品价格
SELECT prod_name,prod_price FROM Products WHERE prod_price < 10;

结果集为:

prod_name						prod_price
------------------				----------
Fish bean bag toy				3.49
Bird bean bag toy				3.49
Rabbit bean bag toy			    3.49
8 inch teddy bear				5.99
12 inch teddy bear			    8.99
Raggedy Ann						4.99
King doll						9.49
Queen doll						9.49

对于 WHERE 字句的操作符有

操作符说明操作符说明
=等于>大于
<>不等于>=大于等于
!=不等于!>不大于
<小于BETWEEN在指定的两个值之间
<=小于等于IS NULL为 NULL 值
!<不小于

汇总数据

我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供了专门的函数。使用这些函数,SQL 查询可用于检索数据,以便分析和报表生成。

这种类型的检索例子有:

  • 确定表中行数 (或者满足某个条件或包含某个特定值的行数) ;
  • 获得表中某些行的和 ;
  • 找出表列 (或所有行或某些特定的行) 的最大值最小值平均值

上述例子都需要汇总出表中的数据,而不需要查出数据本身。

查询带数据筛选的列

-- 查询产品表中产品总数和产品价格的平均数,最大值,最小值
SELECT
	COUNT(*) AS num_items,
	MIN( prod_price ) AS price_min,
	MAX( prod_price ) AS price_max,
	AVG( prod_price ) AS price_avg 
FROM
	Products;

结果集为:

num_items			price_min			price_max			price_avg
---------			---------			---------			---------
9							3.49					11.99					6.823333

对于 WHERE 字句的操作符有

SQL 聚集函数(aggregate funtion)说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和

联结表

如果数据存储在多个表中,怎样用一条 SELECT 语句就检索出数据呢?答案是使用联结。简单说,联结是一种机制,用来在一条 SELECT 语句中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

查询关联表数据

-- 在三个不同的表中(订单表,产品表,商铺表)查询出符合(商铺号相同,产品号相同,订单号为20007的)产品名称,商铺名称,产品价格,数量
SELECT
	prod_name,
	vend_name,
	prod_price,
	quantity 
FROM
	OrderItems,
	Products,
	Vendors 
WHERE
	Products.vend_id = Vendors.vend_id 
	AND OrderItems.prod_id = Products.prod_id 
	AND order_num = 20007;

结果集为:

prod_name				vend_name			prod_price		quantity
---------				--------------		----------		--------
18 inch teddy bear		Bears R Us			11.99			50
Fish bean bag toy		Doll House Inc.		3.49			100
Bird bean bag toy		Doll House Inc.		3.49			100
Rabbit bean bag toy		Doll House Inc.		3.49			100
Raggedy Ann				Doll House Inc.		4.99			50

这个例子显示订单 20007 中的物品。 订单物品存储在 OrderItems 表中。

每个产品按其产品 ID 存储,它引用 Products 表中的产品。

这些产品通过供应商 ID 联结到 Vendors 表中相应的供应商,供应商 ID 存储在每个产品的记录中。

这里的 FROM 子句列出三个表,WHERE 子句定义这两个联结条件,而第三个联结条件用来过滤出订单 20007 中的物品。

组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。
但是,SQL 也允许执行多个查询 (多条 SELECT 语句) , 并将结果作为一个查询结果集返回。

这些组合查询通常称为并(union)复合查询(compound query)
主要有两种情况需要使用组合查询:

  • 在一个查询中从不同的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。

UNION 规则

UNION 在进行组合时需要注意几条规则。

  • UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字 UNION 分隔 (因此,如果组合四条 SELECT 语句,将要使用三个 UNION 关键字) 。
  • UNION 中的每个查询必须包含相同的列、表达式或聚集函数 (不过,各个列不需要以相同的次序列出) 。
  • 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含转换的类型 (例如,不同的数值类型或不同的日期类型) 。

查询组合数据

-- 在顾客表中查询顾客信息,使用不同的筛选条件的select语句,并将结果集合并
SELECT
	cust_name,
	cust_contact,
	cust_email 
FROM
	Customers 
WHERE
	cust_state IN ( 'IL', 'IN ', 'MI' ) UNION
SELECT
	cust_name,
	cust_contact,
	cust_email 
FROM
	Customers 
WHERE
	cust_name = 'Fun4All' 
ORDER BY
	cust_name,
	cust_contact;

结果集为:

cust_name				cust_contact			cust_email
---------				------------			----------
Fun4All	Denise L. 		Stephens				dstephens@fun4all.com
Fun4All	Jim 			Jones					jjones@fun4all.com
The Toy Store			Kim Howard	
Village Toys			John Smith				sales@villagetoys.com

事务处理 (TRANSACTION)

在使用事务处理时,有几个反复出现的关键词。

下面是关于事务处理需要知道的几个术语:

  • 事务 (transaction) 指一组 SQL 语句;
  • 回退 (rollback) 指撤销指定 SQL 语句的过程;
  • 提交 (commit) 指将未存储的 SQL 语句结果写入数据库表;
  • 保留点 (savepoint) 指事务处理中设置的临时占位符 (placeholder) , 可以对它发布回退 (与回退整个事务处理不同)。

基本方式

各个数据库的 SQL 事务语法具有差异性,所以还需参考相应数据库的 DBMS 文档

游标 (Cursor)

用游标涉及几个明确的步骤。

  • 在使用游标前,必须声明 (定义) 它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句和游标选项。
  • 一旦声明,就必须打开游标以供使用。 这个过程用前面定义的 SELECT语句把数据实际检索出来。
  • 对于填有数据的游标,根据需要取出 (检索) 各行。
  • 在结束游标使用时,必须关闭游标,可能的话,释放游标 (有赖于具体的 DBMS) 。

声明游标后,可根据需要频繁地打开和关闭游标。在游标打开时,可根据需要频繁地执行取操作。

基本方式

各个数据库的 SQL 游标语法具有差异性,所以还需参考相应数据库的 DBMS 文档

高级 SQL

用游标涉及几个明确的步骤。

  • 在使用游标前,必须声明 (定义) 它。这个过程实际上没有检索数据,它只是定义要使用的 S E L E C T 语句和游标选项。
  • 一旦声明,就必须打开游标以供使用。 这个过程用前面定义的 S E L E CT 语句把数据实际检索出来。
  • 对于填有数据的游标,根据需要取出 (检索) 各行。
  • 在结束游标使用时,必须关闭游标,可能的话,释放游标 (有赖于具体的 DBMS) 。

声明游标后,可根据需要频繁地打开和关闭游标。在游标打开时,可根据需要频繁地执行取操作。

基本方式

各个数据库的 SQL 游标语法具有差异性,所以还需参考相应数据库的 DBMS 文档

约束 (constraint)

DBMS 通过在数据库表上施加约束来实施引用完整性。

主键和外键。

索引

索引用来排序数据以加快搜索和排序操作的速度。

开始创建索引前,应该记住以下内容。

  • 索引改善检索操作的性能,但降低了数据插入、修改和删除的性能。在执行这些操作时,DBMS 必须动态地更新索引。
  • 索引数据可能要占用大量的存储空间。
  • 并非所有数据都适合做索引。取值不多的数据 (如州) 不如具有更多可能值的数据 (如姓或名) , 能通过索引得到那么多的好处。
  • 索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据可能适合做索引。
  • 可以在索引中定义多个列 (例如,州加上城市) 。这样的索引仅在以州加城市的顺序排序时有用。如果想按城市排序,则这种索引没有用处。

索引用 CREATE INDEX 语句创建 (不同 DBMS 创建索引的语句变化很大) 。

下面的语句在 Products 表的产品名列上创建一个简单的索引。

CREATE INDEX prod_name_ind ON Products ( prod_name );

触发器

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。

触发器可以与特定表上的 INSERTUPDATE DELETE 操作 (或组合) 相关联。

与存储过程不一样 (存储过程只是简单的存储 SQL 语句) , 触发器与单个的表相关联。与 Orders 表上的 INSERT 操作相关联的触发器只在 Orders 表中插入行时执行。类似地,Customers 表上的 INSERTUPDATE 操作的触发器只在表上出现这些操作时执行。

触发器内的代码具有以下数据的访问权:

  • INSERT 操作中的所有新数据;
  • UPDATE 操作中的所有新数据和旧数据;
  • DELETE 操作中删除的数据。

各个数据库的触发器创建语法具有差异性,所以还需参考相应数据库的 DBMS 文档

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值