2016-07-12 15 views

Antwort

0

Definieren Sie einen Trigger vor oder nach dem Einfügen und weisen Sie den Wert des 2. Feldes im Trigger zu.

Wenn das erste Feld eine Autoinkrement-Spalte ist, müssen Sie einen After-Insert-Trigger verwenden. Wenn Ihre Anwendung dem ersten Feld einen Wert zuweist, können Sie einen Trigger vor dem Einfügen verwenden.

Allerdings würde ich nicht unbedingt den Wert auf einfügen duplizieren. Sie können das 2. Feld beim Einfügen auf Null setzen, was bedeutet, dass sein Wert dem ersten Feld entspricht. Der einzige Nachteil dieses Ansatzes ist, dass es schwieriger sein kann, Joins im zweiten Feld zu erstellen.

0

Sie möchten also, dass eine Spalte die Funktion auto_increment verwendet, aber eine andere Spalte derselben Tabelle denselben Wert hat?

Ich kann mir keinen Grund vorstellen, warum Sie diese Funktion benötigen würden. Vielleicht könnten Sie erklären, was Sie erreichen wollen, und ich kann Ihnen eine andere Lösung vorschlagen?

Ein Trigger wird nicht funktionieren. Es ist ein Huhn-und-Ei-Problem:

  • Es kann keine Spalte Wert in einem AFTER Trigger ändern.
  • Der Autoinkrementwert ist jedoch noch nicht festgelegt, wenn ein BEFORE Trigger ausgeführt wird.

Es wird auch nicht eine MySQL 5.7 GENERATED Spalte zu verwenden, arbeiten:

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. 

Sie es nicht in einer einzigen SQL-Anweisung tun. Sie müssen INSERT die Zeile und dann sofort eine UPDATE, um Ihre zweite Spalte auf den gleichen Wert festlegen.

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

Sie können alternativ den ID-Wert unter Verwendung eines anderen Mechanismus erzeugen neben AUTO_INCREMENT (zum Beispiel ein Memcached Schlüssel Erhöhen). Dann könnten Sie den neuen Wert in beide Spalten einfügen:

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