MySQL: จะสร้างคอลัมน์ได้อย่างไรถ้าไม่มีอยู่?


14

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

นี่เป็นไปได้จริง ๆ ที่จะสร้างคอลัมน์แบบมีเงื่อนไขหรือไม่


ฉันอยากรู้อยากเห็น ... เกิดอะไรขึ้นกับการปล่อยให้การแก้ไขล้มเหลวเนื่องจากข้อผิดพลาดหากมีคอลัมน์อยู่แล้ว?
Derek Downey

ที่จริงฉันต้องจัดเตรียมไฟล์. sql ให้กับลูกค้าของฉันซึ่งจะมีคำสั่งทั้งหมดที่เกี่ยวข้องกับการเปลี่ยนแปลงโครงสร้างฐานข้อมูล ฉันไม่สามารถส่งฐานข้อมูลทั้งหมดได้ ฉันแค่ต้องการส่งการเปลี่ยนแปลง db ให้พวกเขา มีข้อความค้นหาอื่น ๆ อีกมากมายในไฟล์ sql นั้น หากแบบสอบถามนี้เกี่ยวกับการสร้างคอลัมน์ล้มเหลวก็จะล้มเหลวแบบสอบถามทั้งหมด นั่นคือสาเหตุที่ฉันต้องการใช้ถ้าเงื่อนไขสร้างคอลัมน์
zzzzz

หากฐานข้อมูลของคุณรองรับคุณสามารถใช้ทริกเกอร์ได้ ก่อนที่จะใส่
cybernard

คำตอบ:


8

MySQL ALTER TABLEไม่มีสIF EXISTSเปค

คุณสามารถทำสิ่งต่อไปนี้โดยใช้ proc ที่เก็บไว้หรือภาษาการเขียนโปรแกรมหากนี่คือสิ่งที่คุณต้องทำเป็นประจำ:

pseudocode:

  • ค้นหาว่าคอลัมน์มีอยู่หรือไม่โดยใช้ SQL ด้านล่าง:

    เลือกจากcolumn_name WHERE = [ชื่อฐานข้อมูล] AND = [ชื่อตาราง];INFORMATION_SCHEMACOLUMNSTABLE_SCHEMATABLE_NAME

  • หากแบบสอบถามด้านบนส่งคืนผลลัพธ์หมายความว่ามีคอลัมน์อยู่มิฉะนั้นคุณสามารถไปข้างหน้าและสร้างคอลัมน์ได้


ใน MySQL / MariaDB ฉันพบข้อผิดพลาดในการใช้แบบสอบถามโดยระบุว่าcolumn_nameไม่มีอยู่จริง ฉันปรับโครงสร้างแบบสอบถามเป็น:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad

2
สำหรับการที่ง่าย 0 หรือ 1 คำตอบทั้ง MySQL และ (ฉันคิด) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo

14

ตอนนี้มีอยู่จริงสำหรับ Maria DB 10.219

ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);

โบนัสมันใช้งานได้สำหรับ MODIFY เช่นกัน

ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);

3
> "MySQL 5.5.5" หรือไม่ นี่ไม่ถูกต้องนี่เป็นคุณสมบัติของ Maria DB เท่านั้น
Excalibur

1
ขอบคุณสำหรับการแก้ไข
Paroofkey

6

คุณสามารถใช้โซลูชันนี้ได้กล่าวถึงแล้วในโพสต์ StackOverFlow อื่น: (อ้างอิง: https://stackoverflow.com/a/31989541/ )

MySQL - ALTER TABLE เพื่อเพิ่มคอลัมน์หากไม่มีอยู่:

SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

2

ด้านล่างนี้ใช้งานได้สำหรับฉัน:

    SELECT count(*)
    INTO @exist
    FROM information_schema.columns
    WHERE table_schema = 'mydatabase'
    and COLUMN_NAME = 'mycolumn'
    AND table_name = 'mytable' LIMIT 1;

    set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable`  ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
    'select \'Column Exists\' status');

    prepare stmt from @query;

    EXECUTE stmt;

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