Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dwie kolumny autoinkrementacji lub autoinkrementacja i ta sama wartość w innej kolumnie

Chcesz, aby jedna kolumna korzystała z funkcji auto_increment, ale aby inna kolumna w tej samej tabeli również miała tę samą wartość?

Nie mogę wymyślić powodu, dla którego ta funkcja byłaby potrzebna. Może mógłbyś wyjaśnić, co chcesz osiągnąć, a ja zasugeruję inne rozwiązanie?

Spust nie zadziała w tym przypadku. To problem z kurczakiem i jajkiem:

  • Nie możesz zmienić wartości żadnej kolumny w AFTER cyngiel.
  • Ale wartość automatycznego przyrostu nie jest jeszcze ustawiona, gdy BEFORE wyzwalacz jest wykonywany.

Nie zadziała również użycie MySQL 5.7 GENERATED kolumna:

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.

Nie da się tego zrobić w jednej instrukcji SQL. Musisz INSERT wiersz, a następnie natychmiast wykonaj UPDATE aby ustawić drugą kolumnę na tę samą wartość.

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

Możesz alternatywnie wygenerować wartość identyfikatora za pomocą innego mechanizmu niż AUTO_INCREMENT (na przykład klucz inkrementacyjny Memcached). Następnie możesz wstawić nową wartość w obu kolumnach:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja MySQL COS() — zwraca cosinus liczby w MySQL

  2. Jak wyświetlić obraz mysql blob w kontroli obrazu asp.net?

  3. Podstawy kluczy obcych w MySQL?

  4. Jak uzyskać rozmiar tabeli MySQL dla tabel w bazie danych?

  5. Jak stworzyć moduł Nadchodzące urodziny w Railsach?