找到 4219 篇文章 关于 MySQLi
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。阅读更多
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 ... 阅读更多
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> ... 阅读更多
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> ... 阅读更多
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 ... 阅读更多
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)现在使用表名调用该过程,我们... 阅读更多
4K+ 次查看
MySQL 存储过程可以在其中调用另一个 MySQL 存储过程。为了演示这一点,我们举一个例子,其中一个存储过程将调用另一个存储过程来查找 last_insert_id。示例mysql> Create table employee.tbl(Id INT NOT NULL AUTO_INCREMENT, Name Varchar(30) NOT NULL, PRIMARY KEY(id))// Query OK, 0 rows affected (3.87 sec) mysql> Create Procedure insert1() -> BEGIN insert into employee.tbl(name) values ('Ram'); -> END// Query OK, 0 rows affected (0.10 sec)现在,在下一个过程 insert2() 中,我们将调用第一个存储过程,即 insert1()。mysql> Create Procedure insert2() ... 阅读更多
362 次查看
假设我们目前正在使用一个名为“query”的数据库,并且它在其中包含以下表 -mysql> Show tables in query; +-----------------+ | Tables_in_query | +-----------------+ | student_detail | | student_info | +-----------------+ 2 rows in set (0.00 sec)现在,以下是一个存储过程,它将接受数据库名称作为其参数,并为我们提供具有详细信息的表列表 -mysql> DELIMITER// mysql> CREATE procedure tb_list(db_name varchar(40)) -> BEGIN -> SET @z := CONCAT('Select * from information_schema.tables WHERE table_schema = ', '\'', db_name, '\''); -> Prepare stmt from @z; ... 阅读更多
71 次查看
假设我们当前正在使用一个名为“query”的数据库,其中包含以下表格:
mysql> Show tables in query;
+-----------------+ | Tables_in_query | +-----------------+ | student_detail | | student_info | +-----------------+ 2 rows in set (0.00 sec)
现在,以下是一个存储过程,它将为我们提供包含详细信息的表格列表:
mysql> DELIMITER//
mysql> CREATE procedure tablelist() -> BEGIN -> Select * from Information_schema.tables WHERE table_schema = 'query'; -> END //
Query OK, 0 rows affected (0.06 sec)
mysql> DELIMITER;
mysql> CALL tablelist()\G
*************************** 1. row *************************** ... 阅读更多