Sintaks kolom yang dihasilkan MariaDB dirancang agar mirip dengan sintaks untuk kolom terhitung Microsoft SQL Server dan kolom virtual Oracle Database. Di MariaDB 10. 2 dan yang lebih baru, sintaks juga kompatibel dengan sintaks untuk kolom yang dihasilkan MySQL Show
KeteranganKolom yang dihasilkan adalah kolom dalam tabel yang tidak dapat secara eksplisit diatur ke nilai tertentu dalam kueri DML. Sebagai gantinya, nilainya dihasilkan secara otomatis berdasarkan ekspresi. Ekspresi ini mungkin menghasilkan nilai berdasarkan nilai kolom lain dalam tabel, atau mungkin menghasilkan nilai dengan memanggil fungsi bawaan atau fungsi yang ditentukan pengguna (UDF) Ada dua jenis kolom yang dihasilkan
Kolom yang dihasilkan juga terkadang disebut kolom yang dihitung atau kolom virtual Fitur yang DidukungDukungan Mesin Penyimpanan
ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
Dukungan Tipe Data
Dukungan Indeks
ERROR 1903 (HY000): Primary key cannot be defined upon a computed column
ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
Dukungan Pernyataan
DESCRIBE table1; +-------+-------------+------+-----+---------+------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+------------+ | a | int(11) | NO | | NULL | | | b | varchar(32) | YES | | NULL | | | c | int(11) | YES | | NULL | VIRTUAL | | d | varchar(5) | YES | | NULL | PERSISTENT | +-------+-------------+------+-----+---------+------------+
Dukungan Ekspresi
ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
CREATE TABLE t1 (a int as (1), b int as (a));
CREATE TABLE t1 (a int as (1)); Membuat Nilai Tersimpan KonsistenKetika kolom yang dihasilkan adalah ERROR 1910 (HY000): TokuDB storage engine does not support computed columns_6 atau diindeks, nilai ekspresi harus konsisten terlepas dari flag Mode SQL di sesi saat ini. Jika tidak, maka tabel akan terlihat rusak ketika nilai yang seharusnya dikembalikan oleh ekspresi yang dihitung dan nilai yang sebelumnya disimpan dan/atau diindeks menggunakan pengaturan sql_mode yang berbeda tidak setuju Saat ini ada dua kelas inkonsistensi yang terpengaruh. bantalan karakter dan pengurangan tanpa tanda tangan
MariaDB dimulai dengan 10. 5Dimulai dari MariaDB 10. 5, ada kesalahan fatal yang dihasilkan saat mencoba membuat kolom yang dihasilkan yang nilainya dapat berubah tergantung pada Mode SQL saat datanya ERROR 1910 (HY000): TokuDB storage engine does not support computed columns6 atau diindeks Untuk kolom yang dihasilkan yang memiliki nilai yang berpotensi tidak konsisten, peringatan tentang ekspresi buruk akan dihasilkan saat pertama kali digunakan (jika peringatan diaktifkan) Dimulai dari MariaDB 10. 4. 8, MariaDB 10. 3. 18, dan MariaDB 10. 2. 27 kolom yang dihasilkan berpotensi tidak konsisten mengeluarkan peringatan saat dibuat atau pertama kali digunakan (tanpa membatasi pembuatannya) Berikut adalah contoh dua tabel yang akan ditolak di MariaDB 10. 5 dan diperingatkan di versi terdaftar lainnya CREATE TABLE bad_pad ( txt CHAR(5), -- CHAR -> VARCHAR or CHAR -> TEXT can't be persistent or indexed: vtxt VARCHAR(5) AS (txt) PERSISTENT ); CREATE TABLE bad_sub ( num1 BIGINT UNSIGNED, num2 BIGINT UNSIGNED, -- The resulting value can vary for some large values vnum BIGINT AS (num1 - num2) VIRTUAL, KEY(vnum) ); Peringatan untuk tabel di atas terlihat seperti ini Warning (Code 1901): Function or expression '`txt`' cannot be used in the GENERATED ALWAYS AS clause of `vtxt` Warning (Code 1105): Expression depends on the @@sql_mode value PAD_CHAR_TO_FULL_LENGTH Warning (Code 1901): Function or expression '`num1` - `num2`' cannot be used in the GENERATED ALWAYS AS clause of `vnum` Warning (Code 1105): Expression depends on the @@sql_mode value NO_UNSIGNED_SUBTRACTION Untuk mengatasi masalah ini, paksa padding atau ketik agar ekspresi kolom yang dihasilkan mengembalikan nilai yang konsisten. Sebagai contoh ERROR 1910 (HY000): TokuDB storage engine does not support computed columns0 Dukungan Kompatibilitas MySQL
Perbedaan ImplementasiKolom yang dihasilkan tunduk pada berbagai kendala di DBMS lain yang tidak ada dalam implementasi MariaDB. Kolom yang dihasilkan juga dapat disebut kolom yang dihitung atau kolom virtual dalam implementasi yang berbeda. Berbagai detail untuk implementasi tertentu dapat ditemukan dalam dokumentasi untuk setiap DBMS tertentu Perbedaan Implementasi Dibandingkan dengan Microsoft SQL ServerImplementasi kolom yang dihasilkan MariaDB tidak menerapkan batasan berikut yang ada dalam implementasi kolom terhitung Microsoft SQL Server
Microsoft SQL Server memberlakukan pembatasan di atas dengan melakukan salah satu hal berikut
Di MariaDB, selama sql_mode, bahasa, dan pengaturan lain yang berlaku selama CREATE TABLE tetap tidak berubah, ekspresi kolom yang dihasilkan akan selalu dievaluasi sama. Jika salah satu dari hal ini berubah, perlu diketahui bahwa ekspresi kolom yang dihasilkan mungkin tidak dievaluasi dengan cara yang sama seperti sebelumnya Jika Anda mencoba memperbarui kolom virtual, Anda akan mendapatkan kesalahan jika default diaktifkan di sql_mode, atau peringatan sebaliknya Sejarah PembangunanKolom yang dihasilkan awalnya dikembangkan oleh Andrey Zhakov. Itu kemudian dimodifikasi oleh Sanja Byelkin dan Igor Babaev di Program Monty untuk dimasukkan ke dalam MariaDB. Monty mengerjakan MariaDB 10. 2 untuk mengangkat beberapa batasan lama ContohBerikut adalah contoh tabel yang menggunakan kolom virtual ERROR 1910 (HY000): TokuDB storage engine does not support computed columns8 dan ERROR 1910 (HY000): TokuDB storage engine does not support computed columns6 ERROR 1910 (HY000): TokuDB storage engine does not support computed columns_1 Jika Anda mendeskripsikan tabel, Anda dapat dengan mudah melihat kolom mana yang virtual dengan melihat kolom "Ekstra". DESCRIBE table1; +-------+-------------+------+-----+---------+------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+------------+ | a | int(11) | NO | | NULL | | | b | varchar(32) | YES | | NULL | | | c | int(11) | YES | | NULL | VIRTUAL | | d | varchar(5) | YES | | NULL | PERSISTENT | +-------+-------------+------+-----+---------+------------+ Untuk mengetahui fungsi apa yang menghasilkan nilai kolom virtual, Anda dapat menggunakan CREATE TABLE t1 (a int as (1));7 ERROR 1910 (HY000): TokuDB storage engine does not support computed columns_3 Jika Anda mencoba memasukkan nilai non-default ke dalam kolom virtual, Anda akan menerima peringatan dan apa yang Anda coba masukkan akan diabaikan dan sebagai gantinya nilai yang diturunkan dimasukkan ERROR 1910 (HY000): TokuDB storage engine does not support computed columns_4 Jika klausa CREATE TABLE t1 (a int as (1));8 ditentukan, itu harus ditempatkan langsung setelah definisi tipe, sebelum CREATE TABLE t1 (a int as (1));9 ERROR 1910 (HY000): TokuDB storage engine does not support computed columns5 Anda juga dapat menggunakan kolom virtual untuk mengimplementasikan "indeks parsial orang miskin". Lihat contoh di akhir Bagaimana cara membuat kolom yang dibuat secara otomatis di MySQL?MySQL menghasilkan sintaks kolom
. First, specify the column name and its data type. Selanjutnya, tambahkan klausa GENERATED ALWAYS untuk menunjukkan bahwa kolom tersebut adalah kolom yang dihasilkan. Kemudian, tunjukkan apakah jenis kolom yang dihasilkan menggunakan opsi yang sesuai. VIRTUAL atau TERSIMPAN.
Bagaimana cara menambahkan kolom yang dihasilkan di SQL?Untuk membuat kolom yang dihasilkan, gunakan klausa GENERATED ALWAYS AS di CREATE TABLE , misalnya. BUAT TABEL orang (. , tinggi_cm numerik, tinggi_dalam numerik DIHASILKAN SELALU SEBAGAI (tinggi_cm / 2. 54) TERSIMPAN ); .
Kolom mana yang selalu dihasilkan?“Kolom Selalu Dihasilkan”. adalah kolom, bidang tabel, diisi oleh mesin DB2. sesuatu seperti kolom dengan nilai default tetapi dalam hal ini selalu dengan nilai default tidak hanya ketika pengguna tidak memberikan nilai.
Apa yang dihasilkan di MySQL?Definisi kolom yang dihasilkan dapat merujuk ke kolom basis apa pun (nongenerasi) dalam tabel apakah definisinya muncul lebih awal atau lebih baru . Atribut AUTO_INCREMENT tidak dapat digunakan dalam definisi kolom yang dihasilkan. Kolom AUTO_INCREMENT tidak dapat digunakan sebagai kolom dasar dalam definisi kolom yang dihasilkan. Pada MySQL 5. 7. |