Я не понимаю, зачем вам в первую очередь бежать с помощью обратных галочек.
В операторе ОБНОВЛЕНИЕ x SET a = b , a всегда должно ссылаться на столбец x . b однако может быть переменной или столбцом. Учитывая, как локальная область действия и разрешение переменных работают в хранимых процедурах , b всегда будет ссылаться на локальную переменную, даже если существует столбец с тем же именем в x .
Таким образом, я не могу воспроизвести вашу проблему. Я пробовал так:
mysql> SELECT * FROM comments;
+----+-----------+---------+
| id | parent_id | content |
+----+-----------+---------+
| 1 | 0 | bar |
| 2 | 0 | baz |
+----+-----------+---------+
2 rows in set (0.00 sec)
mysql> delimiter //
mysql> CREATE PROCEDURE foo(IN content TEXT)
-> BEGIN
-> UPDATE comments SET content = content;
-> END //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> CALL foo('changed!');
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM comments;
+----+-----------+----------+
| id | parent_id | content |
+----+-----------+----------+
| 1 | 0 | changed! |
| 2 | 0 | changed! |
+----+-----------+----------+
2 rows in set (0.00 sec)
Как видите, столбец таблицы комментариев content обновляется, хотя content также является именем параметра хранимой процедуры foo .
Вы уверены, что для ОБНОВЛЕНИЯ клиентов SET Name = Name; выдает ошибку?
Из приведенного выше объяснения кажется логичным, что
UPDATE customers SET Name = `Name`;
UPDATE customers SET `Name` = Name;
UPDATE customers SET `Name` = `Name`;
все имеют одинаковый эффект.
Редактировать: Конечно, для операторов SELECT ситуация будет иной.