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?
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) ); 0PostgreSQL
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) ); 1Buat 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) ); 2PostgreSQL
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) ); 3Untuk 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) ); 4PostgreSQL
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) ); 5Untuk 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) ); 6PostgreSQL
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) ); _8Ubah 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) ); _9Bagaimana 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