SQL เปลี่ยนแปลงไวยากรณ์ของตาราง คู่มืออ้างอิง MySQL แก้ไข column_name ตั้งค่า DEFAULT default_value

คำสั่ง SQL ALTER TABLE ได้รับการออกแบบมาเพื่อเปลี่ยนโครงสร้างของคอลัมน์ในตารางฐานข้อมูลหากมีตารางอยู่แล้ว

ALTER TABLE เพื่อเพิ่มและลบคอลัมน์ซึ่งเป็นค่าเริ่มต้น

แบบสอบถามที่มีคำสั่ง ALTER TABLE เพื่อเพิ่มคอลัมน์ใหม่ลงในตารางจะมีไวยากรณ์ดังต่อไปนี้:

แก้ไขตาราง TABLE_NAME เพิ่ม COLUMN_NAME DATA_TYPE ใหม่

ตัวอย่างที่ 1มีฐานข้อมูลบริษัท-บริษัท ประกอบด้วยตารางพนักงาน คุณต้องเพิ่มคอลัมน์ใหม่ลงในตารางนี้ - SEX (Gender) คำขอที่เกี่ยวข้องมีลักษณะดังนี้:

แก้ไขตารางพนักงานเพิ่มเพศชาร์(1)

สมมติว่าตอนนี้คุณต้องการตั้งค่าเริ่มต้นของรายการในตาราง แบบสอบถามที่มีคำสั่ง ALTER TABLE เพื่อจุดประสงค์นี้มีคำสั่งอื่น - ALTER COLUMN - และมีไวยากรณ์ต่อไปนี้:

แก้ไขตาราง TABLE_NAME แก้ไขคอลัมน์ COLUMN_NAME ตั้งค่าเริ่มต้น "DEFAULT_VALUE"

ตัวอย่างที่ 2ให้บริษัทซึ่งมีฐานข้อมูลชื่อว่าบริษัท จ้างผู้หญิงเป็นส่วนใหญ่ ผู้ดูแลระบบฐานข้อมูลได้ตัดสินใจที่จะลดขั้นตอนการเติมคอลัมน์ SEX และตั้งค่าเริ่มต้นเป็น "F" (สำหรับผู้หญิง) คำขอที่เกี่ยวข้องมีลักษณะดังนี้:

แก้ไขตารางพนักงาน แก้ไขคอลัมน์เพศ SET ค่าเริ่มต้น "F"

ตอนนี้หากพนักงานใหม่เป็นผู้ชาย คุณจะต้องป้อนค่า "M" ในคอลัมน์ SEX และในกรณีส่วนใหญ่ ค่าจะถูกตั้งเป็นค่าเริ่มต้น - "F"

การใช้แบบสอบถามกับคำสั่ง ALTER TABLE คุณสามารถลบคอลัมน์ออกจากตารางได้ ไวยากรณ์คำสั่งจะเป็นดังนี้:

แก้ไขตาราง TABLE_NAME วางคอลัมน์ COLUMN_NAME

ตัวอย่างที่ 3ในฐานข้อมูลบริษัทเดียวกัน สมมติว่าคุณต้องการลบคอลัมน์ SEX ออกจากตาราง Employee คำขอที่เกี่ยวข้องมีลักษณะดังนี้:

เปลี่ยนตารางพนักงานวางคอลัมน์เพศ

ดังนั้นจึงมีคอลัมน์ใหม่ปรากฏในตารางซึ่งค่าอาจเป็นประเภทอักขระและประกอบด้วยอักขระหนึ่งตัว

แก้ไขตารางเพื่อเพิ่มคีย์

เกี่ยวกับคีย์ในตารางฐานข้อมูล - ในบทเรียน แบบจำลองข้อมูลเชิงสัมพันธ์- หากไม่ได้กำหนดคีย์หลัก (PRIMARY KEY) เมื่อสร้างตารางฐานข้อมูล สามารถทำได้โดยใช้คำสั่ง ALTER TABLE ไวยากรณ์คำสั่งสำหรับคีย์หลักอย่างง่ายมีดังนี้:

แก้ไขตาราง TABLE_NAME เพิ่มคีย์หลัก (ID_NAME)

ไวยากรณ์คำสั่งสำหรับคีย์หลักแบบผสมคือ:

แก้ไขตาราง TABLE_NAME เพิ่มคีย์หลัก (ID_NAME_1, ID_NAME_2)

ตัวอย่างที่ 4เรายังคงทำงานกับฐานข้อมูลบริษัทเดิม โดยมีคอลัมน์ EMPLOYEE เราสามารถเพิ่มคีย์หลักแบบง่ายลงในคอลัมน์นี้ในรูปแบบของรหัสพนักงาน และดำเนินการดังนี้:

แก้ไขตารางพนักงานเพิ่มคีย์หลัก (EMP_ID)

หากคุณตัดสินใจที่จะใช้คีย์ผสมซึ่งประกอบด้วยตัวระบุพนักงานและตัวระบุของแผนกที่พนักงานทำงานอยู่ ให้ใช้แบบสอบถามต่อไปนี้:

แก้ไขตารางพนักงานเพิ่มคีย์หลัก (EMP_ID, DEPT_ID)

ALTER TABLE เพื่อเพิ่มและลบข้อจำกัด

เราได้พูดคุยเกี่ยวกับข้อจำกัดด้านความซื่อสัตย์ในบทเรียน แบบจำลองข้อมูลเชิงสัมพันธ์- กล่าวโดยสรุป เมื่อลบแถวออกจากตารางหนึ่ง (1) ในอีกตารางหนึ่ง (2) แถวที่อ้างอิงถึงแถวในตาราง (1) ไม่ควรมีการอ้างอิงที่ไม่มีอยู่ในตาราง (1) นั่นคือการเชื่อมโยงที่นำไปสู่ไม่มีที่ไหนเลย

อาจจำเป็นต้องใช้คำสั่ง ALTER TABLE เพื่อตั้งค่าการอ้างอิงดังกล่าวเป็น NULL ไวยากรณ์ของมันมีดังนี้:

