Mysql mengubah tabel menambahkan kolom yang dihasilkan

Untuk menghapus kolom dalam tabel, gunakan sintaks berikut (perhatikan bahwa beberapa sistem database tidak mengizinkan penghapusan kolom)

ALTER TABLE table_name
DROP COLUMN column_name;

SQL berikut menghapus kolom "Email" dari tabel "Pelanggan".

Contoh

ALTER TABLE Pelanggan
JATUHKAN KOLOM Email;


ALTER TABLE - MODIFIKASI KOLOM

Untuk mengubah tipe data kolom dalam tabel, gunakan sintaks berikut

ALTER TABLE table_name
MENGUBAH tipe data nama_kolom KOLOM;



Contoh ALTER TABLE MySQL

Lihatlah tabel "Orang".

IDLastNameFirstNameAddressCity1HansenOlaTimoteivn 10Sandnes2SvendsonToveBorgvn 23Sandnes3PettersenKariStorgt 20Stavanger

Kolom yang dihasilkan adalah kolom yang selalu dihitung dari kolom lain dalam satu baris. Kolom ini dapat menyederhanakan kueri, menghemat biaya evaluasi ekspresi pada waktu kueri, dan dapat diindeks atau digunakan sebagai kunci asing. Dalam artikel ini, kami akan menjelaskan cara mengelola tipe kolom ini di database Anda

Tambahkan kolom yang dihasilkan ke tabel baru

Dalam cuplikan

SELECT Id, FullName
FROM Users;
_2 berikut, kami membuat tabel untuk menyimpan informasi tentang pengguna. Kami memiliki kolom untuk
SELECT Id, FullName
FROM Users;
3 dan
SELECT Id, FullName
FROM Users;
4 dan menentukan kolom yang dihasilkan untuk
SELECT Id, FullName
FROM Users;
5, yang merupakan gabungan dari
SELECT Id, FullName
FROM Users;
3 dan
SELECT Id, FullName
FROM Users;
4

SQL Standar Google

CREATE TABLE Users (
  Id STRING(20) NOT NULL,
  FirstName STRING(50),
  LastName STRING(50),
  Age INT64 NOT NULL,
  FullName STRING(100) AS (ARRAY_TO_STRING([FirstName, LastName], " ")) STORED,
) PRIMARY KEY (Id);
_

PostgreSQL

CREATE TABLE users (
  id VARCHAR(20) NOT NULL,
  firstname VARCHAR(50),
  lastname VARCHAR(50),
  age BIGINT NOT NULL,
  fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
  PRIMARY KEY(id)
);

Nilai

SELECT Id, FullName
FROM Users;
5 dihitung saat baris baru disisipkan atau saat
SELECT Id, FullName
FROM Users;
3 dan/atau
SELECT Id, FullName
FROM Users;
4 diperbarui untuk baris yang ada. Nilai yang dihitung disimpan bersama dengan kolom lain dari tabel. SQL dalam tanda kurung disebut ekspresi generasi

  • SELECT id, fullname
    FROM users;
    
    _1 dapat berupa ekspresi SQL valid apa pun yang dapat ditetapkan ke tipe data kolom dengan batasan berikut

    • Ekspresi hanya dapat mereferensikan kolom dalam tabel yang sama

    • Ekspresi tidak boleh berisi subkueri

    • Ekspresi tidak boleh berisi fungsi non-deterministik seperti , , dan

    • Anda tidak dapat mengubah ekspresi kolom yang dihasilkan

  • Atribut

    SELECT id, fullname
    FROM users;
    
    _5 yang mengikuti ekspresi menyebabkan hasil dari fungsi disimpan bersama dengan kolom lain dari tabel. Pembaruan selanjutnya pada salah satu kolom yang direferensikan menyebabkan ekspresi dievaluasi ulang dan disimpan

  • Kolom yang dibuat tanpa atribut

    SELECT id, fullname
    FROM users;
    
    _5 tidak diperbolehkan

  • Penulisan langsung ke kolom yang dihasilkan tidak diperbolehkan

  • Kolom yang dihasilkan tidak dapat digunakan sebagai, atau bagian dari, kunci utama. Namun, mereka bisa menjadi kunci indeks sekunder

  • Opsi kolom

    SELECT id, fullname
    FROM users;
    
    _7 tidak diperbolehkan pada kolom yang dibuat atau kolom apa pun yang direferensikan oleh kolom yang dibuat

  • Anda tidak dapat mengubah tipe data dari kolom yang dibuat, atau kolom apa pun yang direferensikan oleh kolom yang dihasilkan

  • Anda tidak dapat menjatuhkan kolom yang direferensikan oleh kolom yang dihasilkan

