Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL ALTER TABLE untuk Pemula

Dalam SQL, ALTER TABLE pernyataan memodifikasi definisi dari tabel yang ada.

Anda dapat menggunakan ALTER TABLE untuk mengubah, menambah, atau menghapus kolom dan batasan.

Bergantung pada DBMS Anda, ALTER TABLE pernyataan juga dapat digunakan untuk menetapkan ulang dan membangun kembali partisi, atau menonaktifkan dan mengaktifkan batasan dan pemicu.

Sintaks

ALTER TABLE pernyataan umumnya seperti ini:

ALTER TABLE table_name
    [alter_option [, alter_option] ...]
    [partition_options]

Dimana:

  • table_name adalah nama tabel yang ingin Anda ubah.
  • [alter_option [, alter_option] …] adalah daftar perubahan spesifik yang ingin Anda buat (misalnya ADD diikuti dengan nama kolom dan definisi, atau DROP COLUMN diikuti dengan nama kolom, dll).
  • [partition_options] adalah daftar opsi opsional khusus untuk tabel yang dipartisi. Tidak semua DBMS mendukung tabel yang dipartisi. Jika milik Anda, opsi tersebut memungkinkan Anda untuk menambah, menghapus, membuang, mengimpor, menggabungkan, atau membagi partisi, atau untuk melakukan pemeliharaan partisi.

Sintaks lengkap untuk ALTER TABLE bisa sangat kompleks dan bervariasi secara signifikan antara DBMS. Untuk apa pun yang tidak tercakup dalam artikel ini, lihat dokumentasi DBMS Anda.

Di bawah ini adalah contoh ALTER TABLE yang paling umum operasi.

Tambahkan Kolom Baru

Untuk menambahkan kolom baru ke tabel, gunakan ADD klausa, diikuti dengan nama kolom dan tipe data.

ALTER TABLE Products 
ADD ProductDescription varchar(500);

Ini menambahkan kolom baru bernama ProductDescription ke Products tabel.

Dalam contoh ini, kami membuat kolom menjadi varchar(500) tetapi Anda akan menggunakan tipe data apa pun yang sesuai untuk kolom baru Anda.

Anda juga dapat memasukkan batasan dalam definisi kolom Anda, tetapi ini mungkin bergantung pada DBMS Anda, dan apakah tabel sudah berisi data atau belum (lihat diskusi di bawah tentang ini).

Ganti Nama Kolom

Sebagian besar RDBMS utama (PostgreSQL, Oracle, SQLite, MySQL 8.0+, MariaDB 10.5.2+) memungkinkan Anda untuk mengganti nama kolom seperti ini:

ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

Jika Anda menggunakan MySQL sebelum versi 8.0, atau MariaDB sebelum 10.5.2+, Anda harus menggunakan CHANGE COLUMN sintaks sebagai gantinya, yang juga mengharuskan Anda untuk menentukan ulang tipe data. Seperti ini:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

Di SQL Server, Anda harus menggunakan sp_rename prosedur tersimpan untuk mengganti nama kolom. Seperti ini:

EXEC sp_rename 'schema_name.table_name.column_name', 'new_column_name', 'COLUMN';

Lepaskan Kolom

Untuk menjatuhkan kolom, gunakan DROP COLUMN klausa, diikuti dengan nama kolom.

ALTER TABLE table_name 
DROP COLUMN column_name;

Memodifikasi Definisi Kolom

Sintaks untuk memodifikasi definisi kolom yang ada sangat bervariasi antar DBMS. Itu juga tergantung pada modifikasi apa yang perlu Anda buat.

Untuk mempermudah, mari lakukan modifikasi sederhana pada kolom di SQL Server:

ALTER TABLE Products 
ALTER COLUMN ProductDescription varchar(1000);

Dalam contoh ini, kami mengubah ProductDescription kolom dari varchar(500) ke varchar(1000) .

Berikut ini adalah sintaks dasar yang diperlukan oleh setiap DBMS untuk melakukan perubahan yang sama atau serupa.

SQL Server:

ALTER TABLE table_name 
ALTER COLUMN column_name datatype;

PostgreSQL:

ALTER TABLE table_name 
ALTER COLUMN column_name TYPE datatype;

MySQL, MariaDB, dan Oracle sebelum 10g:

ALTER TABLE table_name 
MODIFY COLUMN column_name datatype;

Di Oracle 10g dan yang lebih baru:

ALTER TABLE table_name 
MODIFY column_name datatype;

SQLite tidak akan mengizinkan Anda mengubah kolom, selain mengganti namanya.

Sintaks sebenarnya untuk setiap DBMS biasanya jauh lebih kompleks dari ini, dan tergantung pada apa yang Anda coba lakukan. Namun, ini akan membantu Anda memulai dengan modifikasi kolom dasar.

Pembatasan &Pertimbangan

Anda biasanya harus menghindari membuat modifikasi pada tabel setelah berisi data. Dengan melakukan perubahan, Anda berisiko kehilangan data yang ada.

Karena itu, banyak DBMS sebenarnya mencegah Anda membuat perubahan tertentu setelah tabel berisi data. Misalnya, Anda mungkin menemukan bahwa Anda tidak dapat menambahkan NOT NULL kendala ke kolom yang berisi data.

Beberapa DBMS memungkinkan Anda untuk melakukannya, selama Anda menggunakan DEFAULT batasan (untuk memberikan nilai default untuk kolom yang tidak memiliki data yang secara eksplisit dimasukkan ke dalamnya), atau kolom Identitas/peningkatan otomatis, atau kolom stempel waktu, dll.

