Bisakah kita membuat urutan di mysql?
table_options dapat berupa salah satu opsi tabel normal di CREATE TABLE tetapi yang paling dapat digunakan adalah Show
KeteranganCREATE SEQUENCE akan membuat urutan yang menghasilkan nilai baru saat dipanggil dengan CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;0. Ini adalah alternatif untuk PENINGKATAN OTOMATIS ketika seseorang ingin memiliki kontrol lebih besar tentang bagaimana angka dihasilkan. Karena SEQUENCE menyimpan nilai-nilai (hingga CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;1) dalam beberapa kasus dapat jauh lebih cepat daripada AUTO INCREMENT. Manfaat lainnya adalah seseorang dapat mengakses nilai terakhir yang dihasilkan oleh semua urutan yang digunakan, yang menyelesaikan salah satu batasan dengan LAST_INSERT_ID() CREATE SEQUENCE memerlukan hak istimewa CREATE DROP SEQUENCE dapat digunakan untuk menghapus sequence, dan ALTER SEQUENCE untuk mengubahnya Argumen untuk MembuatOpsi berikut dapat digunakan Jika CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;2 digunakan maka urutan harus dimulai lagi dari CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;3 setelah kehabisan nilai. Nilai standarnya adalah CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;4 Batasan pada Membuat ArgumenUntuk dapat membuat urutan hukum, berikut ini harus berlaku
Perhatikan bahwa urutan tidak dapat menghasilkan jumlah bit maksimum/minimum 64 karena kendala CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;3 dan CREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;6 DDL atomContohCREATE SEQUENCE s START WITH 100 INCREMENT BY 10; CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10; Pernyataan berikut gagal, karena kenaikan bertentangan dengan default CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10; ERROR 4082 (HY000): Sequence 'test.s3' values are conflicting_ Urutan dapat dibuat dengan menentukan nilai minimum dan maksimum yang bisa diterapkan CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;_ Lihat jugaKomentarKonten yang direproduksi di situs ini adalah milik dari pemiliknya masing-masing, dan konten ini tidak ditinjau sebelumnya oleh MariaDB. Pandangan, informasi, dan opini yang diungkapkan oleh konten ini tidak selalu mewakili MariaDB atau pihak lain mana pun Ini adalah pertanyaan yang telah saya perjuangkan selama bertahun-tahun dan sepertinya saya akhirnya mendapatkan jawabannya (walaupun harus saya akui saya harus melakukan beberapa upaya pengembangan dan menambahkan beberapa ratus baris ke kode server). Server Percona untuk MySQL 8. 0. 20-11 menyertakan fitur baru yang didedikasikan untuk menyelesaikan masalah ini dengan tepat Namun, sebelum mengungkapkan semua rahasianya, pertama-tama mari kita pertimbangkan solusi yang ada. Jadi, kami ingin mendapatkan yang berikut ini MySQL1 2 3 4 5 6 7 8 9 10 PILIH ??? +-------+ . nilai . +-------+ . 0 . . 1 . . . . . N - 1 . +-------+ N baris dalam set (0. 00 dtk) Apa pilihan kita untuk melakukannya? Cara Sekolah TuaMari kita mulai dengan solusi yang paling mudah UNION untuk MenyelamatkanIni mungkin terdengar agak primitif tetapi solusi paling sederhana adalah menggabungkan hasil dari beberapa pernyataan SELECT menjadi satu set hasil tunggal dengan UNION MySQL1 2 3 4 5 6 7 8 9 10 PILIH 0 SEBAGAI nilai UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Meskipun ini dapat bekerja untuk jumlah yang lebih kecil, solusi ini tidak dapat diperluas Tabel Yang Ada Dengan Kolom Yang UnikKatakanlah kita sudah memiliki tabel dengan kolom unik dari tipe data apa pun. Contohnya MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 BUAT TABEL t1(id CHAR TIDAK NULL< PRIMARY KEY); Kueri Oke, 0 baris terpengaruh (0.01 dtk)
MASUKKAN KELUAR t1 NILAI ( 'a'), ('b'), ('c'), ('d'); Kueri Oke, 4 baris terpengaruh (0.00 dtk) Rekor. 4 Duplikat. 0 Peringatan . 0
PILIH * DARI t1; +----+ . id . +----+ . a . . b . . c . . d . +----+ 4 baris dalam set (0. 00 dtk) Sekarang, kita dapat menggabungkan tabel ini dengan salinannya sendiri dan memilih jumlah rekaman yang id dalam salinannya kurang dari atau sama dengan id dalam tabel asli MySQL1 2 3 4 5 6 7 8 9 PILIH JUMLAH (*) - 1 AS< . id value FROM t1, t1 AS t2 WHERE t2.id < = t1. id GROUP OLEH t1. id; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ Kelemahan utama dari solusi ini adalah kompleksitas kuadratiknya pada N yang dapat menyebabkan penggunaan sumber daya yang signifikan ketika N besar Penambahan Variabel Sesi Dalam SELECTAsalkan kita sudah memiliki tabel t1 seperti pada contoh sebelumnya (meskipun batasan kolom unik tidak diperlukan di sini), kita dapat menggabungkannya dengan satu nilai SELECT yang menetapkan nilai awal ke variabel sesi. Pada saat yang sama, untuk setiap catatan dari tabel yang ada, nilai variabel sesi ini akan bertambah MySQL1 2 3 4 5 6 7 8 9 10 PILIH (@val . = @val + 1) - 1 AS value FROM t1, (SELECT @val := 0) AS tt; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set , 2 warnings (0.00 dtk) Yang ini tidak buruk. itu dapat diperluas, kompleksitas linier pada N tidak menyebabkan overhead yang tidak perlu, dan satu-satunya kelemahan adalah persyaratan untuk memiliki tabel yang ada Bergabung dengan Beberapa TampilanKita selalu dapat menggabungkan beberapa tabel (atau tampilan) yang berisi lebih dari satu record untuk mengalikan jumlah total record dalam kumpulan hasil MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 BUAT LIHAT binary_v AS PILIH 0 AS v UNION ALL SELECT 1; Kueri Oke, 0 baris terpengaruh (0.00 dtk)
PILIH * DARI binary_v ORDER BY v; +---+ . v . +---+ . 0 . . 1 . +---+ 2 baris di set (0. 00 dtk)
PILIH b0. v + b1. v * 2 + b2. v * 4 AS nilai FROM binary_v b0, binary_v b1, binary_v b2 ORDER BY value; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . . 4 . . 5 . . 6 . . 7 . +-------+ 8 baris dalam set (0. 00 dtk) Dengan menggunakan pendekatan yang sama, dengan memotong K instance dari binary_v kita dapat menghasilkan urutan nilai 2^K. Demikian pula, kita dapat membuat tampilan untuk digit dan hasilnya mendapatkan nilai 10^K MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 BUAT LIHAT decimal_v AS PILIH 0 AS v UNION ALL SELECT 1 UNION ALL PILIH 2 UNION ALL PILIH 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL PILIH 6 UNION ALL PILIH 7 UNION ALL SELECT 8 UNION ALL SELECT 9; Kueri Oke, 0 baris terpengaruh (0.00 dtk)
PILIH * DARI decimal_v ORDER by v; +---+ . v . +---+ . 0 . . 1 . . 2 . . 3 . . 4 . . 5 . . 6 . . 7 . . 8 . . 9 . +---+ 10 baris di set (0. 00 dtk)
PILIH d0. v + d1. v * 10 + d2. v * 100 AS nilai DARI decimal_v d0, decimal_v d1, decimal_v d2 ORDER BY value; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . . . . 998 . . 999 . +-------+ 1000 baris dalam set (0. 01 dtk) Meskipun ini tampaknya cukup mudah untuk dipahami, rencana eksekusi kueri semacam itu pasti jauh dari sempurna KlasisismeProsedur TersimpanPada dasarnya, sebelum memilih, kita dapat membuat tabel sementara dan mengisinya dengan nomor yang diperlukan menggunakan prosedur tersimpan yang telah dibuat sebelumnya MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 BUAT SEMENTARA TABEL t1 ( value BIGINT UNSIGNED NOT NULL PRIMARY KEY); Kueri Oke, 0 baris terpengaruh (0.01 dtk)
PANGGILAN hasilkan_seq(4); Kueri Oke, 1 baris terpengaruh (0.01 dtk)
PILIH * DARI t1 ORDER BY value; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Prosedur tersimpan itu sendiri dapat didefinisikan sebagai berikut MySQL1 2 3 4 5 6 7 8 9 10 pembatas . BUAT PROSEDUR hasilkan_seq(n BIGINT UNSIGNED) MULAI MENYATAKAN i BESAR TIDAK DITANDATANGANI DEFAULT 0; SEMENTARA i < n DO MASUKKAN KELUAR t1 NILAI(i); SET i = i + 1; AKHIR SAAT ; AKHIR . pembatas ; Rencana eksekusi untuk pendekatan ini hampir sempurna, satu-satunya kelemahan adalah kebutuhan untuk memanggil generate_seq() sebelum menggunakan urutan Pernyataan yang DisiapkanMari kita coba sedikit mengotomatiskan solusi berbasis UNION. Alih-alih mengulangi klausa UNION secara manual, kami dapat membuat pernyataan ini secara dinamis MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 SET @generated_stmt = hasilkan_seq_stmt(4); Kueri Oke, 0 baris terpengaruh (0.00 dtk)
SIAPKAN stmt1 DARI @generated_stmt; Kueri Oke, 0 baris terpengaruh (0.00 dtk) Pernyataan disiapkan
JALANKAN stmt1; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk)
DEALOKASI SIAPKAN stmt1; Kueri Oke, 0 baris terpengaruh (0.00 dtk) Di mana generate_seq_stmt() dapat didefinisikan sebagai berikut MySQL1 2 3 4 5 6 7 8 9 10 11 12 pembatas . BUAT FUNGSI hasilkan_seq_stmt(n BIGINT UNSIGNED )< RETURNS TEXT DETERMINISTIC MULAI MENYATAKAN res TEKS DEFAULT 'SELECT 0 AS value'; MENYATAKAN i BESAR TIDAK DITANDATANGANI DEFAULT 1; SEMENTARA i < n DO SET res = CONCAT(res, ' UNION ALL SELECT ', i); SET i = i + 1; AKHIR SAAT ; KEMBALIKAN res; AKHIR . pembatas ; Ini tampaknya berhasil, tetapi kerugian utama dari solusi ini adalah tidak dapat disematkan langsung ke dalam kueri yang lebih kompleks (kecuali yang terakhir juga diubah menjadi pernyataan yang disiapkan) Mesin Penyimpanan Urutan (MariaDB)MariaDB, di sisi lain, mengambil pendekatan yang sama sekali berbeda. Alih-alih memperluas sintaks SQL dan menciptakan konstruksi baru, di versi 10. 0, mereka mengimplementasikan Sequence Storage Engine yang membuat tabel virtual dan singkat secara otomatis saat pengguna membutuhkannya. Yang harus Anda lakukan adalah menjalankan yang berikut ini MySQL1 2 3 4 5 6 7 8 9 10 PILIH * DARI seq_0_to_3; +-----+ . seq . +-----+ . 0 . . 1 . . 2 . . 3 . +-----+ 4 baris dalam set (0. 00 dtk) This seems nice and clear, however, the idea of reserving an almost infinite number of table names (seq_ 1 2 BUAT TABEL seq_1_to_100 (col INT) ENGINE = InnoDB; ERROR 1050 (42S01). Tabel 'seq_1_to_100' sudah ada Pendekatan ini membutuhkan banyak penanganan kesalahan yang tidak perlu dan percabangan tambahan dalam kode server. Dokumentasi mereka juga menyebutkan beberapa trik (seperti ALTER TABLE seq_1_to_100 ENGINE = BLACKHOLE) yang dapat Anda terapkan untuk mengatasi masalah tertentu, tetapi secara umum, mereka hanya menambahkan lebih banyak kerumitan dan kasus sudut Cara ModernEkspresi Tabel Umum Rekursif (CTE)Di MySQL Server 8. 0. 1, Oracle memperkenalkan Common Table Expressions (CTE), baik non-rekursif maupun rekursif MySQL1 2 3 4 5 6 7 8 9 10 11 DENGAN REKURSIF seq AS ( SELECT 0 AS value UNION ALL SELECT value + 1 FROM seq WHERE value < 3) PILIH * DARI seq; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Meskipun solusi ini dapat digunakan untuk batas atas N yang cukup luas dan tampaknya persis seperti yang kita butuhkan, saya ragu ini dapat dibaca/mudah dipahami Mulai dari MySQL Server 8. 0. 19, Anda dapat sedikit menyederhanakan kueri ini menggunakan LIMIT alih-alih WHERE MySQL1 2 3 4 5 6 7 8 9 10 11 DENGAN REKURSIF seq AS ( SELECT 0 AS value UNION ALL SELECT value + 1 FROM seq LIMIT 4) PILIH * DARI seq; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Namun, kedua solusi tersebut memiliki keterbatasan. Secara default, batas atas N tidak boleh terlalu tinggi MySQL1 2 3 DENGAN REKURSIF seq AS ( SELECT 0 AS value UNION ALL SELECT value + 1 FROM seq LIMIT 1002) PILIH * DARI seq; ERROR 3636 (HY000). Rekursif kueri dibatalkan setelah 1001 . iterations. Coba tingkatkan @@cte_max_recursion_depth menjadi a larger value. Peningkatan dapat menggeser batasan ini NILAI BARIS(…), BARIS(…) …Jika Anda beruntung yang sudah mengupgrade ke MySQL Server 8. 0. 19, Anda dapat menggunakan Pernyataan VALUES (konstruktor nilai tabel yang juga berfungsi sebagai pernyataan SQL mandiri) MySQL1 2 3 4 5 6 7 8 9 10 NILAI ROW (0), ROW (1 ROW(2), ROW(3); +---------+ . kolom_0 . +---------+ . 0 . . 1 . . 2 . . 3 . +---------+ 4 baris dalam set (0. 00 dtk) Yang ini sedikit lebih mudah daripada berbasis UNION tetapi masih kurang ekstensibilitas JSON_TABLE()Di MySQL Server 8. 0. 4 Oracle memperkenalkan fungsi JSON_TABLE() baru yang dapat mengekstrak data dari dokumen JSON dan mengembalikannya sebagai tabel relasional yang memiliki kolom tertentu. Tetapi Anda mungkin bertanya bagaimana ini bahkan berpotensi terkait dengan menghasilkan urutan numerik. Mari kita perhatikan contoh berikut MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 PILIH * DARI JSON_TABLE( '[{"a". 0},{"a". 1},{"a". 2},{"a". 3}]' , "$[*]" KOLOM ( nilai . a" BIGINT UNSIGNED PATH "$.a" ) ) AS tt; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Di sini, kami meneruskan dokumen JSON sederhana ke fungsi JSON_TABLE(). Dokumen JSON itu adalah larik yang terdiri dari serangkaian objek dengan kunci yang telah ditentukan "a". Kami mengulangi semua elemen array yang cocok dengan ekspresi jalur JSON “$[*]” dan mengekstrak nilai dari “$. a” ke dalam kolom bertipe BIGINT UNSIGNED dengan nilai nama Kami dapat melakukan yang lebih baik dan meningkatkan contoh JSON_TABLE() pertama kami MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 PILIH tt. rowid - 1 AS nilai DARI JSON_TABLE( '[{},{},{},{}]', "$[*]" KOLOM (baris FOR ORDINALITY) ) AS tt; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Di sini, kami memiliki larik objek kosong dan menggunakan konstruk khusus UNTUK ORDINALITAS yang setara dengan menentukan kolom sebagai AUTO_INCREMENT dalam pernyataan CREATE TABLE. Meskipun saya harus mencatat bahwa kami masih memiliki sejumlah objek JSON kosong yang telah ditentukan sebelumnya dalam array kami. Itu tidak cukup – kita harus masuk lebih dalam MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SET @upper_bound = 4; Kueri Oke, 0 baris terpengaruh (0.00 dtk)
PILIH tt. rowid - 1 AS nilai DARI JSON_TABLE( CONCAT ( '[{}', REPEAT(',{}', @upper_bound - 1), ']'), "$[*]" KOLOM (baris FOR ORDINALITY) ) AS tt; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Kami hampir sampai Cara Post-ModernPertama-tama mari kita rangkum apa yang berhasil kita capai pada contoh sebelumnya
SEQUENCE_TABLE()Singkatnya, akan sangat bagus untuk memiliki fungsi, katakanlah SEQUENCE_TABLE() yang akan berperilaku identik dengan JSON_TABLE(CONCAT('[{}', REPEAT(',{}', @upper_bound – 1), '] kita Harus saya akui akan sangat buruk dari sisi saya untuk menyelesaikan posting blog ini pada saat ini dengan mengatakan "Solusi berbasis JSON_TABLE () adalah yang terbaik yang kami dapatkan sejauh ini. Hanya itu yang bisa kami lakukan, terima kasih sudah membaca”, jadi saya tidak akan melakukannya Singkat cerita, sekarang Anda bisa menulis yang berikut ini MySQL1 2 3 4 5 6 7 8 9 10 PILIH * DARI SEQUENCE_TABLE(4) AS< tt; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Dan "ya", semudah dan sejelas yang Anda lihat. Sekarang, mari kita perhatikan contoh yang sedikit lebih rumit 1 2 3 4 5 6 7 8 9 10 PILIH nilai AS hasil DARI SEQUENCE_TABLE(8) AS tt WHERE value >= 4; +--------+ . hasil . +--------+ . 4 . . 5 . . 6 . . 7 . +--------+ 4 baris dalam set (0. 00 dtk) Alternatifnya, Anda bisa menulis MySQL1 2 3 4 5 6 7 8 9 10 PILIH nilai + 4 AS result FROM SEQUENCE_TABLE(4) AS tt; +--------+ . hasil . +--------+ . 4 . . 5 . . 6 . . 7 . +--------+ 4 baris dalam set (0. 00 dtk) Contoh lain, bilangan genap dari 0 sampai 6 inklusif MySQL1 2 3 4 5 6 7 8 9 10 PILIH nilai AS hasil DARI SEQUENCE_TABLE(8) AS tt WHERE value % 2 = 0; +--------+ . hasil . +--------+ . 0 . . 2 . . 4 . . 6 . +--------+ 4 baris dalam set (0. 00 dtk) kalau tidak MySQL1 2 3 4 5 6 7 8 9 10 PILIH nilai * 2 AS result FROM SEQUENCE_TABLE(4) AS tt; +--------+ . hasil . +--------+ . 0 . . 2 . . 4 . . 6 . +--------+ 4 baris dalam set (0. 00 dtk) Contoh lain, angka dari 0 sampai 3 dimasukkan dalam urutan terbalik MySQL1 2 3 4 5 6 7 8 9 10 PILIH nilai AS hasil DARI SEQUENCE_TABLE(4) AS tt ORDER BY value DESC; +--------+ . hasil . +--------+ . 3 . . 2 . . 1 . . 0 . +--------+ 4 baris dalam set (0. 00 dtk) kalau tidak MySQL1 2 3 4 5 6 7 8 9 10 PILIH 3 - nilai AS result FROM SEQUENCE_TABLE(4) AS tt; +--------+ . hasil . +--------+ . 3 . . 2 . . 1 . . 0 . +--------+ 4 baris dalam set (0. 00 dtk) SEQUENCE_TABLE() juga dapat digunakan untuk menghasilkan sekumpulan angka acak MySQL1 2 3 4 5 6 7 8 9 10 PILIH LANTAI ( RAND () * 100) AS result FROM SEQUENCE_TABLE(4) AS tt; +--------+ . hasil . +--------+ . 6 . . 37 . . 67 . . 25 . +--------+ 4 baris dalam set (0. 00 dtk) Harap perhatikan bahwa pola penggunaan untuk SEQUENCE_TABLE() tidak terbatas pada angka saja. Kita dapat, misalnya, membuat daftar literal string yang telah ditentukan sebelumnya (mengonversi baris menjadi kolom, jika diinginkan) MySQL1 2 3 4 5 6 7 8 9 10 PILIH ELT ( nilai + 1, 'a', 'b', 'c', 'd') AS result FROM SEQUENCE_TABLE(4) AS tt; +--------+ . hasil . +--------+ . a . . b . . c . . d . +--------+ 4 baris dalam set (0. 00 dtk) Atau sama tetapi dengan nilai berulang MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 PILIH ELT ( nilai % 4 + 1, 'a', 'b', 'c', 'd') AS result FROM SEQUENCE_TABLE(8) AS tt; +--------+ . hasil . +--------+ . a . . b . . c . . d . . a . . b . . c . . d . +--------+ 8 baris dalam set (0. 00 dtk) Terakhir, fungsi tabel ini juga dapat membantu menghasilkan nilai string acak semu MySQL1 2 3 4 5 6 7 8 9 10 PILIH MD5 ( nilai ) AS result FROM SEQUENCE_TABLE(4) AS tt; +----------------------------------+ . hasil . +----------------------------------+ . cfcd208495d565ef66e7dff9f98764da . . c4ca4238a0b923820dcc509a6f75849b . . c81e728d9d4c2f636f067f89cc14862c . . eccbc87e4b5ce2fe28308fd9f2a7baf3 . +----------------------------------+ 4 baris dalam set (0. 00 dtk) Konstruksi ini dapat digunakan untuk mengisi tabel yang ada MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 BUAT TABEL t1 (id BESAR UNSIGNED); Kueri Oke, 0 baris terpengaruh (0.00 dtk)
MASUKKAN KELUAR t1 PILIH * FROM SEQUENCE_TABLE(4) AS tt; Kueri Oke, 4 baris terpengaruh (0.00 dtk) Rekor. 4 Duplikat. 0 Peringatan . 0
PILIH * DARI t1; +------+ . id . +------+ . 0 . . 1 . . 2 . . 3 . +------+ 4 baris dalam set (0. 00 dtk) Atau bahkan untuk membuat yang baru dengan nilai yang sudah diisi sebelumnya MySQL1 2 3 4 5 6 7 8 9 10 11 12 13 14 BUAT TABEL t1 AS PILIH * FROM SEQUENCE_TABLE(4) AS tt; Kueri Oke, 4 baris terpengaruh (0.00 dtk) Rekor. 4 Duplikat. 0 Peringatan . 0
PILIH * DARI t1; +-------+ . nilai . +-------+ . 0 . . 1 . . 2 . . 3 . +-------+ 4 baris dalam set (0. 00 dtk) Saya cukup yakin ada banyak kasus penggunaan lainnya (katakanlah, menghasilkan angka Fibonacci atau mencetak semua bilangan prima dalam rentang tertentu) dan Anda pasti akan dapat menemukan banyak milik Anda sendiri KesimpulanDalam posting blog ini, saya mencoba menunjukkan bahwa SQL adalah bahasa yang cukup kuat dan memungkinkan kita melakukan banyak hal eksotis. Namun, sangat menyebalkan bahwa dalam beberapa kasus yang sangat sederhana, satu-satunya cara untuk melakukan apa yang Anda inginkan adalah menggunakan artileri berat. Contoh dengan SEQUENCE_TABLE() yang saya demonstrasikan menunjukkan bahwa jika menambahkan fungsionalitas baru dengan memperluas kode server adalah satu-satunya pilihan yang tersisa, jangan takut – tidak apa-apa untuk melakukan ini, terutama jika Anda tahu apa yang harus dilakukan Ringkasan solusi kami “Bangun dan Jalankan dengan Percona Server untuk MySQL” menguraikan penyiapan database MySQL® di lokasi menggunakan Percona Server untuk MySQL. Ini mencakup failover dan komponen kelangsungan bisnis dasar Bagaimana menjalankan urutan di MySQL?Memulai Urutan pada Nilai Tertentu
Bagaimana cara membuat urutan angka di MySQL?Untuk membuat urutan di MySQL secara otomatis, Anda mengatur atribut AUTO_INCREMENT untuk sebuah kolom , yang biasanya berupa kolom primary key. Aturan berikut diterapkan saat Anda menggunakan atribut AUTO_INCREMENT. Setiap tabel hanya memiliki satu kolom AUTO_INCREMENT yang tipe datanya biasanya bilangan bulat.
Bagaimana Anda membuat urutan dalam SQL?Sintaks. BUAT URUTAN nama_urutan MULAI DENGAN nilai_awal KENAIKAN BERDASARKAN nilai_peningkatan MINVALUE nilai minimum MAXVALUE nilai maksimum SIKLUS. NOCYCLE ; sequence_name. Nama urutan. nilai_awal. nilai awal dari mana urutan dimulai.
Apa urutan bagaimana itu dihasilkan di MySQL?Buat tabel untuk menampung penghitung urutan dan menginisialisasi. urutan mysql> CREATE TABLE (id INT NOT NULL); . mysql> UPDATE urutan SET id=LAST_INSERT_ID(id+1); |