Kolom yang dihasilkan mysql dari tabel lain

kolom karena data kolom ini dihitung berdasarkan ekspresi yang telah ditentukan sebelumnya atau dari kolom lain .

Apa itu Kolom Virtual?

  • Secara umum kolom virtual tampak seperti kolom tabel normal, tetapi nilainya diturunkan daripada disimpan di disk
  • Kolom virtual adalah salah satu fitur teratas di MySQL 5. 7, mereka dapat menyimpan nilai yang berasal dari satu atau beberapa bidang lain dalam tabel yang sama di bidang baru

    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

    Keterangan

    Kolom 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

    • ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      6 (a. k. a.
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      _7). Nilai tipe ini sebenarnya disimpan dalam tabel
    • ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      _8. Nilai tipe ini tidak disimpan sama sekali. Sebagai gantinya, nilai dihasilkan secara dinamis saat tabel dikueri. Jenis ini adalah default

    Kolom yang dihasilkan juga terkadang disebut kolom yang dihitung atau kolom virtual

    Fitur yang Didukung

    Dukungan Mesin Penyimpanan

    • Kolom yang dihasilkan hanya dapat digunakan dengan mesin penyimpanan yang mendukungnya. Jika Anda mencoba menggunakan mesin penyimpanan yang tidak mendukungnya, Anda akan melihat kesalahan seperti berikut ini
    ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
    
    • Kolom dalam tabel MERGE dapat dibangun di atas kolom yang dihasilkan
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      6
      • Namun, kolom dalam tabel MERGE tidak dapat didefinisikan sebagai
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 dan
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        6 kolom yang dihasilkan

    Dukungan Tipe Data

    • Semua tipe data didukung saat menentukan kolom yang dihasilkan
    • Menggunakan opsi kolom didukung saat menentukan kolom yang dihasilkan
    • Menggunakan opsi kolom AUTO_INCREMENT tidak didukung saat menentukan kolom yang dihasilkan. Sampai MariaDB 10. 2. 25, didukung, tetapi dukungan ini dihapus karena tidak berfungsi dengan benar. Lihat MDEV-11117

    Dukungan Indeks

    • Menggunakan kolom yang dibuat sebagai kunci utama tabel tidak didukung. Lihat MDEV-5590 untuk informasi lebih lanjut. Jika Anda mencoba menggunakan satu sebagai kunci utama, Anda akan melihat kesalahan yang mirip dengan berikut ini
    ERROR 1903 (HY000): Primary key cannot be defined upon a computed column
    
    • Menggunakan
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      _6 kolom yang dihasilkan sebagai bagian dari kunci asing didukung
    • Referensi
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      _6 kolom yang dihasilkan sebagai bagian dari kunci asing juga didukung
      • Namun, penggunaan klausa
        ERROR 1903 (HY000): Primary key cannot be defined upon a computed column
        
        _4,
        ERROR 1903 (HY000): Primary key cannot be defined upon a computed column
        
        5, atau
        ERROR 1903 (HY000): Primary key cannot be defined upon a computed column
        
        6 tidak didukung. Jika Anda mencoba menggunakan klausa yang tidak didukung, Anda akan melihat kesalahan seperti berikut ini
    ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
    
    • Menentukan indeks pada
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      _8 dan
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      6 kolom yang dihasilkan didukung
      • Jika indeks ditentukan pada kolom yang dibuat, pengoptimal akan mempertimbangkan untuk menggunakannya dengan cara yang sama seperti indeks berdasarkan kolom "nyata"

    Dukungan Pernyataan

    • Kolom yang dihasilkan digunakan dalam kueri DML sama seperti kolom "nyata".
      • Namun,
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 dan
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        6 kolom yang dihasilkan berbeda dalam cara penyimpanan datanya
        • Nilai untuk
          ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
          
          6 kolom yang dihasilkan dihasilkan setiap kali kueri DML menyisipkan atau memperbarui baris dengan nilai khusus
          ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
          
          2. Ini menghasilkan nilai kolom, dan disimpan dalam tabel seperti kolom "nyata" lainnya. Nilai ini dapat dibaca oleh kueri DML lainnya seperti kolom "nyata" lainnya
        • Nilai untuk
          ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
          
          8 kolom yang dihasilkan tidak disimpan dalam tabel. Sebagai gantinya, nilai dihasilkan secara dinamis setiap kali kolom diminta. Jika kolom lain dalam satu baris dikueri, tetapi kolom
          ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
          
          8 yang dihasilkan bukan salah satu dari kolom yang dikueri, maka nilai kolom tidak dihasilkan
    • Pernyataan SELECT mendukung kolom yang dihasilkan
    • Kolom yang dihasilkan dapat dirujuk dalam pernyataan INSERT, UPDATE, dan DELETE
      • Namun,
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 atau
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        6 kolom yang dihasilkan tidak dapat secara eksplisit diatur ke nilai lain selain
        ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
        
        7 atau DEFAULT. Jika kolom yang dihasilkan secara eksplisit disetel ke nilai lain, maka hasilnya bergantung pada apakah diaktifkan di sql_mode. Jika tidak diaktifkan, maka peringatan akan dimunculkan dan nilai default yang dihasilkan akan digunakan sebagai gantinya. Jika diaktifkan, maka kesalahan akan dimunculkan sebagai gantinya
    • Pernyataan CREATE TABLE memiliki dukungan terbatas untuk kolom yang dibuat
      • Mendukung mendefinisikan kolom yang dihasilkan dalam tabel baru
      • Ini mendukung penggunaan kolom yang dihasilkan ke tabel partisi
      • Itu tidak mendukung penggunaan klausa versi dengan kolom yang dihasilkan
    • Pernyataan ALTER TABLE memiliki dukungan terbatas untuk kolom yang dihasilkan
      • Ini mendukung klausa
        ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
        
        8 dan
        ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
        
        9 untuk
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        6 kolom yang dihasilkan
      • Itu tidak mendukung klausa
        ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
        
        _8 untuk
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 kolom yang dihasilkan jika tidak disetel ke
        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 |
        +-------+-------------+------+-----+---------+------------+
        
        3. Lihat MDEV-15476 untuk informasi lebih lanjut
      • Itu tidak mendukung klausa
        ERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
        
        _9 untuk
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 kolom yang dihasilkan jika tidak disetel ke
        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 |
        +-------+-------------+------+-----+---------+------------+
        
        3. Lihat MDEV-17035 untuk informasi lebih lanjut
      • Itu tidak mendukung pengubahan tabel jika tidak disetel ke
        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 |
        +-------+-------------+------+-----+---------+------------+
        
        3 jika tabel memiliki kolom yang dihasilkan
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 yang diindeks. Lihat MDEV-14046 untuk informasi lebih lanjut
      • Itu tidak mendukung penambahan
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 kolom yang dihasilkan dengan klausa
        ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
        
        0 jika pernyataan yang sama juga menambahkan kolom lain jika tidak disetel ke
        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 |
        +-------+-------------+------+-----+---------+------------+
        
        3. Lihat MDEV-17468 untuk informasi lebih lanjut
      • Ini juga tidak mendukung pengubahan kolom yang ada menjadi kolom yang dibuat
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8
      • Ini mendukung penggunaan kolom yang dihasilkan ke tabel partisi
      • Itu tidak mendukung penggunaan klausa versi dengan kolom yang dihasilkan
    • Pernyataan DESCRIBE dapat digunakan untuk memeriksa apakah suatu tabel telah menghasilkan kolom
      • Anda dapat mengetahui kolom mana yang dihasilkan dengan mencari kolom di mana
        ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
        
        3 kolom disetel ke
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 atau
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        6. Misalnya
    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 |
    +-------+-------------+------+-----+---------+------------+
    
    • Kolom yang dihasilkan dapat direferensikan dengan benar di baris
      ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
      
      6 dan
      ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
      
      7 di pemicu
    • Pernyataan HANDLER mendukung kolom yang dihasilkan

    Dukungan Ekspresi

    • Sebagian besar ekspresi deterministik legal yang dapat dihitung didukung dalam ekspresi untuk kolom yang dihasilkan
    • Sebagian besar fungsi bawaan didukung dalam ekspresi untuk kolom yang dihasilkan
      • Namun, beberapa fungsi bawaan tidak dapat didukung karena alasan teknis. Misalnya, jika Anda mencoba menggunakan fungsi yang tidak didukung dalam ekspresi, kesalahan akan dihasilkan seperti berikut ini
    ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the GENERATED ALWAYS AS clause of `v`
    
    • Subkueri tidak didukung dalam ekspresi untuk kolom yang dihasilkan karena data yang mendasarinya dapat berubah
    • Menggunakan apa pun yang bergantung pada data di luar baris tidak didukung dalam ekspresi untuk kolom yang dihasilkan
    • Fungsi bawaan non-deterministik didukung dalam ekspresi untuk tidak diindeks
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      8 kolom yang dihasilkan
    • Fungsi bawaan non-deterministik tidak didukung dalam ekspresi untuk
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      6 atau diindeks
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      8 kolom yang dihasilkan
    • Fungsi yang ditentukan pengguna (UDF) didukung dalam ekspresi untuk kolom yang dibuat
      • Namun, MariaDB tidak dapat memeriksa apakah UDF bersifat deterministik, jadi terserah pengguna untuk memastikan bahwa mereka tidak menggunakan UDF non-deterministik dengan
        ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
        
        8 kolom yang dihasilkan
    • Menentukan kolom yang dibuat berdasarkan kolom lain yang dibuat yang ditentukan sebelumnya dalam definisi tabel didukung. Misalnya
    CREATE TABLE t1 (a int as (1), b int as (a));
    
    • Namun, mendefinisikan kolom yang dihasilkan berdasarkan kolom lain yang dihasilkan yang ditentukan setelah definisi tabel tidak didukung dalam ekspresi untuk kolom pembuatan karena kolom yang dihasilkan dihitung dalam urutan yang ditentukan
    • Menggunakan ekspresi yang panjangnya melebihi 255 karakter didukung dalam ekspresi untuk kolom yang dibuat. Batas baru untuk seluruh definisi tabel, termasuk semua ekspresi untuk kolom yang dibuat, adalah 65.535 byte
    • Menggunakan ekspresi konstan didukung dalam ekspresi untuk kolom yang dihasilkan. Sebagai contoh
    CREATE TABLE t1 (a int as (1));
    

    Membuat Nilai Tersimpan Konsisten

    Ketika 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

    • Untuk
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      3 atau
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      4 kolom yang dihasilkan, panjang nilai yang dikembalikan dapat bervariasi tergantung pada bendera sql_mode PAD_CHAR_TO_FULL_LENGTH. Untuk membuat nilai konsisten, buat kolom yang dihasilkan menggunakan fungsi RTRIM() atau RPAD(). Bergantian, buat kolom yang dihasilkan sebagai kolom
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      5 sehingga datanya selalu terisi penuh
    • Jika kolom
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      6 yang dihasilkan didasarkan pada pengurangan nilai
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      7, nilai yang dihasilkan dapat bervariasi tergantung pada seberapa besar nilainya dan flag NO_UNSIGNED_SUBTRACTION sql_mode. Untuk membuat nilai konsisten, gunakan CAST() untuk memastikan bahwa setiap operan
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      7 adalah
      CREATE TABLE t1 (a int as (1), b int as (a));
      
      6 sebelum pengurangan

    MariaDB dimulai dengan 10. 5

    Dimulai 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 columns
    
    6 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. Misalnya

    ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
    
    0

    Dukungan Kompatibilitas MySQL

    • Kata kunci
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      7 didukung sebagai alias untuk kata kunci
      ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
      
      6
    • Tabel dibuat dengan MySQL 5. 7 atau lebih baru yang berisi kolom yang dihasilkan MySQL dapat diimpor ke MariaDB tanpa dump dan pemulihan

    Perbedaan Implementasi

    Kolom 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 Server

    Implementasi kolom yang dihasilkan MariaDB tidak menerapkan batasan berikut yang ada dalam implementasi kolom terhitung Microsoft SQL Server

    • MariaDB memungkinkan variabel server dalam ekspresi kolom yang dihasilkan, termasuk yang berubah secara dinamis, seperti
    • MariaDB mengizinkan fungsi CONVERT_TZ() dipanggil dengan zona waktu bernama sebagai argumen, meskipun nama zona waktu dan offset waktu dapat dikonfigurasi
    • MariaDB mengizinkan fungsi CAST() untuk digunakan dengan rangkaian karakter non-unicode, meskipun rangkaian karakter dapat dikonfigurasi dan berbeda antara binari/versi
    • MariaDB memungkinkan ekspresi FLOAT untuk digunakan dalam kolom yang dihasilkan. Microsoft SQL Server menganggap ekspresi ini "tidak tepat" karena potensi perbedaan lintas platform dalam implementasi dan presisi floating-point
    • Microsoft SQL Server memerlukan pengaturan mode ARITHABORT, sehingga pembagian dengan nol mengembalikan kesalahan, dan bukan NULL
    • Microsoft SQL Server membutuhkan
      CREATE TABLE t1 (a int as (1));
      
      _3 untuk diatur dalam sql_mode. Di MariaDB, jika data dimasukkan tanpa
      CREATE TABLE t1 (a int as (1));
      
      4 diatur dalam sql_mode, maka akan diproses dan disimpan secara berbeda dalam kolom yang dihasilkan yang berisi pengidentifikasi yang dikutip

    Microsoft SQL Server memberlakukan pembatasan di atas dengan melakukan salah satu hal berikut

    • Menolak untuk membuat kolom yang dihitung
    • Menolak untuk mengizinkan pembaruan ke tabel yang berisi mereka
    • Menolak untuk menggunakan indeks pada kolom seperti itu jika tidak dapat dijamin bahwa ekspresi tersebut sepenuhnya deterministik

    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 Pembangunan

    Kolom 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

    Contoh

    Berikut adalah contoh tabel yang menggunakan kolom virtual

    ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
    
    8 dan
    ERROR 1910 (HY000): TokuDB storage engine does not support computed columns
    
    6

    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 columns
    
    5

    Anda juga dapat menggunakan kolom virtual untuk mengimplementasikan "indeks parsial orang miskin". Lihat contoh di akhir