Beberapa DBMS tidak mengizinkan Anda untuk menjatuhkan atau mengubah kolom dalam tabel.

Juga, beberapa DBMS membatasi tipe data yang dapat ditambahkan.

Contoh – Menambahkan Batasan NOT NULL

Berikut ini contoh untuk membantu menunjukkan poin di atas.

Inilah yang terjadi ketika saya mencoba menambahkan kolom dengan NOT NULL batasan di SQL Server.

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL;

Hasil:

Msg 4901, Level 16, State 1, Line 1
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'ProductDescription' cannot be added to non-empty table 'Products' because it does not satisfy these conditions.

Pada dasarnya, tabel sudah berisi data, dan SQL Server mengembalikan kesalahan yang memberi tahu saya bahwa saya hanya dapat menambahkan NOT NULL kendala jika tabel memenuhi kriteria tertentu, dan belum memenuhi kriteria itu.

Dan ada alasan bagus untuk kriteria itu.

Sebuah NOT NULL kendala memastikan bahwa tidak ada NULL nilai di kolom di baris mana pun. Masalahnya, kita sudah memiliki data di tabel, dan jika kita menambahkan kolom baru, baris yang ada akan menjadi NULL – yang akan langsung melanggar NOT NULL kami paksaan. Jadi kita perlu menentukan data untuk masuk ke baris yang ada.

Untuk melakukan ini, kita dapat menambahkan DEFAULT batasan atau serupa untuk memastikan bahwa setiap baris yang ada secara otomatis diisi dengan data di kolom ini.

Contoh:

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL DEFAULT 'N/A';

Ini hanya menambahkan DEFAULT kendala pada kolom. Batasan ini memastikan bahwa semua baris berisi nilai (dalam hal ini, nilainya adalah N/A ) jika mereka belum diberi nilai. Ini berarti NOT NULL batasan tidak akan dilanggar, karena semua baris yang ada sekarang akan berisi nilai.

Jika kolom baru harus memiliki nilai yang unik dan meningkat, Anda dapat menjadikannya IDENTITY kolom (atau AUTOINCREMENT dalam SQLite dan DBMS lainnya).

Namun, jika tabel belum berisi data, Anda mungkin dapat menambahkan kolom tanpa harus melakukan langkah-langkah berikut.

Opsi Partisi

Artikel ini ditujukan untuk pemula, dan tabel yang dipartisi sedikit di luar bidang tutorial pemula.

Karena itu, saya akan segera membahas beberapa opsi partisi sehubungan dengan ALTER TABLE pernyataan.

Jika DBMS Anda mendukung tabel yang dipartisi, DBMS Anda mungkin juga menyediakan opsi partisi dengan ALTER TABLE pernyataan.

Misalnya, di MySQL Anda dapat melakukan hal berikut:

ALTER TABLE Products
PARTITION BY HASH(ProductId)
PARTITIONS 8;

Ini mempartisi tabel menjadi 8 partisi, dengan HASH , menggunakan ProductId kolom sebagai kunci partisi.

PARTITION BY HASH menggunakan sisa ekspresi (dalam hal ini ProductId kolom) dibagi dengan jumlah partisi (yaitu modulus).

Anda juga dapat menggunakan partisi rentang. Berikut cara menambahkan partisi rentang ke tabel yang ada:

ALTER TABLE Products 
ADD PARTITION (PARTITION Partition9 VALUES LESS THAN (2020));

Contoh ini menyiratkan bahwa Products tabel sudah memiliki 8 partisi rentang, dan kami menambahkan partisi lain yang disebut Partition9 .

Anda dapat menghapus partisi seperti ini:

ALTER TABLE Products 
DROP PARTITION Partition8, Partition9;

Ingatlah bahwa contoh-contoh ini adalah untuk MySQL.

Saya juga telah menulis beberapa artikel tentang tabel yang dipartisi di SQL Server. Sehubungan dengan ALTER TABLE pernyataan, berikut cara mengganti partisi dan berikut cara mengganti partisi (keduanya dilakukan dengan ALTER TABLE ).

Di SQL Server, beberapa opsi partisi perlu dilakukan dengan pernyataan lain. Misalnya penggabungan partisi dilakukan dengan ALTER PARTITION FUNCTION pernyataan, dan pemisahan partisi dilakukan dengan ALTER PARTITION SCHEME pernyataan.

Jika Anda ingin mempelajari lebih lanjut tentang tabel yang dipartisi di SQL Server, berikut cara membuat tabel yang dipartisi di SQL Server.

ALTER TABLE di SQLite

Saya juga harus menyebutkan bahwa SQLite memiliki dukungan yang sangat terbatas dari ALTER TABLE penyataan. Dalam SQLite, ALTER TABLE pernyataan memungkinkan Anda untuk mengubah nama tabel, untuk mengubah nama kolom dalam tabel, atau untuk menambahkan kolom baru ke tabel yang sudah ada.

Setiap perubahan lain akan mengharuskan Anda untuk meninggalkan meja dan mulai lagi. Ini juga berlaku untuk menambahkan kunci asing.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah komentar menghambat kinerja prosedur tersimpan?

  2. Bagaimana Menjumlahkan Nilai Kolom dalam SQL?

  3. Model Data Bisnis Berlangganan

  4. Menyebarkan Database dari Kontrol Sumber

  5. Beban Tambahan di SSIS