แก้ไขตารางที่อ้างอิง TABLE_NAME เพิ่มข้อจำกัด ID_NAME ข้อมูลอ้างอิงที่สำคัญต่างประเทศที่อ้างอิง TABLE_NAME เมื่อลบ SET NULL

ตัวอย่างที่ 5สมมติว่าในฐานข้อมูลบริษัทเดียวกัน คุณต้องการตั้งค่าข้อจำกัดในการอ้างอิง เมื่อคุณลบแผนกใดๆ ออกจากตารางแผนกในตาราง Employee ซึ่งมีลิงก์ไปยังแผนกเหล่านี้ ค่าของลิงก์ (คีย์ต่างประเทศ) ควรตั้งค่าเป็น NULL (ไม่ได้กำหนดโดยสิ้นเชิง) คำขอที่เกี่ยวข้องมีลักษณะดังนี้:

แก้ไขตารางพนักงานเพิ่มข้อจำกัด DEPT_ID FOREIGN KEY (DEPT_ID) อ้างอิง DEPT ON DELETE SET NULL

ดังนั้นหากในตารางพนักงานมีพนักงานที่ทำงานในแผนกที่ถูกเลิกกิจการกะทันหันและบันทึกเกี่ยวกับเขาถูกลบออกจากตารางแผนกจากนั้นในบันทึกเกี่ยวกับพนักงานรายนี้ค่าของคอลัมน์ DEPT_ID จะเป็น NULL

แบบสอบถามด้วยคำสั่ง ALTER TABLE ยังสามารถตั้งค่าห้ามการลบระเบียนที่อ้างอิงออกจากตาราง (1) ได้ ถ้ามีอย่างน้อยหนึ่งระเบียนในตาราง (2) ที่ถูกอ้างอิงโดยระเบียนในตาราง (1) ไวยากรณ์สำหรับคำขอดังกล่าวมีดังนี้:

แก้ไขตาราง REFERENCED_TABLE_NAME เพิ่มข้อจำกัด ID_NAME ข้อมูลอ้างอิงที่สำคัญต่างประเทศ REFERENCED_TABLE_NAME เมื่อลบข้อจำกัด

คำสั่งต่อไปนี้พร้อมกับนิพจน์ตารางแก้ไขจะกำหนดข้อห้ามในการลบกลุ่มยาออกจากตารางกลุ่ม หากมียาในกลุ่มนี้อย่างน้อยหนึ่งรายการ ตามที่กำหนดโดยรายการในตารางการเตรียมการ:

แก้ไขตาราง การเตรียมการ เพิ่มข้อจำกัด GR_ID คีย์ต่างประเทศ (GR_ID) อ้างอิง กลุ่มในการจำกัดการลบ

เราตั้งค่าห้ามการลบร้านขายยาออกจากตารางร้านขายยาหากมีพนักงานอย่างน้อยหนึ่งคนในร้านขายยานี้ ซึ่งถูกกำหนดโดยบันทึกในตารางพนักงาน:

แก้ไขตาราง พนักงานเพิ่มข้อจำกัด PH_ID คีย์ต่างประเทศ (PH_ID) อ้างอิงร้านขายยาในการจำกัดการลบ

แบบสอบถามด้วยคำสั่ง ALTER TABLE ยังสามารถระบุได้ว่าหากคุณลบระเบียนในตาราง (2) ที่ถูกอ้างอิงโดยระเบียนในตาราง (1) ดังนั้นระเบียนที่เกี่ยวข้องทั้งหมดในตาราง (1) จะต้องถูกลบ (การลบแบบเรียงซ้อน) ไวยากรณ์สำหรับคำขอดังกล่าวมีดังนี้:

แก้ไขตารางที่อ้างอิง TABLE_NAME เพิ่มข้อจำกัด ID_NAME ข้อมูลอ้างอิงที่สำคัญต่างประเทศที่อ้างอิง TABLE_NAME เมื่อลบ CASCADE

ตัวอย่างที่ 7

เราแก้ไขตาราง AVAILABILITY อีกครั้ง และพิจารณาว่าหากเราลบยาออกจากตาราง PREPARATION บันทึกทั้งหมดของยานี้ในตาราง AVAILABILITY ควรถูกลบออก

แก้ไขตาราง AVAILABILITY เพิ่มข้อ จำกัด PR_ID คีย์ต่างประเทศ (PR_ID) การอ้างอิงการเตรียมการในการลบน้ำตก

ตอนนี้เราพิจารณาแล้วว่าหากเราลบร้านขายยาออกจากตาราง PHARMACY บันทึกทั้งหมดของร้านขายยานี้ในตาราง AVAILABILITY ควรถูกลบออก:

แก้ไขตาราง AVAILABILITY เพิ่มข้อ จำกัด PH_ID คีย์ต่างประเทศ (PH_ID) การอ้างอิง PHARMACY ในการลบน้ำตก

คำสั่งต่อไปนี้แก้ไขตาราง DEFICIT และระบุว่าหากยาถูกลบออกจากตารางการเตรียมการ บันทึกทั้งหมดของยานั้นในตาราง DEFICIT จะต้องถูกลบออก:

แก้ไขตาราง DEFICIT เพิ่มข้อ จำกัด PR_ID คีย์ต่างประเทศ (PR_ID) การอ้างอิงการเตรียมการในการลบน้ำตก

ระดับ IV = "คู่">

เราแก้ไขตาราง DEFICIT อีกครั้งและพิจารณาว่าหากเราลบร้านขายยาออกจากตาราง PHARMACY บันทึกทั้งหมดของร้านขายยานี้ในตาราง DEFICIT ควรถูกลบออก:

แก้ไขตาราง DEFICIT เพิ่มข้อ จำกัด PH_ID คีย์ต่างประเทศ (PH_ID) อ้างอิง PHARMACY ในการลบน้ำตก

