Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е в тригера MySQL да зададете потребителска променлива с NEW.col и да я използвате в заявка за актуализиране?

Това не е възможно, както е описано с динамичен sql / подготвен израз. Ще генерира Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger при опит дори за CREATE TRIGGER .

Най-близкото до автоматизацията можете да използвате CREATE EVENT . Събитията са планирани съхранени програми, които се изпълняват по график/интервал по ваш избор. Интервалите са:

Можете да зададете "флаг", така да се каже, на ред, като например таблицата, която изобразявате по-горе, която има тригера След вмъкване. След това събитието може да изпълни Подготвено изявление динамично и го изпълнете.

Вижте отговора ми тук относно Управление на събития .

Трябва да кажа, че дори и да участвате в събитие, това, което предлагате, е почти Винаги знакът за лош дизайн на схемата, който няма да издържи добре на партньорска проверка.

Причината, поради която динамичният sql и Prepared Stmt не са разрешени, е, че тригерът трябва да бъде бърз и дори DDL може да се промъкне в низа и да се изпълни. И DDL stmts като ALTER TABLE са забранени в тригерите (може да отнеме часове, за да се изпълнят буквално).

Вашата схема може също така да има една споделена таблица с колона ven_code като диференциалната колона. Вместо това сте избрали да създадете нови таблици за всеки ven_code . Това обикновено е лош дизайн и избор на производителност.

Ако имате нужда от помощ с дизайна на схемата, ще се радвам да разговарям за това с вас в стая за чат.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Намерете най-близкия до точка полигон

  2. MYSQL И заявка, която да задоволи в същата колона

  3. Неуспешна работа за mysqld.service Вижте състоянието на systemctl mysqld.service

  4. Премахване на HTML тагове от записа

  5. $db =нов PDO(mysql:host=$host;db_name=$db_name, $user, $pass);