0

用于存储过程的 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 连接期间调用的过程的全部意义吗?

4

1 回答 1

0

您必须先删除“旧”过程,否则 CREATE 将失败并出现“已经存在”错误。对于数据库中的几乎每个对象都是一样的,例如

CREATE TABLE foo ...   // creates the table
CREATE TABLE foo ...   // will **NOT** replace the one just created

您不能仅通过重新定义来“覆盖”表/proc/db。你必须先放弃原来的。

考虑一下如果一家大银行的一些糟糕的 DBA 意外跑了会发生的混乱

CREATE DATABASE clients;

并丢弃了他们的整个客户端数据库,因为数据库引擎用这个新的空数据库替换了原始数据库。

于 2013-07-10T21:10:32.953 回答