คุณสามารถตั้งค่าข้อจำกัดในการตรวจสอบได้โดยใช้คำสั่ง ALTER TABLE ไวยากรณ์สำหรับคำขอดังกล่าวมีดังนี้:

แก้ไขตาราง TABLE_NAME เพิ่มข้อจำกัด CHECK_DATA CHECK (เงื่อนไขที่ต้องตรวจสอบ)

ตัวอย่างที่ 8เรายังคงทำงานร่วมกับฐานข้อมูลห่วงโซ่ร้านขายยาต่อไป

คุณต้องแก้ไขตาราง AVAILABILITY และพิจารณาว่าในบันทึกเดียวกัน ค่าของแอตทริบิวต์ DateStart ของตารางต้องไม่ต่ำกว่าค่า DateEnd

เปลี่ยนความพร้อมใช้งานของตารางเพิ่มข้อ จำกัด CHECK_DATA CHECK (DateStart

เราเปลี่ยนตาราง DEFICIT และพิจารณาว่าในบันทึกเดียวกันค่าของแอตทริบิวต์ DateStart ของตารางไม่ควรน้อยกว่าค่า DateEnd:

แก้ไขการขาดดุลของตารางเพิ่มข้อจำกัด CHECK_DATA CHECK (DateStart

ฐานข้อมูลเชิงสัมพันธ์และภาษา SQL

ข้อจำกัดในการตรวจสอบในระดับต่อไปนี้สามารถแยกแยะได้:

  • ระดับแอตทริบิวต์ (คอลัมน์)
  • ระดับทูเพิล (แถว)
  • ระดับความสัมพันธ์ (ตาราง)

ข้อจำกัดระดับคอลัมน์จะตรวจสอบค่าของคอลัมน์เดียวเท่านั้น กล่าวคือ ข้อจำกัดประเภทนี้อ้างอิงเพียงคอลัมน์เดียวในตารางที่มีคำจำกัดความที่มีข้อจำกัด เพื่อให้เป็นตัวอย่างของข้อจำกัดดังกล่าว เราจะกลับไปที่แผนภาพ "บริษัทคอมพิวเตอร์" ในตารางผลิตภัณฑ์ คอลัมน์ประเภทสามารถมีค่าใดค่าหนึ่งจากสามค่าได้ เราสามารถป้องกันไม่ให้ข้อมูลอื่นใดถูกป้อนลงในคอลัมน์นี้ได้โดยใช้ข้อจำกัดดังนี้:

    ตรวจสอบ (พิมพ์ IN ("เครื่องพิมพ์" , "พีซี" , "แล็ปท็อป") )

ลองย้อนกลับไปดูคำสั่ง ALTER TABLE กัน ซึ่งช่วยให้เราสามารถเปลี่ยนโครงสร้างของตารางโดยไม่ต้องสร้างใหม่ทุกครั้ง ทั้งหมดนี้มีความสำคัญมากกว่า เนื่องจากอาจจำเป็นต้องเปลี่ยนโครงสร้างเมื่อตารางมีข้อมูลอยู่แล้ว

คุณสามารถใช้คำสั่ง ALTER TABLE เพื่อเพิ่มหรือลบคอลัมน์ ค่าเริ่มต้น และข้อจำกัดได้

ในขณะนี้ เราสนใจที่จะเพิ่มข้อจำกัดในคอลัมน์ประเภท ดังนั้นก่อนอื่น เราจะจัดเตรียมไวยากรณ์ของตัวดำเนินการสำหรับการเพิ่มข้อจำกัด:

    เปลี่ยนตาราง

    เพิ่มข้อจำกัด ;

ตอนนี้เรามาเพิ่มข้อจำกัดของเราแล้วตรวจสอบว่ามันทำงานอย่างไร

    เปลี่ยนสินค้าโต๊ะ

    เพิ่มข้อจำกัด chk_type CHECK (พิมพ์ IN ("pc" , "laptop" , "printer" ) ) ;

เพื่อให้แน่ใจว่าข้อจำกัดทำงานได้ตามที่เราคาดหวัง ให้ลองเพิ่มแบบจำลองชนิดใหม่:

    ใส่ลงในค่าผลิตภัณฑ์ ("A" , 1122 , "notebook" ) ;

ตามที่คาดไว้ เราจะได้รับข้อความแสดงข้อผิดพลาดเป็นการตอบกลับ:

คำสั่ง INSERT ขัดแย้งกับข้อจำกัด CHECK "chk_type" ข้อขัดแย้งเกิดขึ้นในฐานข้อมูล "learn" ตาราง "dbo.product" คอลัมน์ "type" แถลงการณ์ได้สิ้นสุดลงแล้ว

(คำสั่ง INSERT ขัดแย้งกับข้อจำกัด CHECK "chk_type" ข้อขัดแย้งเกิดขึ้นในฐานข้อมูล "learn", ตาราง "dbo.product", คอลัมน์ "type" คำสั่งนี้ถูกยกเลิก)

ตามที่คุณอาจเดาได้ ข้อจำกัดระดับแถวประกอบด้วยการอ้างอิงไปยังหลายคอลัมน์ ในกรณีนี้ ข้อจำกัดจะถูกตรวจสอบสำหรับแถวที่แก้ไขแต่ละแถวแยกกัน สามารถเพิ่ม (หรือเปลี่ยนแปลง) แถวได้หากไม่มีการละเมิดข้อจำกัด

ตัวอย่างเช่น เราจะห้ามผู้ผลิต Z ไม่ให้ผลิตสิ่งอื่นใดนอกจากเครื่องพิมพ์

    เปลี่ยนสินค้าโต๊ะ

    เพิ่มข้อจำกัด chk_maker_Z CHECK ((maker="Z" AND type= "printer" ) หรือ maker "Z" ) ;

ดังนั้น ข้อจำกัดจะตรวจสอบว่าโมเดลในตารางผลิตภัณฑ์ต้องเป็นเครื่องพิมพ์จากผู้ผลิต Z (maker="Z" และ type="printer") หรือผู้ผลิตรายอื่น (แต่ไม่ใช่ Z)

ถ้าลองเพิ่มโมเดลคอมพิวเตอร์ของ Z ผู้ผลิต,

ในบทช่วยสอนนี้คุณจะได้เรียนรู้วิธีการใช้งาน คำสั่ง MySQL ALTER TABLEเพื่อเพิ่มคอลัมน์ เปลี่ยนคอลัมน์ ลบคอลัมน์ เปลี่ยนชื่อคอลัมน์ หรือเปลี่ยนชื่อตาราง (พร้อมไวยากรณ์และตัวอย่าง)

คำอธิบาย

คำสั่ง MySQL ALTER TABLEใช้เพื่อเพิ่ม เปลี่ยนแปลง หรือลบคอลัมน์ในตาราง คำสั่ง MySQL ALTER TABLE ยังใช้ในการเปลี่ยนชื่อตารางอีกด้วย

เพิ่มคอลัมน์ลงในตาราง

ไวยากรณ์

ไวยากรณ์สำหรับการเพิ่มคอลัมน์ลงในตาราง MySQL (โดยใช้คำสั่ง ALTER TABLE) คือ:

แก้ไขตาราง table_name




ครั้งแรก | AFTER column_name เป็นทางเลือก มันบอก MySQL ว่าคอลัมน์นั้นถูกสร้างขึ้นที่ใดในตาราง หากไม่ได้ระบุพารามิเตอร์นี้ คอลัมน์ใหม่จะถูกเพิ่มที่ส่วนท้ายของตาราง

ตัวอย่าง

ลองดูตัวอย่างที่แสดงวิธีการเพิ่มคอลัมน์ลงในตาราง MySQL โดยใช้คำสั่ง ALTER TABLE
ตัวอย่างเช่น:

MySQL

แก้ไขรายชื่อติดต่อในตาราง เพิ่มนามสกุล varchar (40) ไม่เป็นโมฆะหลังจาก contact_id;

เปลี่ยนรายชื่อผู้ติดต่อของตาราง

หลังจาก contact_id;

ตัวอย่าง MySQL ALTER TABLE นี้จะเพิ่มคอลัมน์ชื่อ Last_name ลงในตารางผู้ติดต่อ มันจะถูกสร้างขึ้นเป็นคอลัมน์ NOT NULL และจะปรากฏในตารางหลังช่อง contact_id

เพิ่มหลายคอลัมน์ลงในตาราง

ไวยากรณ์

ไวยากรณ์สำหรับการเพิ่มหลายคอลัมน์ลงในตาราง MySQL (โดยใช้คำสั่ง ALTER TABLE) คือ:

แก้ไขตาราง table_name
เพิ่ม new_column_name column_definition

เพิ่ม new_column_name column_definition
[ ครั้งแรก | หลังจาก column_name ],

;

table_name — ชื่อของตารางที่จะเปลี่ยน
new_column_name - ชื่อของคอลัมน์ใหม่ที่จะเพิ่มลงในตาราง
column_definition - ประเภทข้อมูลและคำจำกัดความของคอลัมน์ (NULL หรือ NOT NULL ฯลฯ)
ครั้งแรก | AFTER column_name เป็นทางเลือก มันบอก MySQL ว่าคอลัมน์นั้นถูกสร้างขึ้นที่ใดในตาราง หากไม่ได้ระบุพารามิเตอร์นี้ คอลัมน์ใหม่จะถูกเพิ่มที่ส่วนท้ายของตาราง

ตัวอย่าง

ลองดูตัวอย่างที่แสดงวิธีเพิ่มหลายคอลัมน์ลงในตาราง MySQL โดยใช้คำสั่ง ALTER TABLE
ตัวอย่างเช่น:

MySQL

แก้ไขรายชื่อติดต่อในตาราง เพิ่มนามสกุล varchar (40) ไม่เป็นโมฆะหลังจาก contact_id เพิ่มชื่อ varchar (35) NULL หลังจากนามสกุล;

เปลี่ยนรายชื่อผู้ติดต่อของตาราง

เพิ่ม Last_namevarchar (40)ไม่เป็นค่าว่าง

หลังจาก contact_id

เพิ่ม first_namevarchar(35)NULL

หลังจากนามสกุล;

ตัวอย่าง ALTER TABLE นี้จะเพิ่มสองคอลัมน์ลงในตารางผู้ติดต่อ ได้แก่ Last_name และ first_name

ฟิลด์ Last_name จะถูกสร้างขึ้นเป็นคอลัมน์ varchar(40) NOT NULL และจะปรากฏในตารางรายชื่อติดต่อหลังคอลัมน์ contact_id คอลัมน์ first_name จะถูกสร้างขึ้นเป็นคอลัมน์ NULL varchar(35) และจะปรากฏในตารางหลังคอลัมน์ Last_name

เปลี่ยนคอลัมน์ในตาราง

ไวยากรณ์

ไวยากรณ์ในการเปลี่ยนคอลัมน์ในตาราง MySQL (โดยใช้คำสั่ง ALTER TABLE) คือ:

แก้ไขตาราง table_name

[ ครั้งแรก | หลังจาก column_name ];

table_name — ชื่อของตารางที่จะเปลี่ยน


ตัวอย่าง

ลองดูตัวอย่างที่แสดงวิธีการเปลี่ยนคอลัมน์ในตาราง MySQL โดยใช้คำสั่ง ALTER TABLE
ตัวอย่างเช่น:

MySQL

แก้ไขรายชื่อผู้ติดต่อ MODIFY นามสกุล varchar (50) NULL;

เปลี่ยนรายชื่อผู้ติดต่อของตาราง

แก้ไข Last_namevarchar (50)NULL ;

ตัวอย่าง ALTER TABLE นี้จะเปลี่ยนคอลัมน์ชื่อ Last_name เป็นประเภทข้อมูล varchar(50) และตั้งค่าของคอลัมน์เป็น NULL

เปลี่ยนหลายคอลัมน์ในตาราง

ไวยากรณ์

ไวยากรณ์สำหรับการเปลี่ยนหลายคอลัมน์ในตาราง MySQL (โดยใช้คำสั่ง ALTER TABLE) คือ:

แก้ไขตาราง table_name
แก้ไข column_name column_definition
[ ครั้งแรก | หลังจาก column_name ],
แก้ไข column_name column_definition
[ ครั้งแรก | หลังจาก column_name ],

;

table_name — ชื่อของตารางที่จะเปลี่ยน
column_name คือชื่อของคอลัมน์ที่จะเปลี่ยนแปลงในตาราง
column_definition - ประเภทข้อมูลที่แก้ไขและคำจำกัดความของคอลัมน์ (NULL หรือ NOT NULL ฯลฯ )
ครั้งแรก | AFTER column_name เป็นทางเลือก มันบอก MySQL ว่าควรวางคอลัมน์ไว้ที่ใดในตารางหากคุณต้องการเปลี่ยนตำแหน่ง

ตัวอย่าง

ลองดูตัวอย่างที่แสดงวิธีการเปลี่ยนหลายคอลัมน์ในตาราง MySQL โดยใช้คำสั่ง ALTER TABLE

MySQL

แก้ไขรายชื่อผู้ติดต่อ MODIFY นามสกุล varchar (55) NULL หลังจาก contact_type, แก้ไขชื่อ varchar (30) ไม่เป็น NULL;

เปลี่ยนรายชื่อผู้ติดต่อของตาราง

แก้ไข Last_namevarchar (55) NULL

หลังจากประเภทการติดต่อ

แก้ไข first_namevarchar (30) ไม่เป็นโมฆะ ;

ตัวอย่าง ALTER TABLE นี้จะเปลี่ยนสองคอลัมน์ในตารางผู้ติดต่อ - Last_name และ first_name
ฟิลด์ Last_name จะเปลี่ยนเป็นคอลัมน์ NULL varchar(55) และจะปรากฏในตารางหลังคอลัมน์ contact_type คอลัมน์ first_name จะถูกเปลี่ยนเป็นคอลัมน์ varchar(30) NOT NULL (และจะไม่เปลี่ยนตำแหน่งในคำจำกัดความของตารางผู้ติดต่อ เนื่องจากไม่ได้ระบุ FIRST | AFTER)

การลบคอลัมน์ออกจากตาราง

ไวยากรณ์

ไวยากรณ์ในการลบคอลัมน์ออกจากตารางใน MySQL (โดยใช้คำสั่ง ALTER TABLE) คือ:
ตัวอย่างเช่น:

แก้ไขตาราง table_name
วางคอลัมน์ column_name;

table_name — ชื่อของตารางที่จะเปลี่ยน
column_name คือชื่อของคอลัมน์ที่จะลบออกจากตาราง

ตัวอย่าง

ลองดูตัวอย่างที่แสดงวิธีการลบคอลัมน์ออกจากตารางใน MySQL โดยใช้คำสั่ง ALTER TABLE
ตัวอย่างเช่น:

MySQL

แก้ไขรายชื่อผู้ติดต่อ DROP COLUMN contact_type;

อัปเดตครั้งล่าสุด: 07/09/2017

เมื่อถึงจุดหนึ่งเราอาจต้องการเปลี่ยนแปลงตารางที่มีอยู่ ตัวอย่างเช่น เพิ่มหรือลบคอลัมน์ เปลี่ยนประเภทคอลัมน์ เพิ่มหรือลบข้อจำกัด นั่นคือคุณจะต้องเปลี่ยนคำจำกัดความของตาราง หากต้องการเปลี่ยนตาราง ให้ใช้คำสั่ง ALTER TABLE

ไวยากรณ์ที่เป็นทางการทั่วไปของคำสั่งมีดังนี้:

แก้ไขตาราง table_name ( เพิ่ม column_name column_data_type [column_attributes] | DROP COLUMN column_name | ALTER COLUMN column_name column_data_type | เพิ่มข้อจำกัด_definition | DROP constraint_name)

ดังนั้น การใช้ ALTER TABLE เราจึงสามารถดำเนินการแก้ไขสถานการณ์ตารางได้หลากหลาย ลองดูบางส่วนของพวกเขา

การเพิ่มคอลัมน์ใหม่

มาเพิ่มคอลัมน์ที่อยู่ใหม่ลงในตารางลูกค้า:

แก้ไขตารางลูกค้าเพิ่มที่อยู่ NVARCHAR (50) NULL;

ในกรณีนี้ คอลัมน์ Address จะเป็นประเภท NVARCHAR และมีการกำหนดแอตทริบิวต์ NULL แต่ถ้าเราจำเป็นต้องเพิ่มคอลัมน์ที่ไม่ควรยอมรับค่า NULL ล่ะ? หากมีข้อมูลอยู่ในตาราง คำสั่งต่อไปนี้จะไม่ถูกดำเนินการ:

แก้ไขตารางลูกค้าเพิ่มที่อยู่ NVARCHAR (50) ไม่เป็นโมฆะ;

ดังนั้นในกรณีนี้ วิธีแก้ไขคือตั้งค่าเริ่มต้นผ่านแอตทริบิวต์ DEFAULT:

แก้ไขตารางลูกค้าเพิ่มที่อยู่ NVARCHAR (50) ไม่ใช่ค่าเริ่มต้น NULL "ไม่ทราบ";

ในกรณีนี้ หากมีข้อมูลในตารางอยู่แล้ว ค่า "ไม่ทราบ" จะถูกเพิ่มลงในคอลัมน์ที่อยู่

ลบคอลัมน์

ลองลบคอลัมน์ที่อยู่ออกจากตารางลูกค้า:

แก้ไขตารางลูกค้าวางที่อยู่คอลัมน์;

การเปลี่ยนประเภทคอลัมน์

มาเปลี่ยนประเภทข้อมูลของคอลัมน์ FirstName ในตารางลูกค้าเป็น NVARCHAR(200) :

แก้ไขตารางลูกค้า ALTER COLUMN ชื่อ NVARCHAR (200);

การเพิ่มข้อจำกัด CHECK

เมื่อคุณเพิ่มข้อจำกัด SQL Server จะตรวจสอบข้อมูลที่มีอยู่กับข้อจำกัดที่เพิ่มโดยอัตโนมัติ หากข้อมูลไม่เป็นไปตามข้อจำกัด ข้อจำกัดดังกล่าวจะไม่ถูกเพิ่ม ตัวอย่างเช่น ตั้งค่าคอลัมน์อายุในตารางลูกค้าเป็นอายุ > 21

แก้ไขตาราง ลูกค้าเพิ่มการตรวจสอบ (อายุ > 21)

หากมีแถวในตารางที่คอลัมน์อายุมีค่าที่ไม่ตรงตามข้อ จำกัด นี้คำสั่ง sql จะล้มเหลวโดยมีข้อผิดพลาด เพื่อหลีกเลี่ยงการตรวจสอบการจับคู่ประเภทนี้และยังคงเพิ่มข้อจำกัดแม้ว่าจะมีข้อมูลที่ไม่ตรงกัน ให้ใช้คำสั่งย่อย WITH NOCHECK:

แก้ไขตาราง ลูกค้าที่ไม่มีการตรวจสอบ เพิ่มการตรวจสอบ (อายุ > 21)

ค่าเริ่มต้นคือ WITH CHECK ซึ่งจะตรวจสอบกับข้อจำกัด

การเพิ่มคีย์ต่างประเทศ

สมมติว่าเริ่มแรกมีการเพิ่มตารางสองตารางลงในฐานข้อมูล ซึ่งไม่เกี่ยวข้องกันในทางใดทางหนึ่ง:

สร้างตารางลูกค้า (Id INT รหัสประจำตัวหลัก, อายุ INT เริ่มต้น 18, ชื่อแรก NVARCHAR (20) ไม่เป็นโมฆะ, นามสกุล NVARCHAR (20) ไม่เป็นโมฆะ, อีเมล VARCHAR (30) ไม่ซ้ำกัน, โทรศัพท์ VARCHAR (20) ไม่ซ้ำกัน); สร้างคำสั่งซื้อตาราง (Id INT IDENTITY, CustomerId INT, CreateAt Date);

มาเพิ่มข้อจำกัดคีย์ต่างประเทศให้กับคอลัมน์ CustomerId ของตารางคำสั่งซื้อ:

แก้ไขคำสั่งซื้อของตาราง เพิ่มคีย์ต่างประเทศ (รหัสลูกค้า) ข้อมูลอ้างอิง ลูกค้า (รหัส);

การเพิ่มคีย์หลัก

ใช้ตารางคำสั่งซื้อที่กำหนดไว้ด้านบน เพิ่มคีย์หลักให้กับคอลัมน์ Id:

แก้ไขคำสั่งตารางเพิ่มคีย์หลัก (Id);

การเพิ่มข้อจำกัดในการตั้งชื่อ

เมื่อเพิ่มข้อจำกัด เราสามารถตั้งชื่อโดยใช้คำสั่ง CONSTRAINT ตามด้วยชื่อข้อจำกัด:

แก้ไขคำสั่งซื้อตารางเพิ่มข้อ จำกัด PK_Orders_Id คีย์หลัก (Id), CONSTRAINT FK_Orders_To_Customers คีย์ต่างประเทศ (รหัสลูกค้า) ลูกค้าอ้างอิง (Id); แก้ไขตารางลูกค้าเพิ่มข้อจำกัด CK_Age_Greater_Than_Zero CHECK (อายุ > 0);

การลบข้อจำกัด

หากต้องการลบข้อจำกัด คุณต้องทราบชื่อข้อจำกัดเหล่านั้น หากเราไม่ทราบชื่อข้อจำกัดที่ชัดเจน เราสามารถค้นหาได้ผ่าน SQL Server Management Studio:

โดยการขยายโหนดตารางในโหนดย่อย Keys คุณสามารถดูชื่อของข้อจำกัดคีย์หลักและคีย์นอกได้ ชื่อข้อจำกัดคีย์ต่างประเทศจะขึ้นต้นด้วย "FK" และในโหนดย่อย Constraints คุณจะพบข้อจำกัด CHECK และ DEFAULT ทั้งหมด ข้อจำกัดในการตรวจสอบเริ่มต้นด้วย "CK" และข้อจำกัดเริ่มต้นด้วย "DF"

ตัวอย่างเช่น อย่างที่คุณเห็นในภาพหน้าจอ ในกรณีของฉัน ชื่อของข้อจำกัดคีย์นอกในตารางคำสั่งซื้อเรียกว่า "FK_Orders_To_Customers" ดังนั้นในการลบคีย์ต่างประเทศฉันสามารถใช้นิพจน์ต่อไปนี้:

แก้ไขคำสั่งซื้อตาราง DROP FK_Orders_To_Customers;

การจัดการตารางเป็นหนึ่งในกิจกรรมทั่วไปที่ผู้ดูแลระบบฐานข้อมูลและโปรแกรมเมอร์ทำเมื่อทำงานกับออบเจ็กต์ฐานข้อมูล ในส่วนนี้ให้รายละเอียดเกี่ยวกับวิธีสร้างและแก้ไขตาราง

มาตรฐาน ANSI เป็นตัวส่วนร่วมที่ต่ำที่สุดสำหรับผู้ผลิตทุกราย แม้ว่าผู้ผลิตทุกรายจะไม่ได้นำคุณลักษณะทุกอย่างของคำสั่ง CREATE TABLE และ ALTER TABLE เวอร์ชันมาตรฐานมาใช้ก็ตาม อย่างไรก็ตาม มาตรฐาน ANSI เป็นรูปแบบพื้นฐานที่สามารถใช้ได้กับทุกแพลตฟอร์ม

ในทางกลับกัน แพลตฟอร์มต่างๆ ก็มีส่วนขยายและการเพิ่มเติมต่างๆ ให้กับคำสั่ง CREATE TABLE และ ALTER TABLE มาตรฐาน ANSI

โดยปกติแล้ว คุณต้องคิดอย่างรอบคอบเกี่ยวกับการออกแบบโต๊ะและวิธีการสร้างโต๊ะ กระบวนการนี้เรียกว่าการออกแบบฐานข้อมูล กระบวนการวิเคราะห์ความสัมพันธ์ของตารางกับข้อมูลของตัวเองและตารางอื่นๆ ในฐานข้อมูลเรียกว่าการทำให้เป็นมาตรฐาน เราขอแนะนำให้โปรแกรมเมอร์และผู้ดูแลระบบฐานข้อมูลศึกษาหลักการออกแบบและการทำให้เป็นมาตรฐานก่อนใช้คำสั่ง CREATE DATABASE

ไวยากรณ์ SQL 2003

เมื่อคุณรันคำสั่ง SQL 2003 CREATE TABLE ตารางถาวรหรือชั่วคราวจะถูกสร้างขึ้นในฐานข้อมูล ไวยากรณ์มีดังนี้

สร้าง [(ชั่วคราวในท้องถิ่น) GLOBAL ชั่วคราว)] ตาราง table_name (คอลัมน์_ชื่อ data_type คุณลักษณะ [, ...]) | [column_name พร้อมตัวเลือกตัวเลือก] |

- (สร้างระบบ | สร้างโดยผู้ใช้ | สืบทอด)] [, ...]] [table_definition]] table_name data_type คุณลักษณะ] |

