Правильный способ написать хранимую процедуру в MySQL
Я написал одну хранимую процедуру в базе данных MySQL следующим образом:
CREATE PROCEDURE sp_Test(
IN Mode VARCHAR(50),
IN UserID INT,
....
....
)
BEGIN
SET @sqlQuery = "";
IF (Mode = 'Select') THEN
//Select query
ELSEIF (Mode = 'Update') THEN
//update query
ELSEIF (Mode = 'Delete') THEN
//Delete query
END
END
и согласно моей необходимости я могу назвать это так
CALL sp_Test("Select", 1, ...)
OR
CALL sp_Test("Update", 1, ...)
OR
CALL sp_Test("Delete", 1, ...)
Это нормально для производительности? Или я должен написать отдельные хранимые процедуры для каждого режима, как
для SELECT
CREATE PROCEDURE sp_Test_Select(
IN UserID INT,
....
....
)
BEGIN
//Select query
END
для обновления
CREATE PROCEDURE sp_Test_Update(
IN UserID INT,
....
....
)
BEGIN
//Select query
END
2 ответа
На мой взгляд, нет существенной разницы в производительности этих процедур (если вы не собираетесь использовать их сотни раз в секунду 24x7).
Но есть разница в удобочитаемости. Это существенная разница. test_DELETE(item)
легче понять, чем test("delete", item)
, Имейте в виду, что вы пишете код не только для машины, но и для следующего человека, который будет работать над вашим проектом. Используйте свой второй вариант.
Помимо ограничения производительности (если есть вообще); Всегда рекомендуется иметь отдельную процедуру, определенную для отдельных операций (select
/insert
/update
/delete
) так как
Это увеличивает Redability.
Ремонтопригодность. Отдельная процедура может поддерживаться хорошо, если вообще нужно будет вносить какие-либо изменения в будущем.
Учтите, про передачу параметра для разных операций. За select
скорее всего, вам не нужно передавать какой-либо параметр в процедуру, но для insert
, update
а также delete
вам придется передать параметр. Не будет ли для вас беспорядком разграничить их в рамках единого тела процедуры?