Cara menambahkan tidak nol kendala pada kolom yang ada di MySQL

164

Saya memiliki nama tabel yang disebut "Orang" dengan nama kolom berikut

P_Id(int),
LastName(varchar),
FirstName (varchar).

Saya lupa memberi NOT NULLBatasan kepada P_Id.

Sekarang saya mencoba dengan permintaan berikut untuk menambahkan NOT NULLKendala ke kolom yang ada disebut P_Id,

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

Saya mendapatkan kesalahan sintaksis ....

mymotherland
sumber

Jawaban:

261

Cukup gunakan ALTER TABLE... MODIFY...kueri dan tambahkan NOT NULLke definisi kolom yang ada. Sebagai contoh:

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

Peringatan: Anda perlu menentukan kembali definisi kolom penuh saat menggunakan MODIFYkueri. Jika kolom Anda memiliki, misalnya, DEFAULTnilai, atau komentar kolom, Anda perlu menentukannya dalam MODIFYpernyataan bersama dengan tipe data dan NOT NULL, atau itu akan hilang. Praktik paling aman untuk menjaga dari kecelakaan seperti itu adalah menyalin definisi kolom dari output SHOW CREATE TABLE YourTablekueri, memodifikasinya untuk memasukkan NOT NULLkendala, dan menempelkannya ke dalam ALTER TABLE... MODIFY...kueri Anda .

Shakti Singh
sumber
4
@Positif mengapa Anda menulis INT(11)dan bukan hanya INT? Apa efeknya 11?
Suzanne Dupéron
2
11 hanyalah sebuah contoh, ia menetapkan panjang P_Id. saya tidak yakin apakah perlu menambahkannya lagi walaupun Anda mungkin tidak ingin mengubahnya.
Gerard
2
@Pacerier dengan changeAnda mengubah nama kolom
Javier P
1
@ Viktor MODIFYjuga didukung oleh Oracle. Dan PostgreSQL tidak mendukung CHANGEsebaliknya ia memberikan ALTER [COLUMN]pernyataan.
Tn. Deathless
1
catatan untuk diri sendiri: bahasa permintaan terstruktur bukan bahasa permintaan standar ...
Dmitry
20

Coba ini, Anda akan tahu perbedaan antara perubahan dan modifikasi,

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • Anda dapat mengubah nama dan tipe data dari kolom tertentu menggunakan CHANGE.
  • Anda dapat mengubah tipe data kolom tertentu menggunakan MODIFY. Anda tidak dapat mengubah nama kolom menggunakan pernyataan ini.

Harapan, saya jelaskan dengan detail.

Maran Manisekar
sumber
5
Anda melakukan operasi MODIFY untuk mengubah tetapi membalikkan tidak mungkin?
Navrattan Yadav
1
Anehnya saya mendapatkan kesalahan (MySQL 5.6, Workbench 6.3) mengubah / memodifikasi kolom yang saya beri nama null_heart_rate_count, kesalahannya adalah # 1138, penggunaan nilai NULL yang tidak valid. Saya harus menjatuhkan dan menambahkan kolom sebagai gantinya.
William T. Mallard
@NavrattanYadav Saya pikir dia bermaksud mengatakan ganti nama, bukan sebaliknya
shaahiin