column_name ตั้งค่าเริ่มต้น default_value] |

column_name DROP DEFAULT] |

column_name เพิ่มขอบเขต table_name |

column_name DROP SCOPE (จำกัด | CASCADE)] |

column_name (จำกัด | CASCADE)] |

-

คำหลัก

ชั่วคราว

เชื่อมโยงแอตทริบิวต์ข้อจำกัดที่ระบุกับคอลัมน์ คุณสามารถระบุแอตทริบิวต์หลายรายการสำหรับคอลัมน์เดียวชื่อ column_name ไม่ต้องใช้ลูกน้ำ คุณลักษณะ ANSI โดยทั่วไปมีดังต่อไปนี้

ไม่เป็นโมฆะ

คอลัมน์ไม่อนุญาตให้มีค่า NULL (หรืออนุญาตหากละเว้นส่วนคำสั่ง NOT NULL) คำสั่ง INSERT และ UPDATE ใดๆ ที่พยายามวางค่า NULL ในคอลัมน์ที่มีแอตทริบิวต์ NOT NULL จะล้มเหลวและจะถูกย้อนกลับ

นิพจน์เริ่มต้น

คอลัมน์จะใช้ค่าของนิพจน์หากคำสั่ง INSERT หรือ UPDATE ไม่ได้ระบุค่าใดๆ นิพจน์จะต้องถูกต้องสำหรับประเภทข้อมูลของคอลัมน์ ตัวอย่างเช่น คุณไม่สามารถใช้อักขระตัวอักษรใดๆ ในคอลัมน์ประเภท INTEGER ได้ นิพจน์อาจเป็นสตริงหรือตัวอักษรตัวเลข แต่คุณยังสามารถระบุฟังก์ชันที่ผู้ใช้กำหนดหรือฟังก์ชันของระบบได้ด้วย มาตรฐาน SQL 2003 อนุญาตให้ใช้ฟังก์ชันระบบต่อไปนี้ในส่วนคำสั่ง DEFAULT: NULL, USER, CURRENTJJSER, SESSION_USER, SYSTEMJJSER, CURRENT_PATH, CURRENT_DATE, CURRENTJIME, LOCALTIME, CURRENTJIMESTAMP, LOCALTJMESTAMP, ARRAY หรือ ARRAY

