全部产品
Search
文档中心

AnalyticDB:BUAT TAMPILAN

更新时间:Jul 06, 2025

Tampilan adalah tabel virtual yang dihasilkan dari kueri terhadap satu atau lebih tabel tetapi tidak menyimpan data aktual. Tampilan dapat menyederhanakan kueri kompleks dan meningkatkan keamanan data. Topik ini menjelaskan cara menggunakan pernyataan CREATE VIEW untuk membuat tampilan.

Catatan Penggunaan

Kompatibilitas tampilan antara AnalyticDB for MySQL dan MySQL:

  • Versi sebelum 3.1.9.0

    AnalyticDB for MySQL tidak kompatibel dengan perilaku default MySQL. Jika kolom ditambahkan ke atau dihapus dari tampilan, sistem mendeteksi perubahan jumlah kolom dalam respons pernyataan SELECT * FROM <view_name>;, menentukan bahwa tampilan tersebut tidak valid, lalu melaporkan kesalahan berikut: Tampilan '<view_name>' sudah usang; harus dibuat ulang.

  • Versi 3.1.9.0 dan yang lebih baru

    AnalyticDB for MySQL kompatibel dengan perilaku default MySQL. Saat menggunakan pernyataan CREATE VIEW untuk membuat tampilan, AnalyticDB for MySQL menyimpan pernyataan setelah mem-parsing asterisk (*) dalam pernyataan menjadi kolom tertentu. Dalam hal ini, tidak ada kesalahan yang terjadi saat Anda menambahkan atau menghapus kolom.

Untuk memastikan kompatibilitas dengan perilaku default MySQL, disarankan menggunakan kluster AnalyticDB for MySQL versi 3.1.9.0 atau yang lebih baru untuk membuat tampilan. Ini mencegah masalah tak terduga yang disebabkan oleh asterisk (*), seperti semantik ambigu dan kesalahan.

Catatan

Kompatibilitas kluster AnalyticDB for MySQL versi 3.1.9.0 atau yang lebih baru dengan perilaku MySQL dapat menyebabkan dampak khusus. Misalnya, ketika Anda mengubah nama Kolom C menjadi Kolom D, sistem gagal menemukan Kolom C saat merujuk Kolom A, Kolom B, dan Kolom C, lalu melaporkan kesalahan. Ini adalah hasil yang diharapkan karena tahap parsing di mana pemeriksaan sintaksis SQL dan otentikasi dilakukan lebih awal daripada tahap optimisasi di mana kolom dihapus. Sistem melaporkan kesalahan pada tahap parsing tanpa memandang apakah Kolom C digunakan untuk kueri. Di AnalyticDB for MySQL versi sebelum 3.1.9.0, sistem hanya memeriksa apakah jumlah kolom dalam tampilan sama dengan jumlah kolom yang dirujuk oleh asterisk (*). Dalam hal ini, tidak ada kesalahan yang dilaporkan, dan sistem memetakan Kolom C ke kolom ketiga tabel dasar. Saat Anda mengkueri Kolom C setelah operasi RENAME, tidak ada kesalahan yang dilaporkan. Ini adalah hasil yang tidak diharapkan.

Jika bisnis Anda memiliki persyaratan untuk kompatibilitas dengan perilaku khusus kluster AnalyticDB for MySQL versi sebelum 3.1.9.0, Anda dapat menambahkan petunjuk ke pernyataan CREATE VIEW atau mengonfigurasi parameter global tertentu.

  • Tambahkan petunjuk berikut ke pernyataan CREATE VIEW untuk satu tampilan: /*+LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE=false*/. Contoh pernyataan:

    /*+LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE=false*/
    CREATE VIEW v0
    AS
    SELECT * FROM base0;
  • Konfigurasikan parameter global berikut untuk menerapkan pengaturan yang diperlukan untuk semua tampilan: SET ADB_CONFIG LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE = false;.

Sintaks

CREATE
[OR REPLACE]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name
AS select_statement;

Opsi

Diperlukan

Deskripsi

OR REPLACE

Tidak

Membuat tampilan berdasarkan apakah tampilan yang ada menggunakan nama yang sama. Aturan berikut berlaku:

  • Jika tidak ada tampilan yang ada yang menggunakan nama yang sama, AnalyticDB for MySQL membuat tampilan.

  • Jika tampilan yang ada menggunakan nama yang sama, AnalyticDB for MySQL menghapus tampilan yang ada dan membuat tampilan.

Catatan

Jika opsi ini tidak ditentukan, tidak ada tampilan yang dapat dibuat saat tampilan yang ada menggunakan nama yang sama.

[SQL SECURITY]

Menentukan metode untuk otentikasi keamanan saat data dikueri dari tampilan. Nilai valid:

  • INVOKER: mengeksekusi pernyataan SQL menggunakan izin invoker.

    Metode otentikasi ini memungkinkan sistem memeriksa apakah invoker memiliki izin berikut saat data dikueri dari tampilan:

    • Izin untuk mengkueri tampilan

    • Izin untuk mengkueri objek yang dirujuk oleh tampilan

    Hanya invoker yang memiliki izin di atas yang dapat mengkueri data dari tampilan.

  • DEFINER: mengeksekusi pernyataan SQL menggunakan izin definer.

    Metode otentikasi ini memungkinkan sistem memeriksa apakah invoker dan definer memiliki izin berikut saat data dikueri dari tampilan:

    • Izin untuk mengkueri tampilan (oleh invoker)

    • Izin untuk mengkueri objek yang dirujuk oleh tampilan (oleh definer)

    Setelah izin definer dicabut, data tidak dapat dikueri dari tampilan meskipun invoker memiliki izin untuk mengkueri tampilan.

