PHP mysqli存储过程快速指南,http://php.net/manual/en/mysqli.quickstart.stored-procedures.php:
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query("CREATE PROCEDURE p(IN id_val INT) BEGIN INSERT INTO test(id) VALUES(id_val); END;")) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
这不是删除程序然后替换它吗?这是正确的方法吗?删除它有什么意义?删除它并不能否定拥有一个可以在MySQL连接期间调用的过程的全部意义吗?
您必须首先删除"旧"过程,否则CREATE将失败,并出现"已存在"错误。数据库中几乎每个对象都是一样的,例如
CREATE TABLE foo ... // creates the table
CREATE TABLE foo ... // will **NOT** replace the one just created
不能仅仅通过重新定义表/proc/db来"覆盖"它。必须先删除原始表。
考虑一下,如果一家大银行的某个糟糕的DBA意外运行,会发生什么混乱
CREATE DATABASE clients;
并破坏了他们的整个客户端数据库,因为数据库引擎用这个新的空数据库替换了原始数据库。