COLLATE collation_name

การจัดเรียงที่ใช้จะถูกกำหนด นั่นคือ ลำดับการจัดเรียงในคอลัมน์ที่เกี่ยวข้อง ชื่อของการแมปจะขึ้นอยู่กับแพลตฟอร์ม หากไม่ได้ระบุชื่อการจัดเรียง การจัดเรียงเริ่มต้นจะเป็นชุดอักขระที่ใช้ในคอลัมน์ มีการตรวจสอบการอ้างอิง พารามิเตอร์นี้กำหนดว่าการอ้างอิงในคอลัมน์ REF ที่กำหนดด้วยตัวเลือกขอบเขตจะถูกตรวจสอบหรือไม่ ส่วนคำสั่ง ON DELETE เพิ่มเติมจะกำหนดว่าค่าในบันทึกที่อ้างอิงโดยบันทึกที่ถูกลบจะถูกตั้งค่าเป็น NULL หรือการดำเนินการจะถูกจำกัดหรือไม่

ชื่อข้อจำกัด CONSTRAINT [ประเภทข้อจำกัด [ข้อจำกัด]]

พารามิเตอร์จะกำหนดข้อจำกัดให้กับคอลัมน์และสามารถเลือกชื่อข้อจำกัดได้ ประเภทของข้อจำกัดจะกล่าวถึงในบทที่ 2 เนื่องจากข้อจำกัดเชื่อมโยงกับคอลัมน์ใดคอลัมน์หนึ่ง การประกาศข้อจำกัดจึงถือว่าคอลัมน์นั้นจะเป็นคอลัมน์เดียวในข้อจำกัด เมื่อสร้างตารางแล้ว ข้อจำกัดจะถือเป็นข้อจำกัดระดับตาราง

