如下语法可用于创建存储过程:而如下语法用于创建存储函数:例如,来创建一个返回静态字符串的简单存储过程:仅此而已。请继续阅读,了解创建复杂的存储过程还有哪些选项。例如,能够使用PHP、Perl和Python语言创建存储过程,这意味着过程的功能只受所使用语言的限制。在编写本书时,此特点对存储过程的功能没有影响。......
2023-10-29
MySQL触发器是使用非常简单的SQL语句创建的。其语法形式如下:
从形式中可以看出,可以指定触发器是在查询之前还是之后执行,应当在记录插入、修改还是删除时发生,还可以确定触发器应用于哪个表。
DEFINER子句确定将查看哪个用户账户来确定是否有适当的权限执行触发器中定义的查询。如果定义了DEFINER子句,需要采用'user'@'host'语法指定用户名和主机名(例如,'jason'@'localhost')。如果使用CURRENT_USER(默认值),就会查看导致执行这个触发器的用户账户的权限。只有拥有SUPER权限的用户才能够为另一个用户指定DEFINER。
如果出现提示使用MySQL 5.1.6之前的版本,则需要SUPER权限才能创建触发器;而从5.1.6开始,账户有TRIGGER权限就可以创建触发器。
下面实现本章前面描述的问讯处触发器:
注解可能不清楚触发器名中的au前缀。关于这个前缀及类似前缀的更多信息,请参见补充内容“触发器命名约定”。
对于被technician表更新所影响的每条记录,此触发器将更新tickets表,如果ticket+technicianID等于更新查询中指定的technicianID值,则将ticket.technicianID设置为0。应该知道,这里使用了查询值,因为在列名前加上了别名NEW。也可以在列名前面加上OLD别名来使用列的原始值。
创建触发器之后,就可以通过向tickets表中插入一些记录,再执行一条UPDATE查询,将技术员的availability列设置为0来进行测试:
现在查看tickets表,将看到原先分配给Jason的两张票证不再分配给他。(www.chuimin.cn)
触发器命名虽然没有要求,但为触发器采用某种命名约定是一个好主意,这样可以更快地确定每个触发器的作用。例如,可以考虑为每个触发器加上如下字符串作为前缀,触发器创建示例中就采用了这种做法。
➢ ad,在DELETE查询发生之后执行触发器。
➢ ai,在INSERT查询发生之后执行触发器。
➢ au,在UPDATE查询发生之后执行触发器。
➢ bd,在DELETE查询发生之前执行触发器。
➢ di,在INSERT查询发生之前执行触发器。
➢ bu,在UPDATE查询发生之前执行触发器。
有关MySQL数据库设计与实现的文章
如下语法可用于创建存储过程:而如下语法用于创建存储函数:例如,来创建一个返回静态字符串的简单存储过程:仅此而已。请继续阅读,了解创建复杂的存储过程还有哪些选项。例如,能够使用PHP、Perl和Python语言创建存储过程,这意味着过程的功能只受所使用语言的限制。在编写本书时,此特点对存储过程的功能没有影响。......
2023-10-29
在MySQL已经成功启动的前提下,输入以下命令:这样一个名为shop的数据库就创建成功了。图4.1查看系统内数据库在图4.1中,第一个数据库information_schema是MySQL自带的,该数据库存储了所有MySQL服务器管理的数据库信息,比如数据库名、数据库的表、表的数据类型及访问权限等。图4.2非法的数据库名如果要创建的数据库名字在MySQL中已经存在,也会发生错误。......
2023-10-29
在MySQL 5.0.10中,可以用两种方法查看现有的触发器:使用SHOW TRIGGERS命令或使用INFORMATION_SCHEMA。本节介绍这两种方法。......
2023-10-29
表示索引为唯一性索引。指索引的长度,必须是字符串类型才可以使用。如果在创建索引时没写索引名称,MySQL会自动用字段名作为索引名称。其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。......
2023-10-29
创建视图是通过CREATE VIEW语句实现的。当视图指定为TEMPTABLE时,将在创建视图的同时创建相应的TEMPORARY表。如果为视图指定了UNDEFINED算法,当查询指示其结果和视图结果是一对一关系时,MySQL将选择TEMPTABLE。DEFINER子句确定在视图执行时将检查哪个用户账户的权限来确定是否有适当的权限执行这个视图。......
2023-10-29
当创建表时,必须指定表名、列名及数据类型。图4.5创建表stuinfo创建完表以后可使用show tables命令来查看当前数据库中可用的表。图4.7创建表item在图4.7中创建了一个名为item的表。在字段other中,null表示允许该列为空,若没有特别指定该列为null或not null,默认情况下该列允许为空。图4.8查看表item的表结构要查看注释标识可通过show create table命令。......
2023-10-29
单语句存储过程非常有用,但存储过程的真正功能在于它能够封装和执行多个语句。因为这两个应用程序都需要能够计算奖金数额,所以这个任务非常适合使用存储函数实现。本节余下部分主要介绍创建多语句存储过程时常用的语法。......
2023-10-29
这一节将重点讨论促使MySQL风行的一些关键特性。接下来,还将提供有关MySQL产品两个主要里程碑版本的重要信息。庞大的开源社区:MySQL之所以如此流行和受欢迎,很大一部分功劳要归功于开源社区的积极支持。在开源社区中不仅能了解到MySQL的最新发展动态,还能快速地解决一些问题和难题。......
2023-10-29
相关推荐