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

Thay đổi bảng nếu tồn tại hoặc tạo nếu không

MySQL INFORMATION_SCHEMA cơ sở dữ liệu để giải cứu:

-- First check if the table exists
IF EXISTS(SELECT table_name 
            FROM INFORMATION_SCHEMA.TABLES
           WHERE table_schema = 'db_name'
             AND table_name LIKE 'wild')

-- If exists, retreive columns information from that table
THEN
   SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
     FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'tbl_name'
      AND table_schema = 'db_name';

   -- do some action, i.e. ALTER TABLE if some columns are missing 
   ALTER TABLE ...

-- Table does not exist, create a new table
ELSE
   CREATE TABLE ....

END IF;

Thông tin thêm:

CẬP NHẬT:

Một tùy chọn khác, có thể dễ dàng hơn, là bỏ bảng hiện có và tạo lại nó một lần nữa với lược đồ mới. Để làm điều này, bạn cần:

  1. Tạo bảng tạm thời, một bản sao chính xác của bảng hiện có
  2. Điền vào bảng tạm thời với dữ liệu từ bảng cũ
  3. Bỏ bảng cũ
  4. Tạo bảng mới với giản đồ mới
  5. Điền vào bảng mới với thông tin từ bảng tạm thời
  6. Bỏ bảng tạm thời.

Vì vậy, trong mã SQL:

CREATE TABLE old_table_copy LIKE old_table;

INSERT INTO old_table_copy
SELECT * FROM old_table;

DROP TABLE old_table;

CREATE TABLE new_table (...new values...);

INSERT INTO new_table ([... column names from old table ...])
SELECT [...column names from old table ...] 
FROM old_table_copy;

DROP TABLE old_table_copy;

Trên thực tế, bước cuối cùng, "Bỏ bảng tạm thời", bạn có thể bỏ qua một lúc. Đề phòng trường hợp, bạn muốn có một số loại bản sao lưu của bảng cũ, "chỉ trong trường hợp".

Thông tin thêm:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có giải pháp thay thế cho TOP trong MySQL không?

  2. VARCHAR làm khóa ngoại / khóa chính trong cơ sở dữ liệu tốt hay xấu?

  3. Truy vấn SQL với dữ liệu nhị phân (PHP và MySQL)

  4. Làm cách nào để CHỌN các hàng có MAX (Giá trị cột), PHẦN CỦA một cột khác trong MYSQL?

  5. truy vấn cập nhật mysql với truy vấn phụ