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

Две колони с автоматично нарастване или автоматично увеличение и същата стойност в друга колона

Значи искате да позволите на една колона да използва функцията auto_increment, но да направите друга колона в същата таблица също да има същата стойност?

Не мога да измисля причина да се нуждаете от тази функция. Може би бихте могли да обясните какво се опитвате да постигнете и аз мога да предложа различно решение?

Спусъкът няма да работи за това. Това е проблем с пиле и яйце:

  • Не можете да промените стойността на нито една колона в AFTER задействане.
  • Но стойността на автоматично увеличение все още не е зададена, когато BEFORE тригерът се изпълнява.

Също така няма да работи да използвате MySQL 5.7 GENERATED колона:

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT GENERATED ALWAYS AS (id)
);

ERROR 3109 (HY000): Generated column 'why_would_you_want_this' 
cannot refer to auto-increment column.

Не можете да го направите с един SQL израз. Трябва да INSERT реда и след това незабавно направете UPDATE за да настроите втората колона на същата стойност.

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT
);

INSERT INTO MyTable () VALUES ();

UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID() 
WHERE id = LAST_INSERT_ID();

Като алтернатива можете да генерирате стойността на идентификатора, като използвате някакъв друг механизъм освен AUTO_INCREMENT (например инкрементиращ ключ Memcached). След това можете да вмъкнете новата стойност и в двете колони:

INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_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. PDO bind_param е недефиниран метод

  2. Най-добрият начин да съхранявате име на категория от php в таблица на mysql

  3. Заобиколно решение за динамични изрази в съхранени процедури, извиквани от тригери

  4. #1221 - Неправилно използване на UPDATE и ORDER BY

  5. MySQL групиране на резултатите по периоди от време