Kolom yang dihasilkan dapat dikueri sama seperti kolom lainnya, seperti yang diperlihatkan dalam contoh berikut

SQL Standar Google

SELECT Id, FullName
FROM Users;

PostgreSQL

SELECT id, fullname
FROM users;

Ini setara dengan pernyataan berikut, yang tidak menggunakan kolom yang dihasilkan tersimpan

SQL Standar Google

SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
FROM Users;

PostgreSQL

SELECT id, firstname || ' ' || lastname as fullname
FROM users;

Selain membuat kueri lebih sederhana dan menghemat biaya evaluasi ekspresi pada waktu kueri, kolom yang dibuat juga dapat diindeks atau digunakan sebagai kunci asing

Buat indeks pada kolom yang dihasilkan

Untuk membantu pencarian pada kolom

SELECT Id, FullName
FROM Users;
_5 yang dihasilkan, kita dapat membuat indeks sekunder seperti yang ditampilkan dalam cuplikan berikut

SQL Standar Google

CREATE INDEX UsersByFullName ON Users (FullName);

PostgreSQL

CREATE INDEX UserByFullName ON users (fullname);

Tambahkan kolom yang dihasilkan ke tabel yang sudah ada

Menggunakan pernyataan

SELECT id, fullname
FROM users;
_9 berikut, kami menambahkan kolom yang dihasilkan ke tabel
SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
FROM Users;
0 untuk menghasilkan dan menyimpan inisial pengguna

SQL Standar Google

ALTER TABLE Users ADD COLUMN Initials STRING(2)
AS (ARRAY_TO_STRING([SUBSTR(FirstName, 0, 1), SUBSTR(LastName, 0, 1)], "")) STORED;

PostgreSQL

ALTER TABLE users ADD COLUMN Initials VARCHAR(2)
GENERATED ALWAYS AS (SUBSTR(FirstName, 0, 1) || SUBSTR(LastName, 0, 1)) STORED;

Menambahkan kolom yang dihasilkan tersimpan ke tabel yang sudah ada adalah operasi jangka panjang untuk mengisi ulang nilai kolom. Selama pengisian ulang, kolom yang dihasilkan yang disimpan tidak dapat dibaca atau ditanyakan. Status pengisian ulang tercermin dalam INFORMATION_SCHEMA

Buat indeks parsial menggunakan kolom yang dihasilkan

Bagaimana jika kami hanya ingin menanyakan pengguna yang berusia di atas 18 tahun?

  1. Gunakan pernyataan berikut untuk menambahkan kolom lain yang dihasilkan yang mengembalikan usia pengguna jika mereka berusia di atas 18 tahun, dan mengembalikan

    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    1 jika tidak

    SQL Standar Google

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    0

    PostgreSQL

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    1

  2. Buat indeks pada kolom baru ini, dan nonaktifkan pengindeksan nilai

    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    1 dengan kata kunci
    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    3 di Google Standard SQL atau predikat
    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    4 di PostgreSQL. Indeks parsial ini lebih kecil dan lebih efisien daripada indeks normal karena tidak menyertakan semua orang yang berusia 18 tahun atau lebih muda

    SQL Standar Google

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    2

    PostgreSQL

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    3

  3. Untuk mengambil

    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    5 dan
    SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
    FROM Users;
    
    6 dari semua pengguna yang berusia di atas 18 tahun, jalankan kueri berikut

    SQL Standar Google

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    4

    PostgreSQL

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    5

  4. Untuk memfilter pada usia yang berbeda, misalnya, untuk mengambil semua pengguna yang berusia di atas 21 tahun, gunakan indeks dan filter yang sama pada kolom yang dihasilkan sebagai berikut

    SQL Standar Google

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    6

    PostgreSQL

    CREATE TABLE users (
      id VARCHAR(20) NOT NULL,
      firstname VARCHAR(50),
      lastname VARCHAR(50),
      age BIGINT NOT NULL,
      fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
      PRIMARY KEY(id)
    );
    
    7

