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

MySQL тригер за актуализиране на поле до стойността на id

Не знам начин да направя това с едно изявление, дори с помощта на тригер.

Решението за задействане, което @Lucky предложи, би изглеждало така в MySQL:

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END

Има обаче проблем. В BEFORE INSERT фаза, автоматично генерираният id стойността все още не е генерирана. Така че, ако group_id е null, по подразбиране е NEW.id което винаги е 0.

Но ако промените този тригер да се задейства по време на AFTER INSERT фаза, така че имате достъп до генерираната стойност на NEW.id , не можете да променяте стойностите на колоните.

MySQL не поддържа изрази за DEFAULT на колона, така че не можете да декларирате това поведение и в дефиницията на таблицата. *Актуализация:MySQL 8.0.13 поддържа DEFAULT (<expression>) но изразът все още не може да зависи от стойност за автоматично увеличение (това е документирано ).

Единственото решение е да направите INSERT и след това незабавно направете UPDATE за да промените group_id ако не е зададено.

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();


  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 екземпляри на Linux сървър - използвайте отделен конфигурационен файл на MySQL

  2. Значение на MySQL INT

  3. Ограничение на състоянието на MySQL IN

  4. Как да премахнете водещите и крайните празни места в полето на MySQL?

  5. Грешка при инсталиране на mysql2:Неуспешно изграждане на собствено разширение на gem