如何以正确的方式在mysql中创建存储过程


how to create a stored procedure in mysql the right way

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;

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