Hapus kolom yang dihasilkan

Pernyataan DDL berikut menjatuhkan kolom yang dihasilkan dari tabel

SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
FROM Users;
0

CREATE TABLE users (
  id VARCHAR(20) NOT NULL,
  firstname VARCHAR(50),
  lastname VARCHAR(50),
  age BIGINT NOT NULL,
  fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
  PRIMARY KEY(id)
);
_8

Ubah ekspresi kolom yang dihasilkan

Memodifikasi ekspresi kolom yang dihasilkan tidak diperbolehkan. Sebagai gantinya, Anda harus melepaskan kolom yang ada dan membuat kolom baru yang dihasilkan dengan ekspresi baru

Lihat properti dari kolom yang dihasilkan

INFORMATION_SCHEMA Spanner berisi informasi tentang kolom yang dibuat di database Anda. Berikut adalah beberapa contoh pertanyaan yang dapat Anda jawab dengan menanyakan skema informasi

Kolom yang dihasilkan apa yang ditentukan dalam database saya?

CREATE TABLE users (
  id VARCHAR(20) NOT NULL,
  firstname VARCHAR(50),
  lastname VARCHAR(50),
  age BIGINT NOT NULL,
  fullname VARCHAR(100) GENERATED ALWAYS AS (firstname || ' ' || lastname) STORED,
  PRIMARY KEY(id)
);
_9

Bagaimana keadaan kolom yang dihasilkan saat ini dalam tabel

SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
FROM Users;
0?

Jika Anda telah menambahkan kolom yang dibuat ke tabel yang sudah ada, Anda mungkin ingin melihat statusnya saat ini untuk menentukan, misalnya, apakah kolom telah diisi ulang dan dapat digunakan sepenuhnya. Jika

SELECT Id, ARRAY_TO_STRING([FirstName, LastName], " ") as FullName
FROM Users;
_9 mengembalikan
SELECT id, firstname || ' ' || lastname as fullname
FROM users;
0 dalam kueri berikut, itu berarti Spanner masih dalam proses mengisi ulang kolom dan pembacaan tidak diperbolehkan

Bagaimana cara menambahkan kolom yang dibuat secara otomatis di MySQL?

Pertama, tentukan nama kolom dan tipe datanya. Selanjutnya, tambahkan klausa GENERATED ALWAYS untuk menunjukkan bahwa kolom adalah kolom yang dihasilkan . Kemudian, tunjukkan apakah jenis kolom yang dihasilkan menggunakan opsi yang sesuai. VIRTUAL atau TERSIMPAN.

Bagaimana cara menambahkan kolom turunan di SQL?

Pilih kolom turunan dari daftar. Pilih apakah akan menambahkan kolom turunan sebagai kolom keluaran baru, atau mengganti data di kolom yang sudah ada. Ketik ekspresi atau buat dengan menyeret dari daftar kolom, variabel, fungsi, dan operator yang tersedia sebelumnya

Bisakah kita menambahkan kolom ke tabel yang ada di MySQL?

Gunakan ADD untuk menambahkan kolom baru ke tabel , dan DROP untuk menghapus kolom yang ada. DROP col_name adalah ekstensi MySQL ke SQL standar. Untuk menambahkan kolom pada posisi tertentu dalam baris tabel, gunakan FIRST atau AFTER col_name. Standarnya adalah menambahkan kolom terakhir.

Bagaimana Anda menambahkan kolom baru dan tipe datanya ke tabel yang sudah ada?

Pernyataan ALTER TABLE digunakan untuk menambahkan, menghapus, atau mengubah kolom dalam tabel yang sudah ada.