Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

thêm cột vào bảng mysql nếu nó không tồn tại

Đây là một giải pháp hoạt động (vừa được dùng thử với MySQL 5.0 trên Solaris):

DELIMITER $$

DROP PROCEDURE IF EXISTS upgrade_database_1_0_to_2_0 $$
CREATE PROCEDURE upgrade_database_1_0_to_2_0()
BEGIN

-- rename a table safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME='my_old_table_name') ) THEN
    RENAME TABLE 
        my_old_table_name TO my_new_table_name,
END IF;

-- add a column safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND COLUMN_NAME='my_additional_column' AND TABLE_NAME='my_table_name') ) THEN
    ALTER TABLE my_table_name ADD my_additional_column varchar(2048) NOT NULL DEFAULT '';
END IF;

END $$

CALL upgrade_database_1_0_to_2_0() $$

DELIMITER ;

Thoạt nhìn, nó có thể phức tạp hơn bình thường, nhưng chúng ta phải giải quyết các vấn đề sau ở đây:

  • IF các câu lệnh chỉ hoạt động trong các thủ tục được lưu trữ, không hoạt động khi chạy trực tiếp, ví dụ:trong ứng dụng khách mysql
  • thanh lịch và ngắn gọn hơn SHOW COLUMNS không hoạt động trong quy trình được lưu trữ, vì vậy phải sử dụng INFORMATION_SCHEMA
  • cú pháp để phân tách các câu lệnh là lạ trong MySQL, vì vậy bạn phải xác định lại dấu phân cách để có thể tạo các thủ tục được lưu trữ. Đừng quên chuyển dấu phân cách trở lại!
  • INFORMATION_SCHEMA là chung cho tất cả các cơ sở dữ liệu, đừng quên lọc trên TABLE_SCHEMA=DATABASE() . DATABASE() trả về tên của cơ sở dữ liệu hiện được chọn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn nhiều hàng với các câu lệnh được chuẩn bị sẵn PDO

  2. Làm cách nào để kiểm tra xem một cột trống hoặc rỗng trong MySQL?

  3. Loại bỏ các bản sao chỉ bằng cách sử dụng một truy vấn MySQL?

  4. Hướng dẫn thiết kế cơ sở dữ liệu cho thông báo trong MySQL

  5. mySQL - Tạo một bảng mới bằng cách sử dụng dữ liệu và cột từ ba bảng