Mysql menghasilkan kolom pernyataan if

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 dibuat
  • Menggunakan opsi kolom didukung saat menentukan kolom yang dibuat
  • 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 dihasilkan
    • 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. Sebagai contoh
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 dibuat
    • 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 dibuat
  • 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. Sebagai contoh
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. Sebagai contoh

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

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.