Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

MySQL setara dengan Oracle's SEQUENCE.NEXTVAL

http://docs.Oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html

3.6.9. Menggunakan AUTO_INCREMENT

Atribut AUTO_INCREMENT dapat digunakan untuk menghasilkan identitas unik untuk baris baru:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;
Which returns:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

Tidak ada nilai yang ditentukan untuk kolom AUTO_INCREMENT, jadi MySQL menetapkan nomor urut secara otomatis. Anda juga dapat secara eksplisit menetapkan NULL atau 0 ke kolom untuk menghasilkan nomor urut.

Anda dapat mengambil nilai AUTO_INCREMENT terbaru dengan fungsi LAST_INSERT_ID() SQL atau fungsi mysql_insert_id() C API. Fungsi-fungsi ini khusus untuk koneksi, sehingga nilai pengembaliannya tidak terpengaruh oleh koneksi lain yang juga melakukan penyisipan.

Gunakan tipe data integer terkecil untuk kolom AUTO_INCREMENT yang cukup besar untuk menampung nilai urutan maksimum yang Anda perlukan. Ketika kolom mencapai batas atas tipe data, upaya berikutnya untuk menghasilkan nomor urut gagal. Gunakan atribut UNSIGNED jika memungkinkan untuk memungkinkan rentang yang lebih besar. Misalnya, jika Anda menggunakan TINYINT, nomor urut maksimum yang diizinkan adalah 127. Untuk TINYINT UNSIGNED, maksimumnya adalah 255. Lihat Bagian 11.2.1, “Jenis Bilangan Bulat (Nilai Tepat) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ” untuk rentang semua tipe bilangan bulat.

CatatanUntuk penyisipan beberapa baris, LAST_INSERT_ID() dan mysql_insert_id() sebenarnya mengembalikan kunci AUTO_INCREMENT dari baris pertama yang dimasukkan. Hal ini memungkinkan penyisipan beberapa baris direproduksi dengan benar di server lain dalam penyiapan replikasi.

Jika kolom AUTO_INCREMENT adalah bagian dari beberapa indeks, MySQL menghasilkan nilai urutan menggunakan indeks yang dimulai dengan kolom AUTO_INCREMENT, jika ada. Misalnya, jika tabel hewan berisi indeks PRIMARY KEY (grp, id) dan INDEX (id), MySQL akan mengabaikan PRIMARY KEY untuk menghasilkan nilai urutan. Akibatnya, tabel akan berisi satu urutan, bukan urutan per nilai grp.

Untuk memulai dengan nilai AUTO_INCREMENT selain 1, tetapkan nilai tersebut dengan CREATE TABLE atau ALTER TABLE, seperti ini:

mysql> ALTER TABLE tbl AUTO_INCREMENT =100;InnoDB Notes

Untuk tabel InnoDB, berhati-hatilah jika Anda mengubah kolom yang berisi nilai kenaikan otomatis di tengah urutan pernyataan INSERT. Misalnya, jika Anda menggunakan pernyataan UPDATE untuk menempatkan nilai baru yang lebih besar di kolom kenaikan otomatis, INSERT berikutnya dapat mengalami kesalahan "Entri duplikat". Pengujian apakah nilai kenaikan otomatis sudah ada terjadi jika Anda melakukan DELETE diikuti oleh lebih banyak pernyataan INSERT, atau ketika Anda COMMIT transaksi, tetapi tidak setelah pernyataan UPDATE.

Catatan MyISAM

Untuk tabel MyISAM, Anda dapat menentukan AUTO_INCREMENT pada kolom sekunder dalam indeks multi-kolom. Dalam hal ini, nilai yang dihasilkan untuk kolom AUTO_INCREMENT dihitung sebagai MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. Ini berguna saat Anda ingin memasukkan data ke dalam grup yang diurutkan.

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
Which returns:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

Dalam kasus ini (bila kolom AUTO_INCREMENT adalah bagian dari indeks beberapa kolom), nilai AUTO_INCREMENT digunakan kembali jika Anda menghapus baris dengan nilai AUTO_INCREMENT terbesar di grup mana pun. Ini terjadi bahkan untuk tabel MyISAM, di mana nilai AUTO_INCREMENT biasanya tidak digunakan kembali.

Bacaan Lebih Lanjut

Informasi lebih lanjut tentang AUTO_INCREMENT tersedia di sini:

Cara menetapkan atribut AUTO_INCREMENT ke kolom:Bagian 13.1.17, “CREATE TABLE Syntax”, dan Bagian 13.1.7, “ALTER TABLE Syntax”.

Bagaimana AUTO_INCREMENT berperilaku tergantung pada mode SQL NO_AUTO_VALUE_ON_ZERO:Bagian 5.1.7, “Mode SQL Server”.

Cara menggunakan fungsi LAST_INSERT_ID() untuk menemukan baris yang berisi nilai AUTO_INCREMENT terbaru:Bagian 12.14, “Fungsi Informasi”.

Menyetel nilai AUTO_INCREMENT yang akan digunakan:Bagian 5.1.4, “Variabel Sistem Server”.

AUTO_INCREMENT dan replikasi:Bagian 16.4.1.1, “Replikasi dan AUTO_INCREMENT”.

Variabel sistem server yang terkait dengan AUTO_INCREMENT (auto_increment_increment dan auto_increment_offset) yang dapat digunakan untuk replikasi:Bagian 5.1.4, “Variabel Sistem Server”.

http://search.Oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Labirin Penyetelan Kinerja

  2. Cara Mendapatkan Hari Terakhir Bulan Ini di Oracle

  3. Mengekspor CLOB ke file teks menggunakan Oracle SQL Developer

  4. Oracle mendapatkan kunci asing

  5. persyaratan opatch