คอลัมน์_ชื่อ

คอลัมน์ถูกกำหนดด้วยตัวเลือกพิเศษ เช่น ตัวเลือกขอบเขต ตัวเลือกค่าเริ่มต้น ข้อจำกัดระดับคอลัมน์ หรือส่วนคำสั่ง COLLATE ในการใช้งานหลายอย่าง ส่วนคำสั่ง WITH OPTIONS ถูกจำกัดอยู่เพียงการสร้างตารางที่พิมพ์เท่านั้น

ชอบ table_name

ตารางใหม่ถูกสร้างขึ้นโดยมีคำจำกัดความคอลัมน์เดียวกันกับตาราง table_name ที่มีอยู่

REFIS column_name (สร้างระบบ | สร้างโดยผู้ใช้มา)

กำหนดคอลัมน์ตัวระบุวัตถุ (OID) ในตารางที่พิมพ์ จำเป็นต้องมีตัวระบุวัตถุสำหรับตารางที่เป็นรากของลำดับชั้นของตาราง ตามพารามิเตอร์นี้ คอลัมน์ REF สามารถสร้างขึ้นได้โดยอัตโนมัติโดยระบบ (SYSTEM GENERATED) ซึ่งระบุด้วยตนเองโดยผู้ใช้เมื่อเข้าสู่แถว (USER GENERATED) หรือสร้างจากคอลัมน์ REF อื่น (DERIVED) พารามิเตอร์ต้องการให้รวมแอตทริบิวต์ REFERENCES ไว้ในคอลัมน์ column_name