Catatan
  • Jika opsi ini tidak ditentukan, INVOKER digunakan sebagai metode otentikasi default di AnalyticDB for MySQL. Saat invoker mengkueri data dari tampilan, invoker harus memiliki izin untuk mengkueri tampilan dan objek yang dirujuk oleh tampilan.

  • Opsi ini tersedia untuk kluster AnalyticDB for MySQL versi V3.1.4.0 atau yang lebih baru. Untuk informasi tentang cara mengkueri versi minor kluster AnalyticDB for MySQL, lihat Bagaimana cara melihat versi minor kluster? Untuk memperbarui versi minor kluster, hubungi dukungan teknis.

view_name

Ya

Nama tampilan.

Catatan

Saat menamai tampilan, Anda juga dapat menambahkan nama database yang berisi tampilan sebelum nama tampilan. Contoh: adb_demo.view. Jika Anda tidak menentukan database, tampilan dibuat di database saat ini.

select_statement

Sumber data tampilan.

Contoh

  • Persiapkan Data

    Lakukan operasi berikut menggunakan akun istimewa kluster AnalyticDB for MySQL:

    1. Buat akun bernama user1.

      CREATE USER user1 IDENTIFIED BY 'user1_pwd';
    2. Buat tabel bernama t1 di database yang ada bernama adb_demo.

      Create Table `t1` (
       `id` bigint AUTO_INCREMENT,
       `id_province` bigint NOT NULL,
       `user_info` varchar,
       primary key (`id`)
      ) DISTRIBUTED BY HASH(`id`);

      Masukkan data uji ke dalam tabel t1.

      INSERT INTO t1(id_province,user_info) VALUES (1,'Tom'),(1,'Jerry'),(2,'Jerry'),(3,'Mark');
  • Buat Tampilan

    Catatan

    Contoh berikut menunjukkan cara menentukan metode otentikasi yang berbeda saat Anda membuat tampilan. Data dalam tampilan berasal dari tabel t1.

    • Buat tampilan bernama v1 dengan SQL SECURITY diatur ke INVOKER.

      CREATE SQL SECURITY INVOKER VIEW v1 
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
    • Buat tampilan bernama v2 dengan SQL SECURITY diatur ke DEFINER.

      CREATE SQL SECURITY DEFINER VIEW v2 
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
    • Buat tampilan bernama v3 tanpa menentukan opsi SQL SECURITY. Dalam hal ini, metode otentikasi INVOKER digunakan.

      CREATE VIEW v3 
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
  • Bandingkan Izin

    • Gunakan akun istimewa untuk memberikan akun user1 izin untuk mengkueri tiga tampilan.

      GRANT SELECT ON adb_demo.v1 TO 'user1'@'%';
      GRANT SELECT ON adb_demo.v2 TO 'user1'@'%';
      GRANT SELECT ON adb_demo.v3 TO 'user1'@'%';

      Dalam hal ini, setelah Anda menggunakan akun user1 untuk terhubung ke database adb_demo kluster AnalyticDB for MySQL, Anda dapat menggunakan akun user1 untuk mengkueri data hanya dari tampilan v2.

      SELECT * FROM v2;

      Hasil berikut dikembalikan:

      +-------------+-----------+
      | ID_PROVINCE | USER_INFO |
      +-------------+-----------+
      |           1 | Tom       |
      |           1 | Jerry     |
      +-------------+-----------+

      Saat Anda mengkueri data dari tampilan v1 atau v3 menggunakan pernyataan SELECT, kesalahan dikembalikan.

      SELECT * FROM v1;

      atau

      SELECT * FROM v3;

      Pesan kesalahan berikut dikembalikan saat Anda mengeksekusi salah satu pernyataan SELECT di atas:

      ERROR 1815 (HY000): [20049, 2021083110261019216818804803453927668] : Gagal menganalisis tampilan yang disimpan
    • Setelah akun user1 diberikan izin untuk mengkueri tiga tampilan, gunakan akun istimewa untuk memberikan akun user1 izin untuk mengkueri tabel t1.

      GRANT SELECT ON adb_demo.t1 to user1@'%';

      Dalam hal ini, setelah Anda menggunakan akun user1 untuk terhubung ke database adb_demo kluster AnalyticDB for MySQL, Anda dapat menggunakan akun user1 untuk mengkueri data dari tampilan v1, v2, dan v3.

      SELECT * FROM v1;

      atau

      SELECT * FROM v2;

      atau

      SELECT * FROM v3;

      Hasil berikut dikembalikan saat Anda mengeksekusi salah satu pernyataan SELECT di atas:

      +-------------+-----------+
      | ID_PROVINCE | USER_INFO |
      +-------------+-----------+
      |           1 | Tom       |
      |           1 | Jerry     |
      +-------------+-----------+

FAQ

Nama kolom diatur dalam huruf kecil di tabel dasar. Mengapa nama kolom ditampilkan dalam huruf besar di set hasil tampilan?

Secara default, nama kolom dalam set hasil tampilan AnalyticDB for MySQL tidak peka huruf besar-kecil. Jika Anda lebih memilih untuk menampilkan nama kolom dalam huruf kecil di set hasil tampilan, Anda dapat mengeksekusi pernyataan berikut untuk mengatur parameter VIEW_OUTPUT_NAME_CASE_SENSITIVE menjadi true:

SET ADB_CONFIG VIEW_OUTPUT_NAME_CASE_SENSITIVE=true;

Praktik Terbaik

Untuk informasi lebih lanjut, lihat Manajemen izin menggunakan tampilan.