sql >> Databasteknik >  >> RDS >> Mysql

Två autoinkrementkolumner eller autoinkrement och samma värde i den andra kolumnen

Så du vill låta en kolumn använda auto_increment-funktionen, men få en annan kolumn i samma tabell att också ha samma värde?

Jag kan inte komma på en anledning till att du skulle behöva den här funktionen. Du kanske kan förklara vad du försöker åstadkomma, och jag kan föreslå en annan lösning?

En trigger fungerar inte för detta. Det är ett kyckling-och-ägg-problem:

  • Du kan inte ändra någon kolumns värde i en AFTER utlösare.
  • Men värdet för automatisk ökning är inte inställt ännu när en BEFORE utlösaren körs.

Det fungerar inte heller att använda en MySQL 5.7 GENERATED kolumn:

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.

Du kan inte göra det i en enda SQL-sats. Du måste INSERT raden och gör sedan omedelbart en UPDATE för att ställa in din andra kolumn till samma värde.

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();

Du kan alternativt generera ID-värdet med någon annan mekanism än AUTO_INCREMENT (till exempel en Memcached inkrementerande nyckel). Sedan kan du infoga det nya värdet i båda kolumnerna:

INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);


  1. Disaster Recovery Planning för MySQL &MariaDB

  2. Är det nödvändigt att skriva ROLLBACK om frågor misslyckas?

  3. Konvertera hex till binär i MySQL

  4. hur du gör din data horisontell