找到关于数据库的6705 篇文章

创建一个查找数字阶乘的存储过程?

vanithasree
更新于 2020年6月22日 07:21:33

3K+ 次浏览

它可以通过以下查询创建:mysql> Delimiter // mysql> CREATE PROCEDURE fact(IN x INT)     -> BEGIN     -> DECLARE result INT;     -> DECLARE i INT;     -> SET result = 1;     -> SET i = 1;     -> WHILE i <= x DO     -> SET result = result * i;     -> SET i = i + 1;     -> END WHILE;     -> SELECT x AS Number, result as Factorial;     -> END// Query OK, 0 rows affected (0.17 sec)现在调用这个…… 阅读更多

复制存储过程和函数的限制是什么?

Rishi Rathor
更新于 2020年6月22日 07:24:53

190 次浏览

复制存储过程和函数的限制如下:操作类型 - 实际上,存储过程和函数的复制取决于操作类型。如果存储过程中的操作是不确定性(随机)或基于时间的,则可能无法正确复制。由于其固有特性,随机产生的结果是不可预测的,并且无法精确复制,因此复制到从服务器上的随机操作不会反映在主服务器上执行的操作。事务类型 - 对于在大型 DML 操作(例如批量插入)期间发生错误的非事务表,可能会遇到复制问题,因为…… 阅读更多

将存储过程和函数与复制一起使用有哪些特殊安全要求?

radhakrishna
更新于 2020年6月22日 07:23:52

189 次浏览

实际上,MySQL 从服务器有权执行从主服务器的 MySQL 服务器二进制日志中读取的任何语句,因此对于将存储函数与复制一起使用,存在一些特殊安全限制。如果复制或二进制日志记录通常处于活动状态(用于点时间恢复),则 MySQL DBA 有两个安全选项:SUPER 权限选项任何希望创建存储函数的用户都必须由 DBA 授予 SUPER 权限。log_bin_trust_function_creators 模式实际上,log_bin_trust_function_creators 使任何拥有标准 CREATE ROUTINE 权限的用户都可以创建存储函数,因此 DBA 可以将 log_bin_trust_function_creators 系统变量设置为 1。阅读更多

存储过程和函数内部发生的操作是如何复制的?

Nancy Den
更新于 2020年6月22日 07:27:48

132 次浏览

实际上,在存储过程和函数中执行的标准操作是从主 MySQL 服务器复制到从 MySQL 服务器。甚至通过主 MySQL 服务器上的普通 DDL 语句执行的存储过程和函数的创建也会复制到从 MySQL 服务器。通过这种方式,对象将存在于两个服务器上。存储过程和函数内部发生的操作之所以被复制,是因为 MySQL 记录存储过程和函数内部发生的每个 DDL 事件。记录事件后,它将复制到从 MySQL 服务器。但是实际的调用…… 阅读更多

如何在 MySQL 存储过程中执行 ROLLBACK 事务?

mkotla
更新于 2020年6月22日 07:26:52

2K+ 次浏览

众所周知,ROLLBACK 将在事务启动后撤消对数据库所做的任何更改。要在 MySQL 存储过程中执行 ROLLBACK,必须声明 EXIT 处理程序。我们可以为 sqlexception 或 SQL 警告使用处理程序。可以通过一个示例来理解,在该示例中,为具有以下详细信息的表创建了具有 ROLLBACK 的存储过程:mysql> SHOW CREATE table gg\G *************************** 1. row ***************************        Table: gg Create Table: CREATE TABLE `gg` (    `Id` int(11) NOT NULL AUTO_INCREMENT,    `Name` varchar(30) NOT NULL,    PRIMARY KEY ... 阅读更多

当我们在 MySQL 存储过程中使用 COMMIT,并且 START transaction 下的一个事务失败时会发生什么?

Daniol Thomas
更新于 2020年6月22日 06:57:24

540 次浏览

假设一个查询失败或生成错误,而另一个查询(s)正确执行,MySQL 仍然会提交正确执行的查询(s)的更改。可以从以下示例中理解,在该示例中,我们使用的是名为“employee.tbl”的表,该表具有以下数据:示例mysql> Select * from employee.tbl; +----+---------+ | Id | Name    | +----+---------+ | 1  | Mohan   | | 2  | Gaurav  | | 3  | Sohan   | | 4  | Saurabh | | 5  | Yash    | +----+---------+ 5 rows in set (0.00 sec) mysql> Delimiter // mysql> ... 阅读更多

如何在 MySQL 存储过程中执行 COMMIT 事务?

mkotla
更新于 2020年6月22日 07:02:12

676 次浏览

众所周知,START transaction 将启动事务,而 COMMIT 用于在启动事务后进行任何更改。在下面的示例中,我们创建了一个带有 COMMIT 和 START transaction 的存储过程,它将插入新记录并提交对名为“employee.tbl”的表的更改,该表具有以下数据:mysql> Select * from employee.tbl; +----+---------+ | Id | Name    | +----+---------+ |  1 | Mohan   | |  2 | Gaurav  | |  3 | Rahul   | |  4 | Saurabh | +----+---------+ 4 rows in set (0.00 sec)示例mysql> Delimiter // mysql> ... 阅读更多

如何在 MySQL 存储过程中执行 START 事务?

Sreemaha
更新于 2020年6月22日 06:50:09

371 次浏览

众所周知,START transaction 将启动事务并将自动提交模式设置为关闭。在下面的示例中,我们创建了一个带有 START transaction 的存储过程,它将向名为 employee.tbl 的表中插入新记录,该表具有以下数据:mysql> Select * from employee.tbl; +----+---------+ | Id | Name    | +----+---------+ | 1  | Mohan   | | 2  | Gaurav  | | 3  | Rahul   | +----+---------+ 3 rows in set (0.00 sec)示例mysql> Delimiter // mysql> Create Procedure st_transaction()    -> BEGIN    -> START TRANSACTION;    -> INSERT INTO employee.tbl(name) values ... 阅读更多

如何通过 MySQL 存储过程访问表?

Krantik Chavan
更新于 2020年6月22日 07:02:44

312 次浏览

我们可以从 MySQL 存储过程中访问一个或所有表。以下是一个示例,在该示例中,我们创建了一个存储过程,该过程将表名作为参数,并在调用后,将生成包含表中所有详细信息的结果集。示例mysql> Delimiter // mysql> Create procedure access(tablename varchar(30))    -> BEGIN    -> SET @X := CONCAT('Select * from', ' ', tablename);    -> Prepare statement from @X;    -> Execute statement;    -> END// Query OK, 0 rows affected (0.16 sec)现在使用表名调用该过程,我们将…… 阅读更多

MySQL 存储过程如何在其中调用另一个 MySQL 存储过程?

Vrundesha Joshi
更新于 2020年6月22日 06:48:26

4K+ 次浏览

MySQL存储过程完全可以调用另一个MySQL存储过程。为了演示这一点,我们来看一个例子,其中一个存储过程将调用另一个存储过程来查找last_insert_id。示例:mysql> 创建表 employee.tbl(Id INT NOT NULL AUTO_INCREMENT, Name Varchar(30) NOT NULL, PRIMARY KEY(id)) // 查询成功,0行受影响 (3.87 秒) mysql> 创建存储过程 insert1() -> BEGIN 插入到 employee.tbl(name) 值 ('Ram'); -> END // 查询成功,0行受影响 (0.10 秒)现在,在下一个存储过程insert2()中,我们将调用第一个存储过程,即insert1()。mysql> 创建存储过程 insert2() ... 阅读更多

广告