sql >> Database >  >> RDS >> Mysql

Twee kolommen voor automatisch verhogen of automatisch verhogen en dezelfde waarde in andere kolom

Dus je wilt één kolom de functie auto_increment laten gebruiken, maar een andere kolom in dezelfde tabel ook dezelfde waarde laten hebben?

Ik kan geen reden bedenken waarom je deze functie nodig zou hebben. Misschien kun je uitleggen wat je probeert te bereiken, en kan ik een andere oplossing voorstellen?

Hiervoor werkt een trigger niet. Het is een kip-en-ei-probleem:

  • U kunt de waarde van een kolom niet wijzigen in een AFTER trekker.
  • Maar de waarde voor automatisch verhogen is nog niet ingesteld wanneer een BEFORE trigger wordt uitgevoerd.

Het zal ook niet werken om een ​​MySQL 5.7 GENERATED te gebruiken kolom:

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.

Je kunt het niet in een enkele SQL-instructie doen. Je moet INSERT de rij, en doe dan onmiddellijk een UPDATE om uw tweede kolom op dezelfde waarde in te stellen.

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

U kunt de ID-waarde ook genereren met een ander mechanisme dan AUTO_INCREMENT (bijvoorbeeld een Memcached oplopende sleutel). Dan zou je de nieuwe waarde in beide kolommen kunnen invoegen:

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


  1. Hoe in te voegen in MySQL met behulp van een voorbereide verklaring met PHP

  2. Het verschil berekenen tussen twee tijdstempels in Oracle in milliseconden

  3. Wanneer/waarom Cascading gebruiken in SQL Server?

  4. mysql wijziging innodb_large_prefix