ประเภทข้อจำกัดข้อจำกัด [ชื่อข้อจำกัด] [, …]

ตารางถูกกำหนดข้อจำกัดตั้งแต่หนึ่งข้อขึ้นไป การตั้งค่านี้แตกต่างอย่างเห็นได้ชัดจากข้อจำกัดระดับคอลัมน์ เนื่องจากข้อจำกัดระดับคอลัมน์จะถือว่ามีผลกับคอลัมน์ที่เกี่ยวข้องเท่านั้น สำหรับข้อจำกัดระดับตาราง คุณสามารถเชื่อมโยงหลายคอลัมน์กับข้อจำกัดหนึ่งๆ ได้ ตัวอย่างเช่น ในตารางการขาย คุณอาจต้องประกาศข้อจำกัดเฉพาะใน store_id, order_id และ order_date คีย์ที่ต่อกัน ซึ่งสามารถทำได้โดยใช้ข้อจำกัดระดับตารางเท่านั้น สำหรับการอภิปรายโดยละเอียดเกี่ยวกับข้อจำกัด โปรดดูบทที่ 2

ของ type_name [table_definition]

ตารางได้รับการประกาศให้เป็นไปตามประเภทที่ผู้ใช้กำหนดสำเร็จรูป ในสถานการณ์นี้ ตารางสามารถมีได้เพียงคอลัมน์เดียวสำหรับแอตทริบิวต์ประเภทที่มีโครงสร้างแต่ละรายการ บวกกับคอลัมน์เพิ่มเติมที่กำหนดในส่วนคำสั่ง REF IS ประเภทข้อมูล REF ได้รับการอธิบายโดยละเอียดในส่วนคำสั่ง CREATE/ALTER TYPE ส่วนคำสั่งนี้เข้ากันไม่ได้กับส่วนคำสั่ง LIKE table_name ที่ไหน:

