sql >> Database teknologi >  >> RDS >> Mysql

To autoincrements-kolonner eller autoincrement og samme værdi i anden kolonne

Så du vil lade en kolonne bruge auto_increment-funktionen, men få en anden kolonne i samme tabel til at have samme værdi?

Jeg kan ikke komme i tanke om en grund til at du skal bruge denne funktion. Måske du kunne forklare, hvad du forsøger at opnå, og jeg kan foreslå en anden løsning?

En trigger virker ikke til dette. Det er et kylling-og-æg-problem:

  • Du kan ikke ændre nogen kolonnes værdi i en AFTER udløser.
  • Men den automatiske stigningsværdi er ikke indstillet endnu, når en BEFORE trigger udføres.

Det vil heller ikke fungere at bruge en MySQL 5.7 GENERATED kolonne:

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 ikke gøre det i en enkelt SQL-sætning. Du skal INSERT rækken, og foretag derefter straks en UPDATE for at indstille din anden kolonne til samme værdi.

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 generere ID-værdien ved hjælp af en anden mekanisme end AUTO_INCREMENT (for eksempel en Memcached inkrementerende nøgle). Så kan du indsætte den nye værdi i begge kolonner:

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


  1. Hvordan administrerer du databaser i udvikling, test og produktion?

  2. MySQL CURRENT_TIMESTAMP som DEFAULT

  3. Sådan overvåger du PostgreSQL ved hjælp af Nagios

  4. PostgreSQL fejl ved forsøg på at oprette en udvidelse