วิธีการเพิ่มข้อ จำกัด ไม่เป็นโมฆะในคอลัมน์ที่มีอยู่ใน MySQL


164

ฉันมีชื่อตารางชื่อ "บุคคล" ที่มีชื่อคอลัมน์ต่อไปนี้

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

ฉันลืมที่จะให้NOT NULLข้อ จำกัด P_Idในการ

ตอนนี้ผมพยายามกับแบบสอบถามต่อไปนี้จะเพิ่มNOT NULLข้อ จำกัด กับคอลัมน์ที่มีอยู่เรียกว่าP_Id,

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

ฉันได้รับข้อผิดพลาดทางไวยากรณ์ ....

คำตอบ:


261

เพียงใช้ALTER TABLE... MODIFY...แบบสอบถามและเพิ่มNOT NULLลงในคำจำกัดความคอลัมน์ที่มีอยู่ของคุณ ตัวอย่างเช่น:

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

คำเตือน: คุณต้องระบุคำจำกัดความของคอลัมน์แบบเต็มอีกครั้งเมื่อใช้MODIFYแบบสอบถาม หากคอลัมน์ของคุณมีตัวอย่างเช่นDEFAULTค่าหรือความคิดเห็นคอลัมน์คุณต้องระบุในMODIFYคำสั่งพร้อมกับชนิดข้อมูลและNOT NULLหรือจะหายไป วิธีปฏิบัติที่ปลอดภัยที่สุดเพื่อป้องกันอุบัติเหตุดังกล่าวคือการคัดลอกคำจำกัดความคอลัมน์จากผลลัพธ์ของSHOW CREATE TABLE YourTableแบบสอบถามแก้ไขเพื่อรวมNOT NULLข้อ จำกัด และวางลงในALTER TABLE... MODIFY...แบบสอบถามของคุณ


4
@ บวกทำไมคุณถึงเขียนINT(11)และไม่ใช่แค่INT? ผลของการ11คืออะไร?
Suzanne Dupéron

2
11 เป็นเพียงตัวอย่างเท่านั้นมันตั้งค่าความยาวของ P_Id ฉันไม่แน่ใจว่าจำเป็นต้องเพิ่มอีกครั้งหรือไม่แม้ว่าคุณอาจไม่ต้องการเปลี่ยนก็ตาม
เจอราร์ด

2
@Pacerier เมื่อchangeคุณแก้ไขชื่อคอลัมน์
Javier P

1
@Victor MODIFYสนับสนุนโดย Oracle เช่นกัน และ PostgreSQL ไม่สนับสนุนCHANGEแทนที่จะให้ALTER [COLUMN]คำสั่ง
Mr. Deathless

1
หมายเหตุสำหรับตนเอง: ภาษาข้อความค้นหาที่มีโครงสร้างไม่ใช่ภาษาข้อความค้นหามาตรฐาน ...
มิทรี

20

ลองสิ่งนี้คุณจะได้ทราบถึงความแตกต่างระหว่างการเปลี่ยนแปลงและการแก้ไข

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]
  • CHANGEคุณสามารถเปลี่ยนชื่อและประเภทข้อมูลของคอลัมน์โดยเฉพาะอย่างยิ่งการใช้
  • MODIFYคุณสามารถปรับเปลี่ยนประเภทข้อมูลคอลัมน์โดยเฉพาะอย่างยิ่งการใช้ คุณไม่สามารถเปลี่ยนชื่อของคอลัมน์โดยใช้คำสั่งนี้

หวังว่าฉันอธิบายได้ดีในรายละเอียด


5
คุณทำการดำเนินการ MODIFY เพื่อเปลี่ยน แต่ไม่สามารถย้อนกลับได้หรือไม่
Navrattan Yadav

1
ผิดปกติฉันได้รับข้อผิดพลาด (MySQL 5.6, Workbench 6.3) การเปลี่ยน / แก้ไขคอลัมน์ฉันชื่อ null_heart_rate_count ข้อผิดพลาดคือ # 1138 การใช้ค่า NULL ไม่ถูกต้อง ฉันต้องวางและเพิ่มคอลัมน์แทน
William T. Mallard

@NavrattanYadav ฉันคิดว่าเขาตั้งใจจะบอกว่าเปลี่ยนชื่อไม่ใช่ reverse
shaahiin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.