Tôi đã ném thủ tục được lưu trữ này cùng với một khởi đầu từ các bình luận của @lain ở trên, loại tốt nếu bạn cần gọi nó nhiều hơn một vài lần [và không cần PHP]:
delimiter //
-- ------------------------------------------------------------
-- Use the inforamtion_schema to tell if a field exists.
-- Optional param dbName, defaults to current database
-- ------------------------------------------------------------
CREATE PROCEDURE fieldExists [
OUT _exists BOOLEAN, -- return value
IN tableName CHAR[255], -- name of table to look for
IN columnName CHAR[255], -- name of column to look for
IN dbName CHAR[255] -- optional specific db
] BEGIN
-- try to lookup db if none provided
SET @_dbName := IF[dbName IS NULL, database[], dbName];
IF CHAR_LENGTH[@_dbName] = 0
THEN -- no specific or current db to check against
SELECT FALSE INTO _exists;
ELSE -- we have a db to work with
SELECT IF[count[*] > 0, TRUE, FALSE] INTO _exists
FROM information_schema.COLUMNS c
WHERE
c.TABLE_SCHEMA = @_dbName
AND c.TABLE_NAME = tableName
AND c.COLUMN_NAME = columnName;
END IF;
END //
delimiter ;
Làm việc với fieldExists
mysql> call fieldExists[@_exists, 'jos_vm_product', 'child_option', NULL] //
Query OK, 0 rows affected [0.01 sec]
mysql> select @_exists //
+----------+
| @_exists |
+----------+
| 0 |
+----------+
1 row in set [0.00 sec]
mysql> call fieldExists[@_exists, 'jos_vm_product', 'child_options', 'etrophies'] //
Query OK, 0 rows affected [0.01 sec]
mysql> select @_exists //
+----------+
| @_exists |
+----------+
| 1 |
+----------+
Tôi đang cố gắng tạo một cột cho bảng của tôi chỉ khi nó không tồn tại. Tôi đã nghiên cứu rất nhiều nhưng tôi chưa thể tìm thấy bất kỳ giải pháp nào.
Điều này có thực sự có thể để tạo ra cột không?
Hỏi ngày 7 tháng 4 năm 2017 lúc 14:44Apr 7, 2017 at 14:44
2
MySQL ALTER TABLE
không có đặc tả IF EXISTS
.
Bạn có thể làm như sau thông qua việc sử dụng Proc được lưu trữ hoặc ngôn ngữ lập trình nếu đây là điều mà bạn sẽ cần làm một cách thường xuyên:
Pseudocode:
Tìm nếu cột tồn tại bằng SQL bên dưới:
Chọn
0 từ ____ 11 .________ 12 trong đó ________ 13 = [Tên cơ sở dữ liệu] và ________ 14 = [Tên bảng];mysql> call fieldExists[@_exists, 'jos_vm_product', 'child_option', NULL] // Query OK, 0 rows affected [0.01 sec] mysql> select @_exists // +----------+ | @_exists | +----------+ | 0 | +----------+ 1 row in set [0.00 sec] mysql> call fieldExists[@_exists, 'jos_vm_product', 'child_options', 'etrophies'] // Query OK, 0 rows affected [0.01 sec] mysql> select @_exists // +----------+ | @_exists | +----------+ | 1 | +----------+
Nếu truy vấn trên trả về kết quả thì nó có nghĩa là cột tồn tại, nếu không bạn có thể tiếp tục và tạo cột.
Đã trả lời ngày 7 tháng 4 năm 2017 lúc 16:08Apr 7, 2017 at 16:08
Thataruthatsaruthatsaru
6284 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges
2
Thực tế tồn tại bây giờ cho Maria DB 10.219
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR[255];
Tiền thưởng, nó cũng hoạt động để sửa đổi
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR[255];
Đã trả lời ngày 25 tháng 3 năm 2019 lúc 13:52Mar 25, 2019 at 13:52
ParoofkeyparoofkeyParoofkey
4711 Huy hiệu vàng4 Huy hiệu bạc 4 huy hiệu đồng1 gold badge4 silver badges4 bronze badges
1
Bạn có thể sử dụng giải pháp này, đã được đề cập trên một bài đăng Stackoverflow khác: [Tham khảo: //stackoverflow.com/a/31989541/]
MySQL - Bảng thay đổi để thêm một cột nếu nó không tồn tại:
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;
Đã trả lời ngày 8 tháng 3 năm 2018 lúc 9:06Mar 8, 2018 at 9:06
ANTO JOSEANTO JOSEAnto Jose
Huy hiệu Bạc 1311 Huy hiệu Đồng1 silver badge4 bronze badges
Điều này dưới đây đã làm việc cho tôi:
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 query["ALTER TABLE myTable ADD `example_Col` int NOT NULL"];
}catch[Exception $e]
{
echo "\nWarning example_Col already exists\n";
}
Đây là giả sử $ dB là một OBJCT cho phép bạn gửi một truy vấn tất nhiên.
Đã trả lời ngày 21 tháng 5 năm 2021 lúc 15:38May 21, 2021 at 15:38