ภายใต้ supertable [คำจำกัดความ/ตาราง]

ประกาศ supertable ทันทีสำหรับตารางปัจจุบันในสคีมาเดียวกัน (ถ้ามี) หรือคุณสามารถระบุ table_definition แบบเต็มสำหรับ supertable โดยเติมคอลัมน์ ข้อจำกัด และอื่นๆ ที่คล้ายกัน

เมื่อกระทำ (รักษาแถว ลบแถว]

ส่วนคำสั่ง ON COMMIT PRESERVE ROWS จะรักษาแถวข้อมูลตารางชั่วคราวเมื่อมีการดำเนินการคำสั่ง COMMIT ส่วนคำสั่ง ON COMMIT DELETE RO WS จะลบแถวของข้อมูลทั้งหมดในตารางชั่วคราวเมื่อมีการดำเนินการคำสั่ง COMMIT

เพิ่มแอตทริบิวต์ column_name data_type

คอลัมน์ที่มีประเภทข้อมูลและคุณลักษณะที่เหมาะสมจะถูกเพิ่มลงในตาราง

แก้ไข column_name ตั้งค่า DEFAULT default_value

เพิ่มค่าเริ่มต้นให้กับคอลัมน์ (หากไม่มี) หรือเปลี่ยนค่าที่มีอยู่

แก้ไข column_name DROP DEFAULT

ค่าเริ่มต้นจะถูกลบออกจากคอลัมน์ที่ระบุอย่างสมบูรณ์

แก้ไข column_name เพิ่มขอบเขต table_name

มีการเพิ่มขอบเขตในคอลัมน์ที่ระบุ ขอบเขตคือการอ้างอิงถึงประเภทข้อมูลที่กำหนดเอง

แก้ไข column_name DROP SCOPE

ขอบเขตจะถูกลบออกจากคอลัมน์ที่ระบุ คำสั่งย่อย RESTRICT และ CASCADE มีอธิบายไว้ท้ายรายการนี้

วางคอลัมน์ column_name

คอลัมน์ที่ระบุจะถูกลบออกจากตาราง คำสั่งย่อย RESTRICT และ CASCADE มีอธิบายไว้ท้ายรายการนี้

เพิ่ม table_constraint

ข้อจำกัดที่มีชื่อและคุณลักษณะที่ระบุจะถูกเพิ่มลงในตาราง

ชื่อข้อจำกัด DROP CONSTRAINT

ข้อจำกัดที่มีอยู่จะถูกลบออกจากตาราง

จำกัด

เมื่อระบุส่วนคำสั่งนี้ RDBMS จะยกเลิกคำสั่งหากพบอ็อบเจ็กต์ในฐานข้อมูลที่ขึ้นอยู่กับอ็อบเจ็กต์

เมื่อมีการระบุส่วนคำสั่งนี้ RDBMS จะลบอ็อบเจ็กต์อื่น ๆ ทั้งหมดที่ขึ้นอยู่กับอ็อบเจ็กต์นี้