ฉันกำลังพยายามสร้างคอลัมน์สำหรับตารางของฉันหากไม่มีอยู่จริง ฉันค้นคว้ามาเยอะ แต่ยังหาทางออกไม่ได้
นี่เป็นไปได้จริง ๆ ที่จะสร้างคอลัมน์แบบมีเงื่อนไขหรือไม่
ฉันกำลังพยายามสร้างคอลัมน์สำหรับตารางของฉันหากไม่มีอยู่จริง ฉันค้นคว้ามาเยอะ แต่ยังหาทางออกไม่ได้
นี่เป็นไปได้จริง ๆ ที่จะสร้างคอลัมน์แบบมีเงื่อนไขหรือไม่
คำตอบ:
MySQL ALTER TABLE
ไม่มีสIF EXISTS
เปค
คุณสามารถทำสิ่งต่อไปนี้โดยใช้ proc ที่เก็บไว้หรือภาษาการเขียนโปรแกรมหากนี่คือสิ่งที่คุณต้องทำเป็นประจำ:
pseudocode:
ค้นหาว่าคอลัมน์มีอยู่หรือไม่โดยใช้ SQL ด้านล่าง:
เลือกจากcolumn_name
WHERE = [ชื่อฐานข้อมูล] AND = [ชื่อตาราง];INFORMATION_SCHEMA
COLUMNS
TABLE_SCHEMA
TABLE_NAME
หากแบบสอบถามด้านบนส่งคืนผลลัพธ์หมายความว่ามีคอลัมน์อยู่มิฉะนั้นคุณสามารถไปข้างหน้าและสร้างคอลัมน์ได้
column_name
ไม่มีอยู่จริง ฉันปรับโครงสร้างแบบสอบถามเป็น:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
ตอนนี้มีอยู่จริงสำหรับ 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);
คุณสามารถใช้โซลูชันนี้ได้กล่าวถึงแล้วในโพสต์ 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;
ด้านล่างนี้ใช้งานได้สำหรับฉัน:
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;