Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

peningkatan otomatis siklik untuk setiap nilai kunci

MyISAM mendukung perilaku ini. Buat kunci utama dua kolom, dan buat kedua penambahan kolom secara otomatis. Ini akan dimulai dari awal untuk setiap nilai yang berbeda di kolom pertama.

CREATE TABLE t (i INT, j INT AUTO_INCREMENT, PRIMARY KEY (i,j)) ENGINE=MyISAM;
INSERT INTO t (i) VALUES (1), (1), (2), (2), (1), (3);
SELECT * FROM t; 

+---+---+
| i | j |
+---+---+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
+---+---+

Tetapi jika Anda memikirkannya, ini hanya thread-safe di mesin penyimpanan yang melakukan penguncian tingkat tabel untuk pernyataan INSERT. Karena INSERT harus mencari baris lain dalam tabel untuk menemukan j maks nilai per i . yang sama nilai. Jika orang lain melakukan INSERT secara bersamaan, itu menciptakan kondisi balapan.

Jadi, ketergantungan pada MyISAM, yang melakukan penguncian tingkat tabel pada INSERT.

Lihat referensi ini di manual:http:// dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html di bawah bagian, Catatan MyISAM .

Ada banyak alasan bagus untuk tidak menggunakan MyISAM. Faktor penentu bagi saya adalah kecenderungan MyISAM untuk merusak data.

Kembali komentar Anda:

InnoDB tidak mendukung perilaku kenaikan per grup yang dijelaskan di atas. Anda dapat membuat kunci utama multi-kolom, tetapi kesalahan yang Anda dapatkan adalah karena InnoDB mengharuskan kolom peningkatan otomatis menjadi kolom pertama dalam kunci tabel (tidak sepenuhnya harus menjadi kunci utama)

Terlepas dari posisi kolom kenaikan otomatis di kunci multi-kolom, itu hanya bertambah ketika Anda menggunakannya dengan InnoDB; itu tidak menomori entri per nilai yang berbeda di kolom lain.

Untuk melakukan ini dengan tabel InnoDB, Anda harus mengunci tabel secara eksplisit selama durasi INSERT, untuk menghindari kondisi balapan. Anda akan melakukan kueri SELECT Anda sendiri untuk nilai maksimal dalam grup yang Anda masukkan. Kemudian masukkan nilai itu + 1.

Pada dasarnya, Anda harus melewati fitur peningkatan otomatis dan menentukan nilai alih-alih membuatnya secara otomatis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Datanya Null. Metode atau properti ini tidak dapat dipanggil pada nilai nol. (menggunakan kotak kombo)

  2. Apa definisi kardinalitas dalam SQL

  3. SQL Query berfungsi di meja kerja tetapi memberikan kesalahan sintaksis di java

  4. MySql Bagaimana cara mengatur variabel lokal dalam pernyataan pembaruan (Sintaks?)

  5. Apa yang Setara dengan MySQL dari Fungsi CHOOSE() SQL Server?