Saya mencoba membuat urutan di MySQL (saya sangat baru mengenal SQL secara keseluruhan). Saya menggunakan kode berikut ini, tetapi menyebabkan kesalahan:
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
ORDID mengacu pada bidang dalam tabel yang saya gunakan. Bagaimana cara membuat urutan dengan benar?
Edit:
Diduga, MySQL tidak menggunakan urutan. Saya sekarang menggunakan kode berikut ini, tetapi ini juga menyebabkan kesalahan. Bagaimana cara memperbaikinya?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
Edit:
Saya pikir saya menemukan perbaikannya. Untuk phpMyAdmin (yang saya gunakan) Anda dapat menggunakan kode berikut.
ALTER TABLE ORD AUTO_INCREMENT = 622;
Saya tidak tahu mengapa ia lebih memilih ini, tetapi jika ada orang lain yang membutuhkan bantuan dengan ini maka ini dia. :)
Ini adalah solusi disarankan oleh manual MySQl:
Jika expr diberikan sebagai argumen untuk LAST_INSERT_ID(), nilai dari argumen argumen dikembalikan oleh fungsi dan diingat sebagai nilai berikutnya yang akan dikembalikan oleh LAST_INSERT_ID(). Hal ini dapat digunakan untuk mensimulasikan sekuens:
Buat tabel untuk menyimpan penghitung urutan dan inisialisasikan:
mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);
Gunakan tabel untuk menghasilkan nomor urut seperti ini:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID();
Pernyataan UPDATE menambah penghitung urutan dan menyebabkan pemanggilan berikutnya ke LAST_INSERT_ID() untuk mengembalikan nilai yang diperbarui. Pernyataan Pernyataan SELECT mengambil nilai itu. Fungsi mysql_insert_id() C API juga dapat digunakan untuk mendapatkan nilai. Lihat Bagian 23.8.7.37, "mysql_insert_id()".
Anda dapat membuat urutan tanpa memanggil LAST_INSERT_ID(), tetapi utilitas Kegunaan menggunakan fungsi dengan cara ini adalah nilai ID akan dipertahankan di server sebagai nilai terakhir yang dihasilkan secara otomatis. Ini ini aman bagi banyak pengguna karena beberapa klien dapat mengeluarkan pernyataan UPDATE pernyataan dan mendapatkan nilai urutan mereka sendiri dengan pernyataan SELECT (atau mysql_insert_id()), tanpa mempengaruhi atau terpengaruh oleh klien lain yang menghasilkan nilai urutan mereka sendiri. klien lain yang menghasilkan nilai urutan mereka sendiri.
Lihat artikel ini. Saya yakin ini akan membantu Anda mendapatkan apa yang Anda inginkan. Jika tabel Anda sudah ada, dan sudah memiliki data di dalamnya, kesalahan yang Anda dapatkan mungkin disebabkan oleh auto_increment yang mencoba menetapkan nilai yang sudah ada untuk record lain.
Singkatnya, seperti yang telah disebutkan orang lain dalam komentar, urutan, seperti yang dipikirkan dan ditangani di Oracle, tidak ada di MySQL. Namun, Anda mungkin dapat menggunakan auto_increment untuk mencapai apa yang Anda inginkan.
Tanpa detail tambahan pada kesalahan spesifik, sulit untuk memberikan bantuan yang lebih spesifik.
UPDATE
CREATE TABLE ORD (
ORDID INT NOT NULL AUTO_INCREMENT,
//Rest of table code
PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;
Tautan ini juga membantu untuk menjelaskan penggunaan auto_increment. Mengatur nilai AUTO_INCREMENT tampaknya menjadi opsi tabel, dan bukan sesuatu yang ditentukan sebagai atribut kolom secara khusus.
Juga, sesuai salah satu tautan dari atas, Anda dapat secara alternatif mengatur nilai awal kenaikan otomatis melalui alter ke tabel Anda.
ALTER TABLE ORD AUTO_INCREMENT = 622;
UPDATE 2
Berikut ini link ke contoh sqlfiddle yang berfungsi, menggunakan auto increment.
Semoga info ini membantu.
Dengan membuat tabel kenaikan Anda harus sadar untuk tidak menghapus baris yang dimasukkan. alasannya adalah untuk menghindari penyimpanan data bodoh yang besar di db dengan ID di dalamnya. Jika tidak, jika mysql restart, ia akan mendapatkan baris maksimal yang ada dan melanjutkan kenaikan dari titik itu seperti yang disebutkan dalam dokumentasi http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html