sql >> Databáze >  >> RDS >> Mysql

Dva automatické přírůstky nebo automatické přírůstky a stejná hodnota v druhém sloupci

Takže chcete, aby jeden sloupec používal funkci auto_increment, ale chcete, aby další sloupec ve stejné tabulce měl také stejnou hodnotu?

Nenapadá mě důvod, proč byste tuto funkci potřebovali. Možná byste mohl vysvětlit, čeho se snažíte dosáhnout, a já vám mohu navrhnout jiné řešení?

Spoušť na to nebude fungovat. Je to problém slepice a vejce:

  • Nemůžete změnit hodnotu žádného sloupce v AFTER spoušť.
  • Ale hodnota automatického zvýšení ještě není nastavena, když je BEFORE trigger se spustí.

Také nebude fungovat použití MySQL 5.7 GENERATED sloupec:

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.

Nemůžete to udělat jedním příkazem SQL. Musíte INSERT řádek a poté okamžitě proveďte UPDATE pro nastavení druhého sloupce na stejnou hodnotu.

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

Alternativně můžete vygenerovat hodnotu ID pomocí jiného mechanismu kromě AUTO_INCREMENT (například inkrementační klíč Memcached). Potom můžete vložit novou hodnotu do obou sloupců:

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


  1. Jak vytvořit adresář v Oracle?

  2. Laravel LeftPřipoj se kam

  3. Získejte ID řádku tabulky SQLite FTS3

  4. SEC_CASE_SENSTIVE_LOGON za 12c