Hướng dẫn how do i add a new table to an existing table in mysql? - làm cách nào để thêm một bảng mới vào một bảng hiện có trong mysql?

13.1.9 & nbsp; thay đổi câu lệnh bảng

ALTER TABLE tbl_name
    [alter_option [, alter_option] ...]
    [partition_options]

alter_option: {
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX | KEY} [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name]
        (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (key_part,...)
        [index_option] ...
  | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
        [index_name] [index_type] (key_part,...)
        [index_option] ...
  | ADD [CONSTRAINT [symbol]] FOREIGN KEY
        [index_name] (col_name,...)
        reference_definition
  | ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
  | DROP {CHECK | CONSTRAINT} symbol
  | ALTER {CHECK | CONSTRAINT} symbol [NOT] ENFORCED
  | ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY}
  | ALTER [COLUMN] col_name {
        SET DEFAULT {literal | (expr)}
      | SET {VISIBLE | INVISIBLE}
      | DROP DEFAULT
    }
  | ALTER INDEX index_name {VISIBLE | INVISIBLE}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST | AFTER col_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | {DISABLE | ENABLE} KEYS
  | {DISCARD | IMPORT} TABLESPACE
  | DROP [COLUMN] col_name
  | DROP {INDEX | KEY} index_name
  | DROP PRIMARY KEY
  | DROP FOREIGN KEY fk_symbol
  | FORCE
  | LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ORDER BY col_name [, col_name] ...
  | RENAME COLUMN old_col_name TO new_col_name
  | RENAME {INDEX | KEY} old_index_name TO new_index_name
  | RENAME [TO | AS] new_tbl_name
  | {WITHOUT | WITH} VALIDATION
}

partition_options:
    partition_option [partition_option] ...

partition_option: {
    ADD PARTITION (partition_definition)
  | DROP PARTITION partition_names
  | DISCARD PARTITION {partition_names | ALL} TABLESPACE
  | IMPORT PARTITION {partition_names | ALL} TABLESPACE
  | TRUNCATE PARTITION {partition_names | ALL}
  | COALESCE PARTITION number
  | REORGANIZE PARTITION partition_names INTO (partition_definitions)
  | EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH | WITHOUT} VALIDATION]
  | ANALYZE PARTITION {partition_names | ALL}
  | CHECK PARTITION {partition_names | ALL}
  | OPTIMIZE PARTITION {partition_names | ALL}
  | REBUILD PARTITION {partition_names | ALL}
  | REPAIR PARTITION {partition_names | ALL}
  | REMOVE PARTITIONING
}

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option: {
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}
}

table_options:
    table_option [[,] table_option] ...

table_option: {
    AUTOEXTEND_SIZE [=] value
  | AUTO_INCREMENT [=] value
  | AVG_ROW_LENGTH [=] value
  | [DEFAULT] CHARACTER SET [=] charset_name
  | CHECKSUM [=] {0 | 1}
  | [DEFAULT] COLLATE [=] collation_name
  | COMMENT [=] 'string'
  | COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
  | CONNECTION [=] 'connect_string'
  | {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
  | DELAY_KEY_WRITE [=] {0 | 1}
  | ENCRYPTION [=] {'Y' | 'N'}
  | ENGINE [=] engine_name
  | ENGINE_ATTRIBUTE [=] 'string'
  | INSERT_METHOD [=] { NO | FIRST | LAST }
  | KEY_BLOCK_SIZE [=] value
  | MAX_ROWS [=] value
  | MIN_ROWS [=] value
  | PACK_KEYS [=] {0 | 1 | DEFAULT}
  | PASSWORD [=] 'string'
  | ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}
  | SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
  | STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
  | STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
  | STATS_SAMPLE_PAGES [=] value
  | TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]
  | UNION [=] (tbl_name[,tbl_name]...)
}

partition_options:
    (see CREATE TABLE options)

ALTER TABLE t1 ENGINE = InnoDB;
9 Thay đổi cấu trúc của bảng. Ví dụ: bạn có thể thêm hoặc xóa các cột, tạo hoặc phá hủy các chỉ mục, thay đổi loại cột hiện có hoặc đổi tên cột hoặc chính bảng. Bạn cũng có thể thay đổi các đặc điểm như công cụ lưu trữ được sử dụng cho bảng hoặc nhận xét bảng.

  • Để sử dụng

    ALTER TABLE t1 ENGINE = InnoDB;
    9, bạn cần
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    1,
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    2 và
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    3 đặc quyền cho bảng. Đổi tên một bảng yêu cầu
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    1 và
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    5 trên bảng cũ,
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    1,
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    2 và
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    3 trên bảng mới.

  • Theo tên bảng, chỉ định các thay đổi sẽ được thực hiện. Nếu không có gì được đưa ra,

    ALTER TABLE t1 ENGINE = InnoDB;
    9 không làm gì cả.

  • Cú pháp cho nhiều thay đổi cho phép tương tự như các mệnh đề của câu lệnh

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    0. Các mệnh đề
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    1 Sử dụng cùng một cú pháp cho
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    2 và
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    3 như đối với
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    4. Để biết thêm thông tin, hãy xem Phần & NBSP; 13.1.20, Tuyên bố Tạo bảng.

  • Từ

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    5 là tùy chọn và có thể được bỏ qua, ngoại trừ
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    6 (để phân biệt hoạt động đổi mới cột với hoạt động đổi mới bảng
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    7).

  • Nhiều mệnh đề

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    2,
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    1,
    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    5 và
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    3 được cho phép trong một câu lệnh
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    2 duy nhất, được phân tách bằng dấu phẩy. Đây là tiện ích mở rộng MySQL cho SQL tiêu chuẩn, chỉ cho phép một trong mỗi mệnh đề mỗi câu lệnh
    ALTER TABLE t1 ENGINE = InnoDB;
    9. Ví dụ: để thả nhiều cột trong một câu nói, hãy làm điều này:

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
  • Nếu một công cụ lưu trữ không hỗ trợ hoạt động

    ALTER TABLE t1 ENGINE = InnoDB;
    9 đã cố gắng, một cảnh báo có thể dẫn đến. Những cảnh báo như vậy có thể được hiển thị với
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    5. Xem Phần & NBSP; 13.7.7.42, Tuyên bố cảnh báo Show Show. Để biết thông tin về khắc phục sự cố
    ALTER TABLE t1 ENGINE = InnoDB;
    9, xem Phần & NBSP; B.3.6.1, Các vấn đề với bảng thay đổi.

  • Để biết thông tin về các cột được tạo, xem Phần & NBSP; 13.1.9.2, Bảng thay đổi và các cột được tạo.

  • Để biết các ví dụ sử dụng, xem Phần & NBSP; 13.1.9.3, ví dụ bảng thay đổi.

  • ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7 trong MySQL 8.0.17 và sau đó hỗ trợ bổ sung các chỉ mục đa giá trị trên các cột JSON bằng đặc tả
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    8 có thể lấy mẫu
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    9 dưới dạng mảng
    ALTER TABLE t1 COMMENT = 'New table comment';
    0). Xem các chỉ mục đa giá trị, để biết thông tin chi tiết về việc tạo và sử dụng chỉ số đa giá trị của, cũng như các hạn chế và hạn chế đối với các chỉ mục đa giá trị.

  • Với chức năng API

    ALTER TABLE t1 COMMENT = 'New table comment';
    1 C, bạn có thể tìm hiểu có bao nhiêu hàng được sao chép bởi
    ALTER TABLE t1 ENGINE = InnoDB;
    9. Xem mysql_info ().

Có một số khía cạnh bổ sung cho câu lệnh

ALTER TABLE t1 COMMENT = 'New table comment';
3, được mô tả theo các chủ đề sau trong phần này:

  • Tùy chọn bảng

  • Yêu cầu về hiệu suất và không gian

  • Đồng thời kiểm soát

  • Thêm và thả cột

  • Đổi tên, định nghĩa lại và sắp xếp lại các cột

  • Các khóa và chỉ mục chính

  • Chìa khóa nước ngoài và các ràng buộc khác

  • Thay đổi bộ ký tự

  • Nhập bảng Innodb

  • Thứ tự hàng cho bảng myisam

  • Tùy chọn phân vùng

Tùy chọn bảng

Yêu cầu về hiệu suất và không gian

Đồng thời kiểm soát

Thêm và thả cột

  • Đổi tên, định nghĩa lại và sắp xếp lại các cột

    ALTER TABLE t1 ENGINE = InnoDB;

    • Các khóa và chỉ mục chính

    • Chìa khóa nước ngoài và các ràng buộc khác

    • Thay đổi bộ ký tựnull

      ALTER TABLE t1 
        CHANGE COLUMN c1 c1 BLOB 
          COMMENT = 'NDB_COLUMN=BLOB_INLINE_SIZE=4096,MAX_BLOB_PART_SIZE';
      6 operation, which can be used to defragment an
      ALTER TABLE t1 CHARACTER SET = utf8mb4;
      7 table, as described in Section 15.11.4, “Defragmenting a Table”. Running
      ALTER TABLE t1 
        CHANGE COLUMN c1 c1 BLOB 
          COMMENT = 'NDB_COLUMN=BLOB_INLINE_SIZE=4096,MAX_BLOB_PART_SIZE';
      8 FORCE on an
      ALTER TABLE t1 CHARACTER SET = utf8mb4;
      7 table performs the same function.

    • Nhập bảng Innodb

    • Thứ tự hàng cho bảng myisam

    • Tùy chọn phân vùng

  • Để thay đổi bảng

    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7 để sử dụng định dạng lưu trữ hàng nén:

    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
  • Điều khoản

    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 cho phép hoặc vô hiệu hóa mã hóa dữ liệu cấp trang cho bảng
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7. Một plugin Keyring phải được cài đặt và cấu hình để cho phép mã hóa.

    Nếu biến

    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    9 được bật, đặc quyền
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    00 được yêu cầu sử dụng mệnh đề
    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 với cài đặt khác với cài đặt mã hóa lược đồ mặc định.

    Trước MySQL 8.0.16, mệnh đề

    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 chỉ được hỗ trợ khi thay đổi các bảng cư trú trong các không gian bảng cho mỗi bảng. Kể từ MySQL 8.0.16, mệnh đề
    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 cũng được hỗ trợ cho các bảng cư trú trong các không gian bảng nói chung.

    Đối với các bảng cư trú trong các không gian bảng chung, mã hóa bảng và không gian bảng phải khớp.

    Thay đổi mã hóa bảng bằng cách di chuyển bảng sang một không gian bảng khác hoặc thay đổi công cụ lưu trữ không được phép mà không chỉ định rõ ràng một mệnh đề

    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7.

    Kể từ MySQL 8.0.16, việc chỉ định mệnh đề

    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 có giá trị khác với
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    06 hoặc
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    07 không được phép nếu bảng sử dụng công cụ lưu trữ không hỗ trợ mã hóa. Trước đây, điều khoản đã được chấp nhận. Cố gắng tạo bảng mà không có mệnh đề
    ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
    7 trong lược đồ hỗ trợ mã hóa bằng công cụ lưu trữ không hỗ trợ mã hóa cũng không được phép.

    Để biết thêm thông tin, hãy xem Phần & NBSP; 15.13, mã hóa dữ liệu tại InnoDB.

  • Để đặt lại giá trị khởi động tự động hiện tại:

    ALTER TABLE t1 AUTO_INCREMENT = 13;

    Bạn không thể đặt lại bộ đếm thành giá trị nhỏ hơn hoặc bằng giá trị hiện đang được sử dụng. Đối với cả

    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7 và
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    10, nếu giá trị nhỏ hơn hoặc bằng giá trị tối đa hiện tại trong cột
    ALTER TABLE t1 COMMENT = 'New table comment';
    7, giá trị được đặt lại về giá trị cột
    ALTER TABLE t1 COMMENT = 'New table comment';
    7 tối đa hiện tại cộng với một.

  • Để thay đổi bộ ký tự bảng mặc định:

    ALTER TABLE t1 CHARACTER SET = utf8mb4;

    Xem thêm thay đổi bộ ký tự.

  • Để thêm (hoặc thay đổi) một bình luận bảng:

    ALTER TABLE t1 COMMENT = 'New table comment';
  • Sử dụng

    ALTER TABLE t1 ENGINE = InnoDB;
    9 với tùy chọn
    ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";
    1 để di chuyển các bảng
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7 giữa các không gian bảng chung hiện có, không gian bảng tệp mỗi bảng và không gian bảng hệ thống. Xem bảng di chuyển giữa các không gian bảng bằng bảng thay đổi.

    • Các hoạt động

      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      16 luôn gây ra việc xây dựng lại bảng đầy đủ, ngay cả khi thuộc tính
      ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";
      1 không thay đổi so với giá trị trước đó.

    • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      16 Cú pháp không hỗ trợ di chuyển một bảng từ một không gian bảng tạm thời sang một không gian bảng liên tục.

    • Điều khoản

      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      19, được hỗ trợ với
      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      20, không được hỗ trợ với
      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      16 và bị bỏ qua nếu được chỉ định.

    • Để biết thêm thông tin về các khả năng và hạn chế của tùy chọn

      ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";
      1, xem
      ALTER TABLE t1 AUTO_INCREMENT = 13;
      0.

  • MySQL NDB Cluster 8.0 hỗ trợ cài đặt

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    24 Tùy chọn để kiểm soát cân bằng phân vùng của bảng (loại đếm đoạn), khả năng đọc từ bất kỳ replica, sao chép đầy đủ hoặc bất kỳ kết hợp nào của các vấn đề này, như một phần của nhận xét bảng cho câu lệnh
    ALTER TABLE t1 ENGINE = InnoDB;
    9 trong Tương tự như đối với
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    0, như được hiển thị trong ví dụ này:

    ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";

    Cũng có thể đặt các tùy chọn

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    27 cho các cột của bảng
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28 như là một phần của câu lệnh
    ALTER TABLE t1 ENGINE = InnoDB;
    9, như cái này:

    ALTER TABLE t1 
      CHANGE COLUMN c1 c1 BLOB 
        COMMENT = 'NDB_COLUMN=BLOB_INLINE_SIZE=4096,MAX_BLOB_PART_SIZE';

    Đặt kích thước nội tuyến blob theo cách này được hỗ trợ bởi NDB 8.0.30 trở lên. Hãy nhớ rằng

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    30 loại bỏ mọi nhận xét hiện có cho bảng. Xem Cài đặt các tùy chọn NDB_TABLE, để biết thêm thông tin và ví dụ.

  • Các tùy chọn

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    31 và
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    32 (có sẵn kể từ MySQL 8.0.21) được sử dụng để chỉ định các thuộc tính bảng, cột và chỉ mục cho các công cụ lưu trữ chính và phụ. Các tùy chọn được dành riêng để sử dụng trong tương lai. Các thuộc tính chỉ mục không thể được thay đổi. Một chỉ mục phải được bỏ và thêm lại với sự thay đổi mong muốn, có thể được thực hiện trong một câu lệnh
    ALTER TABLE t1 ENGINE = InnoDB;
    9.

Để xác minh rằng các tùy chọn bảng đã được thay đổi như dự định, sử dụng

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
34 hoặc truy vấn bảng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
35.

Yêu cầu về hiệu suất và không gian

Các hoạt động

ALTER TABLE t1 ENGINE = InnoDB;
9 được xử lý bằng một trong các thuật toán sau:

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    37: Các hoạt động được thực hiện trên một bản sao của bảng gốc và dữ liệu bảng được sao chép từ bảng gốc sang hàng bảng mới theo từng hàng. DML đồng thời không được phép.

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    38: Các hoạt động Tránh sao chép dữ liệu bảng nhưng có thể xây dựng lại bảng tại chỗ. Một khóa siêu dữ liệu độc quyền trên bàn có thể được thực hiện ngắn gọn trong các giai đoạn chuẩn bị và thực hiện hoạt động. Thông thường, DML đồng thời được hỗ trợ.

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    39: Hoạt động chỉ sửa đổi siêu dữ liệu trong từ điển dữ liệu. Một khóa siêu dữ liệu độc quyền trên bàn có thể được thực hiện ngắn gọn trong giai đoạn thực hiện của hoạt động. Dữ liệu bảng không bị ảnh hưởng, làm cho các hoạt động tức thời. DML đồng thời được cho phép. (Được giới thiệu trong MySQL 8.0.12)

Đối với các bảng sử dụng công cụ lưu trữ

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
28, các thuật toán này hoạt động như sau:

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    37:
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28 tạo ra một bản sao của bảng và thay đổi nó; Trình xử lý cụm NDB sau đó sao chép dữ liệu giữa các phiên bản cũ và mới của bảng. Sau đó,
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28 xóa bảng cũ và đổi tên chiếc mới.

    Điều này đôi khi cũng được gọi là một bản sao chép của người Viking hoặc ngoại tuyến trực tuyến ____.copying or offline

    ALTER TABLE t1 ENGINE = InnoDB;
    9.

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    38: Các nút dữ liệu thực hiện các thay đổi cần thiết; Trình xử lý cụm NDB không sao chép dữ liệu hoặc tham gia một phần.

    Điều này đôi khi cũng được gọi là một người không phải là một người không phải là người khác hoặc trực tuyến trực tuyến ____.non-copying or online

    ALTER TABLE t1 ENGINE = InnoDB;
    9.

  • ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    39: Không được hỗ trợ bởi
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28.

Xem Phần & NBSP; 23.6.11, Hoạt động trực tuyến với bảng thay đổi trong cụm NDB, để biết thêm thông tin.

Điều khoản

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49 là tùy chọn. Nếu mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49 bị bỏ qua, MySQL sử dụng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
51 cho các công cụ lưu trữ và các điều khoản
ALTER TABLE t1 ENGINE = InnoDB;
9 hỗ trợ nó. Nếu không,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
53 được sử dụng. Nếu
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
53 không được hỗ trợ,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
55 được sử dụng.

Chỉ định một mệnh đề

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49 yêu cầu thao tác sử dụng thuật toán được chỉ định cho các mệnh đề và công cụ lưu trữ hỗ trợ nó hoặc không bị lỗi. Chỉ định
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
57 giống như bỏ qua mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49.

ALTER TABLE t1 ENGINE = InnoDB;
9 Các hoạt động sử dụng thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
37 Đợi các hoạt động khác đang sửa đổi bảng để hoàn thành. Sau khi các thay đổi được áp dụng cho bản sao bảng, dữ liệu được sao chép, bảng gốc sẽ bị xóa và bản sao bảng được đổi tên thành tên của bảng gốc. Mặc dù hoạt động
ALTER TABLE t1 ENGINE = InnoDB;
9 thực thi, bảng gốc có thể đọc được bởi các phiên khác (với ngoại lệ được ghi nhận trong thời gian ngắn). Các bản cập nhật và ghi vào bảng bắt đầu sau khi hoạt động
ALTER TABLE t1 COMMENT = 'New table comment';
3 bắt đầu bị đình trệ cho đến khi bảng mới sẵn sàng, sau đó được tự động chuyển hướng đến bảng mới. Bản sao tạm thời của bảng được tạo trong thư mục cơ sở dữ liệu của bảng gốc trừ khi đó là hoạt động
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
63 chuyển bảng sang cơ sở dữ liệu nằm trong một thư mục khác.

Ngoại lệ được đề cập trước đó là

ALTER TABLE t1 ENGINE = InnoDB;
9 khối đọc (không chỉ ghi) tại điểm mà nó sẵn sàng xóa các cấu trúc bảng lỗi thời khỏi bộ đệm định nghĩa bảng và bảng. Tại thời điểm này, nó phải có được một khóa độc quyền. Để làm như vậy, nó chờ đợi những người đọc hiện tại kết thúc, và chặn các lần đọc và viết mới.

Một hoạt động

ALTER TABLE t1 ENGINE = InnoDB;
9 sử dụng thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
37 ngăn chặn các hoạt động DML đồng thời. Các truy vấn đồng thời vẫn được phép. Đó là, một hoạt động sao chép bảng luôn bao gồm ít nhất là các hạn chế đồng thời của
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
67 (cho phép các truy vấn nhưng không phải DML). Bạn có thể hạn chế hơn nữa sự đồng thời cho các hoạt động hỗ trợ mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
68 bằng cách chỉ định
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
69, ngăn chặn DML và truy vấn. Để biết thêm thông tin, xem kiểm soát đồng thời.

Để buộc sử dụng thuật toán

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
37 cho hoạt động
ALTER TABLE t1 ENGINE = InnoDB;
9 không sử dụng nó, chỉ định
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
55 hoặc kích hoạt biến hệ thống
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
73. Nếu có xung đột giữa cài đặt
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
73 và mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49 với giá trị khác với
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
76, mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
49 được ưu tiên.

Đối với các bảng

ALTER TABLE t1 CHARACTER SET = utf8mb4;
7, hoạt động
ALTER TABLE t1 ENGINE = InnoDB;
9 sử dụng thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
37 trên bảng nằm trong một không gian bảng chung có thể tăng lượng không gian được sử dụng bởi không gian bảng. Các hoạt động như vậy đòi hỏi nhiều không gian bổ sung như dữ liệu trong bảng cộng với các chỉ mục. Đối với một bảng nằm trong một không gian bảng chung, không gian bổ sung được sử dụng trong quá trình hoạt động không được phát hành trở lại hệ điều hành vì nó dành cho một bảng nằm trong một không gian bảng cho mỗi bảng.

Để biết thông tin về các yêu cầu không gian cho các hoạt động DDL trực tuyến, xem Phần & NBSP; 15.12.3, Yêu cầu không gian DDL trực tuyến trực tuyến.

ALTER TABLE t1 ENGINE = InnoDB;
9 Các hoạt động hỗ trợ thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
38 bao gồm:

  • Các hoạt động

    ALTER TABLE t1 ENGINE = InnoDB;
    9 được hỗ trợ bởi tính năng DDL trực tuyến
    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7. Xem Phần & NBSP; 15.12.1, Hoạt động DDL trực tuyến trực tuyến.

  • Đổi tên một bàn. MySQL đổi tên các tệp tương ứng với Bảng

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    85 mà không tạo một bản sao. . Họ phải được thay đổi thủ công.

  • Các hoạt động chỉ sửa đổi siêu dữ liệu bảng. Các hoạt động này là ngay lập tức vì máy chủ không chạm vào nội dung bảng. Các hoạt động chỉ có siêu dữ liệu bao gồm:

    • Đổi tên một cột. Trong cụm NDB 8.0,18 trở lên, hoạt động này cũng có thể được thực hiện trực tuyến.

    • Thay đổi giá trị mặc định của một cột (ngoại trừ bảng

      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      28).

    • Việc sửa đổi định nghĩa của cột

      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      88 hoặc
      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      89 bằng cách thêm bảng liệt kê mới hoặc đặt các thành viên vào cuối danh sách các giá trị thành viên hợp lệ, miễn là kích thước lưu trữ của kiểu dữ liệu không thay đổi. Ví dụ: thêm một thành viên vào cột
      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      89 có 8 thành viên thay đổi lưu trữ theo yêu cầu cho mỗi giá trị từ 1 byte thành 2 byte; Điều này đòi hỏi một bản sao bảng. Thêm thành viên ở giữa danh sách gây ra đánh số lại các thành viên hiện tại, đòi hỏi một bản sao bảng.end of the list of valid member values, as long as the storage size of the data type does not change. For example, adding a member to a
      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      89 column that has 8 members changes the required storage per value from 1 byte to 2 bytes; this requires a table copy. Adding members in the middle of the list causes renumbering of existing members, which requires a table copy.

    • Thay đổi định nghĩa của một cột không gian để loại bỏ thuộc tính

      ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
      91. .

    • Kể từ MySQL 8.0.14, thay đổi bộ ký tự cột, khi các điều kiện này áp dụng:

      • Kiểu dữ liệu cột là

        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        94,
        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        95, loại
        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        96 hoặc
        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        88.

      • Thay đổi bộ ký tự là từ

        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        98 đến
        ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
        99 hoặc bất kỳ ký tự nào được đặt thành
        ALTER TABLE t1 ENGINE = InnoDB;
        00.

      • Không có chỉ mục trên cột.

    • Kể từ MySQL 8.0.14, thay đổi cột được tạo, khi các điều kiện này áp dụng:

      • Đối với các bảng

        ALTER TABLE t1 CHARACTER SET = utf8mb4;
        7, các câu lệnh sửa đổi các cột được lưu trữ được tạo nhưng không thay đổi loại, biểu thức hoặc khả năng vô hiệu của chúng.

      • Đối với các bảng không phải là không, các câu lệnh sửa đổi các cột được lưu trữ hoặc ảo được tạo nhưng không thay đổi loại, biểu thức hoặc khả năng vô hiệu của chúng.

      Một ví dụ về sự thay đổi như vậy là một sự thay đổi đối với nhận xét cột.

  • Đổi tên một chỉ số.

  • Thêm hoặc thả một chỉ số thứ cấp, cho các bảng

    ALTER TABLE t1 CHARACTER SET = utf8mb4;
    7 và
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28. Xem Phần & NBSP; 15.12.1, Hoạt động DDL trực tuyến trực tuyến.

  • Đối với các bảng

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    28, các hoạt động thêm và thả chỉ mục trên các cột có chiều rộng thay đổi. Các hoạt động này xảy ra trực tuyến, không sao chép bảng và không chặn các hành động DML đồng thời trong hầu hết thời gian của chúng. Xem Phần & NBSP; 23.6.11, Hoạt động trực tuyến với bảng thay đổi trong cụm NDB.

  • Sửa đổi khả năng hiển thị chỉ mục với hoạt động

    ALTER TABLE t1 ENGINE = InnoDB;
    06.

  • Sửa đổi cột của các bảng chứa các cột được tạo phụ thuộc vào các cột có giá trị

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    76 nếu các cột được sửa đổi không liên quan đến các biểu thức cột được tạo. Ví dụ, thay đổi thuộc tính
    ALTER TABLE t1 ENGINE = InnoDB;
    08 của một cột riêng biệt có thể được thực hiện tại chỗ mà không cần xây dựng lại bảng.

ALTER TABLE t1 ENGINE = InnoDB;
9 Các hoạt động hỗ trợ thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
39 bao gồm:

  • Thêm một cột. Tính năng này được gọi là ngay lập tức

    ALTER TABLE t1 ENGINE = InnoDB;
    11. Hạn chế áp dụng. Xem Phần & NBSP; 15.12.1, Hoạt động DDL trực tuyến trực tuyến.Instant
    ALTER TABLE t1 ENGINE = InnoDB;
    11
    . Limitations apply. See Section 15.12.1, “Online DDL Operations”.

  • Thả một cột. Tính năng này được gọi là ngay lập tức

    ALTER TABLE t1 ENGINE = InnoDB;
    12. Hạn chế áp dụng. Xem Phần & NBSP; 15.12.1, Hoạt động DDL trực tuyến trực tuyến.Instant
    ALTER TABLE t1 ENGINE = InnoDB;
    12
    . Limitations apply. See Section 15.12.1, “Online DDL Operations”.

  • Thêm hoặc thả một cột ảo.

  • Thêm hoặc thả một giá trị mặc định cột.

  • Sửa đổi định nghĩa của cột

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    88 hoặc
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    89. Các hạn chế tương tự được áp dụng như mô tả ở trên cho
    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    51.

  • Thay đổi loại chỉ mục.

  • Đổi tên một bàn. Các hạn chế tương tự được áp dụng như mô tả ở trên cho

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    51.

Để biết thêm thông tin về các hoạt động hỗ trợ

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
51, xem Phần & NBSP; 15.12.1, hoạt động DDL trực tuyến trực tuyến.

ALTER TABLE t1 ENGINE = InnoDB;
9 Nâng cấp các cột thời gian MySQL 5.5 lên định dạng 5.6 cho
ALTER TABLE t1 ENGINE = InnoDB;
11,
ALTER TABLE t1 ENGINE = InnoDB;
20,
ALTER TABLE t1 ENGINE = InnoDB;
21,
ALTER TABLE t1 ENGINE = InnoDB;
22 và
ALTER TABLE t1 ENGINE = InnoDB;
23 hoạt động. Chuyển đổi này không thể được thực hiện bằng thuật toán
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
38 vì bảng phải được xây dựng lại, do đó chỉ định
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
53 trong những trường hợp này dẫn đến lỗi. Chỉ định
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
55 nếu cần thiết.

Nếu hoạt động

ALTER TABLE t1 ENGINE = InnoDB;
9 trên chỉ số nhiều trường hợp được sử dụng để phân vùng bảng bằng
ALTER TABLE t1 ENGINE = InnoDB;
28 thay đổi thứ tự của các cột, nó chỉ có thể được thực hiện bằng cách sử dụng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
55.

Các mệnh đề

ALTER TABLE t1 ENGINE = InnoDB;
30 và
ALTER TABLE t1 ENGINE = InnoDB;
31 ảnh hưởng đến việc
ALTER TABLE t1 ENGINE = InnoDB;
9 có thực hiện hoạt động tại chỗ để sửa đổi cột được tạo ảo hay không. Xem Phần & NBSP; 13.1.9.2, Bảng thay đổi và các cột được tạo.

NDB Cluster 8.0 hỗ trợ các hoạt động trực tuyến sử dụng cú pháp

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
53 được sử dụng với máy chủ MySQL tiêu chuẩn.
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
28 không hỗ trợ thay đổi không gian bảng trực tuyến; Bắt đầu với NDB 8.0,21, nó không được phép. Xem Phần & NBSP; 23.6.11, Hoạt động trực tuyến với bảng thay đổi trong cụm NDB, để biết thêm thông tin.

NDB 8.0,27 và sau đó, khi thực hiện sao chép

ALTER TABLE t1 COMMENT = 'New table comment';
3, kiểm tra để đảm bảo rằng không có văn bản đồng thời nào được thực hiện vào bảng bị ảnh hưởng. Nếu nó thấy rằng bất kỳ đã được thực hiện,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
28 sẽ bác bỏ tuyên bố
ALTER TABLE t1 COMMENT = 'New table comment';
3 và tăng
ALTER TABLE t1 ENGINE = InnoDB;
38.

ALTER TABLE t1 ENGINE = InnoDB;
9 với
ALTER TABLE t1 ENGINE = InnoDB;
40 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
41 không tạo ra bất kỳ bảng tạm thời hoặc tệp phân vùng tạm thời nào.

ALTER TABLE t1 ENGINE = InnoDB;
9 với
ALTER TABLE t1 ENGINE = InnoDB;
43,
ALTER TABLE t1 ENGINE = InnoDB;
44,
ALTER TABLE t1 ENGINE = InnoDB;
45,
ALTER TABLE t1 ENGINE = InnoDB;
46 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
47 không tạo các bảng tạm thời (trừ khi được sử dụng với bảng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
28); Tuy nhiên, các hoạt động này có thể và tạo ra các tệp phân vùng tạm thời.

Các hoạt động

ALTER TABLE t1 AUTO_INCREMENT = 13;
2 hoặc
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
5 cho các phân vùng
ALTER TABLE t1 ENGINE = InnoDB;
51 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
52 là các hoạt động ngay lập tức hoặc gần như vậy. Các hoạt động
ALTER TABLE t1 AUTO_INCREMENT = 13;
2 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
54 cho các phân vùng
ALTER TABLE t1 ENGINE = InnoDB;
55 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
28 Sao chép dữ liệu giữa tất cả các phân vùng, trừ khi
ALTER TABLE t1 ENGINE = InnoDB;
57 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
58 được sử dụng; Điều này có hiệu quả giống như tạo một bảng mới, mặc dù hoạt động
ALTER TABLE t1 AUTO_INCREMENT = 13;
2 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
54 được thực hiện phân vùng theo phân vùng.
ALTER TABLE t1 ENGINE = InnoDB;
61 Bản sao hoạt động chỉ thay đổi các phân vùng và không chạm vào các phân vùng không thay đổi.

Đối với các bảng

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
10, bạn có thể tăng tốc độ tái tạo chỉ số (phần chậm nhất của quá trình thay đổi) bằng cách đặt biến hệ thống
ALTER TABLE t1 ENGINE = InnoDB;
63 thành giá trị cao.

Đồng thời kiểm soát

Đối với các hoạt động

ALTER TABLE t1 ENGINE = InnoDB;
9 hỗ trợ nó, bạn có thể sử dụng mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
68 để kiểm soát mức độ đọc đồng thời và ghi trên bảng trong khi nó đang bị thay đổi. Chỉ định giá trị không mặc định cho điều khoản này cho phép bạn yêu cầu một lượng truy cập đồng thời hoặc độc quyền nhất định trong quá trình hoạt động thay đổi và tạm dừng hoạt động nếu mức độ khóa được yêu cầu không có sẵn.

Chỉ

ALTER TABLE t1 ENGINE = InnoDB;
66 được phép cho các hoạt động sử dụng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
51. Các tham số mệnh đề
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
68 khác không được áp dụng.

Các tham số cho mệnh đề

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
68 là:

  • ALTER TABLE t1 ENGINE = InnoDB;
    66

    Mức độ đồng thời tối đa cho mệnh đề

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    49 đã cho (nếu có) và hoạt động
    ALTER TABLE t1 ENGINE = InnoDB;
    9: giấy phép đọc và ghi đồng thời nếu được hỗ trợ. Nếu không, giấy phép đọc đồng thời nếu được hỗ trợ. Nếu không, thực thi quyền truy cập độc quyền.

  • ALTER TABLE t1 ENGINE = InnoDB;
    73

    Nếu được hỗ trợ, giấy phép đọc và viết đồng thời. Nếu không, một lỗi xảy ra.

  • ALTER TABLE t1 ENGINE = InnoDB;
    74

    Nếu được hỗ trợ, giấy phép đọc đồng thời nhưng khối viết. Các văn bản bị chặn ngay cả khi ghi đồng thời được hỗ trợ bởi công cụ lưu trữ cho điều khoản

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    49 đã cho (nếu có) và hoạt động
    ALTER TABLE t1 ENGINE = InnoDB;
    9. Nếu các lần đọc đồng thời không được hỗ trợ, xảy ra lỗi.

  • ALTER TABLE t1 ENGINE = InnoDB;
    77

    Thực thi quyền truy cập độc quyền. Điều này được thực hiện ngay cả khi các lần đọc/ghi đồng thời được hỗ trợ bởi công cụ lưu trữ cho Điều khoản

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    49 đã cho (nếu có) và hoạt động
    ALTER TABLE t1 ENGINE = InnoDB;
    9.

Thêm và thả cột

Sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
2 để thêm các cột mới vào bảng và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
5 để xóa các cột hiện có.
ALTER TABLE t1 ENGINE = InnoDB;
82 là tiện ích mở rộng MySQL cho SQL tiêu chuẩn.

Để thêm một cột tại một vị trí cụ thể trong một hàng bảng, hãy sử dụng

ALTER TABLE t1 ENGINE = InnoDB;
83 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
84. Mặc định là thêm cột cuối cùng.

Nếu một bảng chỉ chứa một cột, cột không thể được thả. Nếu những gì bạn dự định là xóa bảng, hãy sử dụng câu lệnh

ALTER TABLE t1 ENGINE = InnoDB;
85 thay thế.

Nếu các cột bị rơi từ một bảng, các cột cũng bị xóa khỏi bất kỳ chỉ mục nào chúng là một phần. Nếu tất cả các cột tạo nên một chỉ mục bị loại bỏ, chỉ số cũng bị loại bỏ. Nếu bạn sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87 để rút ngắn một cột có chỉ mục tồn tại trên cột và độ dài cột kết quả nhỏ hơn độ dài chỉ mục, MySQL tự động rút ngắn chỉ số.

Đối với

ALTER TABLE t1 ENGINE = InnoDB;
88, nếu cột có giá trị mặc định biểu thức sử dụng hàm không xác định, câu lệnh có thể tạo ra cảnh báo hoặc lỗi. Để biết thêm thông tin, xem Phần & NBSP; 11.6, Kiểu dữ liệu Giá trị mặc định, và Phần & NBSP; 17.1.3.7, Hạn chế về sao chép với GTIDS.

Đổi tên, định nghĩa lại và sắp xếp lại các cột

Các mệnh đề

ALTER TABLE t1 AUTO_INCREMENT = 13;
3,
ALTER TABLE t1 ENGINE = InnoDB;
87,
ALTER TABLE t1 AUTO_INCREMENT = 13;
6 và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
1 cho phép các tên và định nghĩa của các cột hiện có được thay đổi. Họ có những đặc điểm so sánh này:

  • ALTER TABLE t1 AUTO_INCREMENT = 13;
    3:

    • Có thể đổi tên một cột và thay đổi định nghĩa của nó, hoặc cả hai.

    • Có nhiều khả năng hơn

      ALTER TABLE t1 ENGINE = InnoDB;
      87 hoặc
      ALTER TABLE t1 AUTO_INCREMENT = 13;
      6, nhưng với chi phí thuận tiện cho một số hoạt động.
      ALTER TABLE t1 AUTO_INCREMENT = 13;
      3 yêu cầu đặt tên cột hai lần nếu không đổi tên nó và yêu cầu xác định định nghĩa cột nếu chỉ đổi tên nó.

    • Với

      ALTER TABLE t1 ENGINE = InnoDB;
      83 hoặc
      ALTER TABLE t1 ENGINE = InnoDB;
      98, có thể sắp xếp lại các cột.

  • ALTER TABLE t1 ENGINE = InnoDB;
    87:

    • Có thể thay đổi một định nghĩa cột nhưng không phải tên của nó.

    • Thuận tiện hơn

      ALTER TABLE t1 AUTO_INCREMENT = 13;
      3 để thay đổi định nghĩa cột mà không đổi tên nó.

    • Với

      ALTER TABLE t1 ENGINE = InnoDB;
      83 hoặc
      ALTER TABLE t1 ENGINE = InnoDB;
      98, có thể sắp xếp lại các cột.

  • ALTER TABLE t1 ENGINE = InnoDB;
    87:

    • Có thể thay đổi một định nghĩa cột nhưng không phải tên của nó.

    • Thuận tiện hơn

      ALTER TABLE t1 AUTO_INCREMENT = 13;
      3 để thay đổi định nghĩa cột mà không đổi tên nó.

  • ALTER TABLE t1 AUTO_INCREMENT = 13;
    6:

Có thể thay đổi một tên cột nhưng không phải là định nghĩa của nó.

Để thay đổi một cột để thay đổi cả tên và định nghĩa của nó, hãy sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3, chỉ định tên cũ và mới và định nghĩa mới. Ví dụ: để đổi tên cột
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
10 từ
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
11 thành
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
12 và thay đổi định nghĩa của nó để sử dụng kiểu dữ liệu
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
13 trong khi vẫn giữ được thuộc tính
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
14, hãy làm điều này:

ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;

Để thay đổi định nghĩa cột nhưng không phải tên của nó, hãy sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87. Với
ALTER TABLE t1 AUTO_INCREMENT = 13;
3, cú pháp yêu cầu hai tên cột, vì vậy bạn phải chỉ định cùng tên hai lần để để lại tên không thay đổi. Ví dụ: để thay đổi định nghĩa của cột
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
12, hãy làm điều này:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
0

ALTER TABLE t1 ENGINE = InnoDB;
87 thuận tiện hơn để thay đổi định nghĩa mà không thay đổi tên vì nó chỉ yêu cầu tên cột một lần:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
1

Để thay đổi tên cột nhưng không phải định nghĩa của nó, hãy sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 AUTO_INCREMENT = 13;
6. Với
ALTER TABLE t1 AUTO_INCREMENT = 13;
3, cú pháp yêu cầu định nghĩa cột, vì vậy để không thay đổi định nghĩa, bạn phải tôn trọng định nghĩa mà cột hiện có. Ví dụ: để đổi tên cột
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
23 từ
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
12 thành
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
11, hãy làm điều này:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
2

ALTER TABLE t1 AUTO_INCREMENT = 13;
6 thuận tiện hơn để thay đổi tên mà không thay đổi định nghĩa vì nó chỉ yêu cầu tên cũ và mới:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
3

Nói chung, bạn không thể đổi tên một cột thành một tên đã tồn tại trong bảng. Tuy nhiên, điều này đôi khi không phải là trường hợp, chẳng hạn như khi bạn trao đổi tên hoặc di chuyển chúng qua một chu kỳ. Nếu một bảng có các cột có tên

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
11,
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
12 và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
29, đây là các hoạt động hợp lệ:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
4

Đối với các thay đổi định nghĩa cột bằng cách sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87, định nghĩa phải bao gồm kiểu dữ liệu và tất cả các thuộc tính sẽ áp dụng cho cột mới, ngoài các thuộc tính chỉ mục như
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
32 hoặc
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
33. Các thuộc tính có trong định nghĩa ban đầu nhưng không được chỉ định cho định nghĩa mới không được chuyển tiếp. Giả sử rằng một cột
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
34 được xác định là
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
35 và bạn sửa đổi cột như sau, có ý định chỉ thay đổi
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
36 thành
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
13:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
5

Tuyên bố đó thay đổi kiểu dữ liệu từ

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
36 thành
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
13, nhưng nó cũng giảm các thuộc tính
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
40,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
76 và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
42. Để giữ lại chúng, tuyên bố phải bao gồm chúng một cách rõ ràng:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
6

Đối với các thay đổi kiểu dữ liệu bằng cách sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87, MySQL cố gắng chuyển đổi các giá trị cột hiện có thành loại mới tốt nhất có thể.

Cảnh báo

Chuyển đổi này có thể dẫn đến thay đổi dữ liệu. Ví dụ: nếu bạn rút ngắn một cột chuỗi, các giá trị có thể bị cắt. Để ngăn chặn hoạt động thành công nếu chuyển đổi sang kiểu dữ liệu mới sẽ dẫn đến việc mất dữ liệu, hãy bật chế độ SQL nghiêm ngặt trước khi sử dụng

ALTER TABLE t1 ENGINE = InnoDB;
9 (xem Phần & NBSP; 5.1.11, chế độ SQL Server SQL).

Nếu bạn sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87 để rút ngắn một cột có chỉ mục tồn tại trên cột và độ dài cột kết quả nhỏ hơn độ dài chỉ mục, MySQL tự động rút ngắn chỉ số.

Đối với các cột được đổi tên bởi

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 AUTO_INCREMENT = 13;
6, MySQL tự động đổi tên các tham chiếu này thành cột được đổi tên:

  • Các chỉ mục đề cập đến cột cũ, bao gồm các chỉ mục vô hình và các chỉ mục

    ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
    10 bị vô hiệu hóa.

  • Các khóa nước ngoài đề cập đến cột cũ.

Đối với các cột được đổi tên bởi

ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 AUTO_INCREMENT = 13;
6, MySQL không tự động đổi tên các tham chiếu này thành cột được đổi tên:

  • Cột được tạo và các biểu thức phân vùng đề cập đến cột được đổi tên. Bạn phải sử dụng

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    3 để xác định lại các biểu thức như vậy trong cùng một câu lệnh
    ALTER TABLE t1 ENGINE = InnoDB;
    9 như câu trả lời đổi tên cột.

  • Quan điểm và các chương trình được lưu trữ đề cập đến cột đổi tên. Bạn phải thay đổi thủ công định nghĩa của các đối tượng này để chỉ tên cột mới.

Để sắp xếp lại các cột trong bảng, hãy sử dụng

ALTER TABLE t1 ENGINE = InnoDB;
83 và
ALTER TABLE t1 ENGINE = InnoDB;
98 trong các hoạt động
ALTER TABLE t1 AUTO_INCREMENT = 13;
3 hoặc
ALTER TABLE t1 ENGINE = InnoDB;
87.

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
59 hoặc
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
60 Chỉ định giá trị mặc định mới cho một cột hoặc loại bỏ giá trị mặc định cũ, tương ứng. Nếu mặc định cũ bị xóa và cột có thể là
ALTER TABLE t1 ENGINE = InnoDB;
08, mặc định mới là
ALTER TABLE t1 ENGINE = InnoDB;
08. Nếu cột không thể là
ALTER TABLE t1 ENGINE = InnoDB;
08, MySQL sẽ gán một giá trị mặc định như được mô tả trong Phần & NBSP; 11.6, kiểu dữ liệu có giá trị mặc định.

Kể từ MySQL 8.0.23,

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
64 và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
65 cho phép thay đổi khả năng hiển thị cột. Xem Phần & NBSP; 13.1.20.10, Cột vô hình.

Các khóa và chỉ mục chính

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
66 thả khóa chính. Nếu không có khóa chính, xảy ra lỗi. Để biết thông tin về các đặc điểm hiệu suất của các khóa chính, đặc biệt là đối với các bảng
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7, xem Phần & NBSP; 8.3.2, Tối ưu hóa khóa chính.

Nếu biến hệ thống

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
68 được bật, cố gắng bỏ khóa chính sẽ tạo ra lỗi.

Nếu bạn thêm

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
69 hoặc
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
70 vào bảng, MySQL sẽ lưu trữ nó trước bất kỳ chỉ số không liên quan nào để cho phép phát hiện các khóa trùng lặp càng sớm càng tốt.

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
71 loại bỏ một chỉ mục. Đây là phần mở rộng MySQL cho SQL tiêu chuẩn. Xem Phần & NBSP; 13.1.27, Câu lệnh Drop Drop Index. Để xác định tên chỉ mục, sử dụng chỉ mục hiển thị từ
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85.SHOW INDEX FROM
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85
.

Một số công cụ lưu trữ cho phép bạn chỉ định loại chỉ mục khi tạo một chỉ mục. Cú pháp cho bộ xác định

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
73 là
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
74. Để biết chi tiết về
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
75, xem Phần & NBSP; 13.1.15, Tuyên bố Tạo Chỉ số. Vị trí ưa thích là sau danh sách cột. Mong đợi hỗ trợ sử dụng tùy chọn trước khi danh sách cột sẽ bị xóa trong bản phát hành MySQL trong tương lai.

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
76 Giá trị Chỉ định các tùy chọn bổ sung cho một chỉ mục.
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
75 là một trong những tùy chọn như vậy. Để biết chi tiết về các giá trị
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
76 cho phép, xem Phần & NBSP; 13.1.15, Tuyên bố Tạo Chỉ số.

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
79 đến
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
80 đổi tên một chỉ mục. Đây là phần mở rộng MySQL cho SQL tiêu chuẩn. Nội dung của bảng vẫn không thay đổi.
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
81 phải là tên của một chỉ mục hiện có trong bảng không bị hủy bởi cùng một câu lệnh
ALTER TABLE t1 ENGINE = InnoDB;
9.
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
80 là tên chỉ mục mới, không thể sao chép tên của một chỉ mục trong bảng kết quả sau khi các thay đổi đã được áp dụng. Không tên chỉ mục có thể là
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
84.

Nếu bạn sử dụng

ALTER TABLE t1 ENGINE = InnoDB;
9 trên bảng
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
10, tất cả các chỉ mục không liên quan được tạo trong một lô riêng biệt (như đối với
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
87). Điều này sẽ làm cho
ALTER TABLE t1 COMMENT = 'New table comment';
3 nhanh hơn nhiều khi bạn có nhiều chỉ mục.

Đối với các bảng

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
10, cập nhật chính có thể được kiểm soát rõ ràng. Sử dụng
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
90 để bảo MySQL ngừng cập nhật các chỉ mục không liên quan. Sau đó sử dụng
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
91 để tạo lại các chỉ mục bị thiếu.
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
10 Thực hiện điều này với một thuật toán đặc biệt nhanh hơn nhiều so với việc chèn từng khóa một, vì vậy việc vô hiệu hóa các khóa trước khi thực hiện các hoạt động chèn số lượng lớn sẽ đưa ra tốc độ tăng tốc đáng kể. Sử dụng
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
93 yêu cầu đặc quyền
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
94 ngoài các đặc quyền được đề cập trước đó.

Mặc dù các chỉ mục không liên quan đến bị vô hiệu hóa, nhưng chúng bị bỏ qua cho các câu lệnh như

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
95 và
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
96 mà nếu không sẽ sử dụng chúng.

Sau một câu lệnh

ALTER TABLE t1 ENGINE = InnoDB;
9, có thể cần phải chạy
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
98 để cập nhật thông tin về Cardinality Index. Xem Phần & NBSP; 13.7.7.22, Báo cáo chỉ số hiển thị.

Hoạt động

ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
99 cho phép một chỉ mục được hiển thị hoặc vô hình. Một chỉ số vô hình không được sử dụng bởi trình tối ưu hóa. Sửa đổi khả năng hiển thị chỉ mục áp dụng cho các chỉ mục khác với các khóa chính (rõ ràng hoặc ẩn). Tính năng này là động cơ lưu trữ trung tính (được hỗ trợ cho bất kỳ động cơ). Để biết thêm thông tin, xem Phần & NBSP; 8.3.12, Chỉ số vô hình của Hồi giáo.

Chìa khóa nước ngoài và các ràng buộc khác

Các điều khoản

ALTER TABLE t1 AUTO_INCREMENT = 13;
00 và
ALTER TABLE t1 AUTO_INCREMENT = 13;
01 được hỗ trợ bởi các công cụ lưu trữ
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 và
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
28, thực hiện
ALTER TABLE t1 AUTO_INCREMENT = 13;
04]] khóa nước ngoài [
ALTER TABLE t1 AUTO_INCREMENT = 13;
05] (...) Tài liệu tham khảo ... (...). Xem Phần & NBSP; 13.1.20.5, các ràng buộc khóa nước ngoài. Đối với các công cụ lưu trữ khác, các mệnh đề được phân tích cú pháp nhưng bị bỏ qua.

Đối với

ALTER TABLE t1 ENGINE = InnoDB;
9, không giống như
ALTER TABLE t1 AUTO_INCREMENT = 13;
0,
ALTER TABLE t1 AUTO_INCREMENT = 13;
08 bỏ qua
ALTER TABLE t1 AUTO_INCREMENT = 13;
05 nếu được cung cấp và sử dụng tên khóa lạ được tạo tự động. Là một cách giải quyết, bao gồm mệnh đề
ALTER TABLE t1 AUTO_INCREMENT = 13;
10 để chỉ định tên khóa nước ngoài:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
7

Quan trọng

MySQL âm thầm bỏ qua các thông số kỹ thuật nội tuyến

ALTER TABLE t1 AUTO_INCREMENT = 13;
01, trong đó các tham chiếu được định nghĩa là một phần của đặc tả cột. MySQL chỉ chấp nhận các điều khoản
ALTER TABLE t1 AUTO_INCREMENT = 13;
01 được xác định là một phần của đặc tả
ALTER TABLE t1 AUTO_INCREMENT = 13;
00 riêng biệt.

Cả MySQL Server và NDB đều hỗ trợ việc sử dụng

ALTER TABLE t1 ENGINE = InnoDB;
9 để thả các khóa nước ngoài:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
8

Thêm và thả một khóa ngoại trong cùng một câu lệnh

ALTER TABLE t1 ENGINE = InnoDB;
9 được hỗ trợ cho
ALTER TABLE t1 AUTO_INCREMENT = 13;
16 nhưng không phải cho
ALTER TABLE t1 AUTO_INCREMENT = 13;
17.

Máy chủ nghiêm cấm các thay đổi đối với các cột khóa nước ngoài có khả năng gây mất tính toàn vẹn tham chiếu. Một cách giải quyết là sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
18 trước khi thay đổi định nghĩa cột và
ALTER TABLE t1 AUTO_INCREMENT = 13;
19 sau đó. Ví dụ về những thay đổi bị cấm bao gồm:

  • Thay đổi loại dữ liệu của các cột khóa nước ngoài có thể không an toàn. Ví dụ, việc thay đổi

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    20 thành
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    21 được cho phép, nhưng thay đổi nó thành
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    22 không phải vì điều đó làm thay đổi số lượng byte độ dài cần thiết để lưu trữ các giá trị riêng lẻ.

  • Thay đổi cột

    ALTER TABLE t1 ENGINE = InnoDB;
    08 thành
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    24 ở chế độ không nghiêm ngặt bị cấm để ngăn các giá trị
    ALTER TABLE t1 ENGINE = InnoDB;
    08 sang các giá trị không phải là mặc định, không có giá trị tương ứng trong bảng được tham chiếu. Hoạt động được cho phép ở chế độ nghiêm ngặt, nhưng lỗi được trả về nếu có bất kỳ chuyển đổi nào như vậy là bắt buộc.

Bảng thay đổi

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85 Đổi tên
ALTER TABLE t1 AUTO_INCREMENT = 13;
28 Thay đổi tên ràng buộc khóa nước ngoài được tạo bên trong và tên ràng buộc khóa nước ngoài do người dùng xác định bắt đầu bằng chuỗi
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_IBFK_ để phản ánh tên bảng mới.
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 diễn giải các tên ràng buộc khóa nước ngoài bắt đầu bằng chuỗi
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_IBFK_, là tên được tạo nội bộ.
changes internally generated foreign key constraint names and user-defined foreign key constraint names that begin with the string
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_ibfk_
to reflect the new table name.
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 interprets foreign key constraint names that begin with the string
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_ibfk_
as internally generated names.

Trước MySQL 8.0.16,

ALTER TABLE t1 ENGINE = InnoDB;
9 chỉ cho phép phiên bản giới hạn sau đây của cú pháp
ALTER TABLE t1 AUTO_INCREMENT = 13;
33 adding-adding, được phân tích cú pháp và bỏ qua:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
9

Kể từ MySQL 8.0.16,

ALTER TABLE t1 ENGINE = InnoDB;
9 cho phép
ALTER TABLE t1 AUTO_INCREMENT = 13;
33 ràng buộc cho các bảng hiện tại được thêm, bỏ hoặc thay đổi:

  • Thêm một ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 mới:

    ALTER TABLE t1 ENGINE = InnoDB;
    0

    Ý nghĩa của các phần tử cú pháp ràng buộc giống như đối với

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    0. Xem Phần & NBSP; 13.1.20.6, Kiểm tra các ràng buộc.

  • Thả một ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 hiện có có tên
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    39:

    ALTER TABLE t1 ENGINE = InnoDB;
    1
  • Thay đổi xem một ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 hiện có có tên
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    39 có được thực thi:

    ALTER TABLE t1 ENGINE = InnoDB;
    2

Các mệnh đề

ALTER TABLE t1 AUTO_INCREMENT = 13;
42 và
ALTER TABLE t1 AUTO_INCREMENT = 13;
43 là các phần mở rộng MySQL cho SQL tiêu chuẩn.

Kể từ MySQL 8.0.19,

ALTER TABLE t1 ENGINE = InnoDB;
9 cho phép cú pháp tổng quát hơn (và tiêu chuẩn SQL) để giảm và thay đổi các ràng buộc hiện tại của bất kỳ loại nào, trong đó loại ràng buộc được xác định từ tên ràng buộc:

  • Thả một ràng buộc hiện có có tên

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    39:

    ALTER TABLE t1 ENGINE = InnoDB;
    3

    Nếu biến hệ thống

    ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
    68 được bật, cố gắng bỏ khóa chính sẽ tạo ra lỗi.

  • Thay đổi xem một ràng buộc hiện có có tên

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    39 có được thực thi không:

    ALTER TABLE t1 ENGINE = InnoDB;
    4

    Chỉ có thể thay đổi các ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 để không được thực thi. Tất cả các loại ràng buộc khác luôn được thực thi.

Tiêu chuẩn SQL chỉ định rằng tất cả các loại ràng buộc (khóa chính, chỉ mục duy nhất, khóa ngoại, kiểm tra) thuộc cùng một không gian tên. Trong MySQL, mỗi loại ràng buộc có không gian tên riêng trên mỗi lược đồ. Do đó, tên cho từng loại ràng buộc phải là duy nhất cho mỗi lược đồ, nhưng các ràng buộc của các loại khác nhau có thể có cùng tên. Khi nhiều ràng buộc có cùng tên,

ALTER TABLE t1 AUTO_INCREMENT = 13;
49 và
ALTER TABLE t1 AUTO_INCREMENT = 13;
50 không rõ ràng và xảy ra lỗi. Trong những trường hợp như vậy, cú pháp cụ thể ràng buộc phải được sử dụng để sửa đổi ràng buộc. Ví dụ: sử dụng
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
66 hoặc thả chìa khóa nước ngoài để thả khóa chính hoặc khóa nước ngoài.

Nếu thay đổi bảng gây ra vi phạm ràng buộc

ALTER TABLE t1 AUTO_INCREMENT = 13;
33 được thực thi, xảy ra lỗi và bảng không được sửa đổi. Ví dụ về các hoạt động xảy ra lỗi:

  • Cố gắng thêm thuộc tính

    ALTER TABLE t1 COMMENT = 'New table comment';
    7 vào một cột được sử dụng trong ràng buộc
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33.

  • Các nỗ lực để thêm một ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 được thực thi hoặc thực thi một ràng buộc
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 không được thực thi mà các hàng hiện tại vi phạm điều kiện ràng buộc.

  • Nỗ lực sửa đổi, đổi tên hoặc thả một cột được sử dụng trong ràng buộc

    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33, trừ khi ràng buộc đó cũng bị loại bỏ trong cùng một câu lệnh. Ngoại lệ: Nếu một ràng buộc
    ALTER TABLE t1 AUTO_INCREMENT = 13;
    33 chỉ đề cập đến một cột, hãy thả cột tự động giảm ràng buộc.

Bảng thay đổi

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85 Đổi tên
ALTER TABLE t1 AUTO_INCREMENT = 13;
28 Thay đổi các tên ràng buộc được tạo ra trong nội bộ và do người dùng xác định bắt đầu bằng chuỗi
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_CHK_, để phản ánh tên bảng mới. MySQL diễn giải
ALTER TABLE t1 AUTO_INCREMENT = 13;
33 Các tên ràng buộc bắt đầu bằng chuỗi
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_CHK_THER dưới dạng tên được tạo bên trong.
changes internally generated and user-defined
ALTER TABLE t1 AUTO_INCREMENT = 13;
33 constraint names that begin with the string
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_chk_
to reflect the new table name. MySQL interprets
ALTER TABLE t1 AUTO_INCREMENT = 13;
33 constraint names that begin with the string
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
85_chk_
as internally generated names.

Thay đổi bộ ký tự

Để thay đổi bảng ký tự mặc định và tất cả các cột ký tự (

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
94,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
95,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96) thành tập ký tự mới, hãy sử dụng câu lệnh như thế này:

ALTER TABLE t1 ENGINE = InnoDB;
5

Tuyên bố cũng thay đổi sự đối chiếu của tất cả các cột ký tự. Nếu bạn chỉ định Điều khoản không

ALTER TABLE t1 AUTO_INCREMENT = 13;
68 để cho biết việc sử dụng đối chiếu nào, câu lệnh sử dụng đối chiếu mặc định cho bộ ký tự. Nếu đối chiếu này không phù hợp cho việc sử dụng bảng dự định (ví dụ: nếu nó sẽ thay đổi từ một đối chiếu nhạy cảm với trường hợp sang đối chiếu không nhạy cảm trường hợp), hãy chỉ định một đối chiếu rõ ràng.

Đối với một cột có loại dữ liệu là

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
95 hoặc một trong các loại
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96,
ALTER TABLE t1 AUTO_INCREMENT = 13;
71 thay đổi loại dữ liệu khi cần thiết để đảm bảo rằng cột mới đủ dài để lưu trữ nhiều ký tự như cột gốc. Ví dụ, cột
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96 có hai byte độ dài, lưu trữ độ dài byte của các giá trị trong cột, lên tới tối đa 65,535. Đối với cột
ALTER TABLE t1 AUTO_INCREMENT = 13;
73
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96, mỗi ký tự yêu cầu một byte duy nhất, do đó cột có thể lưu trữ tới 65.535 ký tự. Nếu cột được chuyển đổi thành
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
99, mỗi ký tự có thể yêu cầu tối đa 4 byte, với độ dài tối đa có thể là 4 × 65,535 = 262.140 byte. Độ dài đó không phù hợp với các byte chiều dài của cột
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96, do đó MYSQL chuyển đổi loại dữ liệu thành
ALTER TABLE t1 AUTO_INCREMENT = 13;
77, là loại chuỗi nhỏ nhất mà các byte có thể ghi lại giá trị là 262.140. Tương tự, một cột
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
95 có thể được chuyển đổi thành
ALTER TABLE t1 AUTO_INCREMENT = 13;
77.

Để tránh các thay đổi kiểu dữ liệu của loại vừa được mô tả, không sử dụng

ALTER TABLE t1 AUTO_INCREMENT = 13;
80. Thay vào đó, sử dụng
ALTER TABLE t1 ENGINE = InnoDB;
87 để thay đổi các cột riêng lẻ. Ví dụ:

ALTER TABLE t1 ENGINE = InnoDB;
6

Nếu bạn chỉ định

ALTER TABLE t1 AUTO_INCREMENT = 13;
82, các cột
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
94,
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
95 và
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
96 được chuyển đổi thành các loại chuỗi nhị phân tương ứng của chúng (
ALTER TABLE t1 AUTO_INCREMENT = 13;
86,
ALTER TABLE t1 AUTO_INCREMENT = 13;
87,
ALTER TABLE t1 AUTO_INCREMENT = 13;
88). Điều này có nghĩa là các cột không còn có bộ ký tự và hoạt động
ALTER TABLE t1 AUTO_INCREMENT = 13;
89 tiếp theo không áp dụng cho chúng.

Nếu

ALTER TABLE t1 AUTO_INCREMENT = 13;
90 là
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
76 trong hoạt động
ALTER TABLE t1 AUTO_INCREMENT = 13;
92, ký tự được đặt tên bởi biến hệ thống
ALTER TABLE t1 AUTO_INCREMENT = 13;
93 được sử dụng.

Cảnh báo

Hoạt động

ALTER TABLE t1 AUTO_INCREMENT = 13;
94 chuyển đổi các giá trị cột giữa các bộ ký tự gốc và được đặt tên. Đây không phải là những gì bạn muốn nếu bạn có một cột trong một bộ ký tự (như
ALTER TABLE t1 AUTO_INCREMENT = 13;
73) nhưng các giá trị được lưu trữ thực sự sử dụng một số ký tự không tương thích khác (như
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
99). Trong trường hợp này, bạn phải làm như sau cho từng cột như vậy:not what you want if you have a column in one character set (like
ALTER TABLE t1 AUTO_INCREMENT = 13;
73) but the stored values actually use some other, incompatible character set (like
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
99). In this case, you have to do the following for each such column:

ALTER TABLE t1 ENGINE = InnoDB;
7

Lý do hoạt động này là không có chuyển đổi khi bạn chuyển đổi sang hoặc từ các cột

ALTER TABLE t1 AUTO_INCREMENT = 13;
88.

Để chỉ thay đổi bộ ký tự mặc định cho bảng, hãy sử dụng câu lệnh này:default character set for a table, use this statement:

ALTER TABLE t1 ENGINE = InnoDB;
8

Từ

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
76 là tùy chọn. Bộ ký tự mặc định là tập ký tự được sử dụng nếu bạn không chỉ định tập ký tự cho các cột mà bạn thêm vào bảng sau (ví dụ: với
ALTER TABLE t1 AUTO_INCREMENT = 13;
99).

Khi biến hệ thống

ALTER TABLE t1 CHARACTER SET = utf8mb4;
00 được bật, đó là cài đặt mặc định, việc chuyển đổi bộ ký tự không được phép trên các bảng bao gồm cột chuỗi ký tự được sử dụng trong ràng buộc khóa nước ngoài. Giải pháp thay thế là vô hiệu hóa
ALTER TABLE t1 CHARACTER SET = utf8mb4;
00 trước khi thực hiện chuyển đổi bộ ký tự. Bạn phải thực hiện chuyển đổi trên cả hai bảng liên quan đến ràng buộc khóa nước ngoài trước khi kích hoạt lại
ALTER TABLE t1 CHARACTER SET = utf8mb4;
00. Nếu bạn kích hoạt lại
ALTER TABLE t1 CHARACTER SET = utf8mb4;
00 sau khi chỉ chuyển đổi một trong các bảng, hoạt động
ALTER TABLE t1 CHARACTER SET = utf8mb4;
04 hoặc
ALTER TABLE t1 CHARACTER SET = utf8mb4;
05 có thể làm hỏng dữ liệu trong bảng tham chiếu do chuyển đổi ngầm xảy ra trong các hoạt động này (BUG #45290, BUG #74816).

Nhập bảng Innodb

Một bảng

ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 được tạo trong không gian bảng cho mỗi bảng của riêng mình có thể được nhập từ bản sao lưu hoặc từ một phiên bản máy chủ MySQL khác bằng cách sử dụng các điều khoản
ALTER TABLE t1 CHARACTER SET = utf8mb4;
07 và
ALTER TABLE t1 CHARACTER SET = utf8mb4;
08. Xem Phần & NBSP; 15.6.1.3, Nhập khẩu bảng InnoDB.

Thứ tự hàng cho bảng myisam

ALTER TABLE t1 CHARACTER SET = utf8mb4;
09 cho phép bạn tạo bảng mới với các hàng theo một thứ tự cụ thể. Tùy chọn này chủ yếu hữu ích khi bạn biết rằng bạn truy vấn các hàng theo một thứ tự nhất định hầu hết thời gian. Bằng cách sử dụng tùy chọn này sau những thay đổi lớn trong bảng, bạn có thể có được hiệu suất cao hơn. Trong một số trường hợp, nó có thể giúp việc sắp xếp MySQL dễ dàng hơn nếu bảng theo thứ tự bởi cột mà bạn muốn đặt hàng sau này.

Ghi chú

Bảng không duy trì theo thứ tự được chỉ định sau khi chèn và xóa.

ALTER TABLE t1 CHARACTER SET = utf8mb4;
09 Cú pháp cho phép một hoặc nhiều tên cột được chỉ định để sắp xếp, mỗi tên tùy chọn có thể được theo sau bởi
ALTER TABLE t1 CHARACTER SET = utf8mb4;
11 hoặc
ALTER TABLE t1 CHARACTER SET = utf8mb4;
12 để chỉ ra thứ tự sắp xếp tăng dần hoặc giảm dần. Mặc định là thứ tự tăng dần. Chỉ tên cột được cho phép là tiêu chí sắp xếp; Biểu thức tùy ý không được phép. Điều khoản này nên được đưa ra cuối cùng sau bất kỳ điều khoản nào khác.

ALTER TABLE t1 CHARACTER SET = utf8mb4;
09 không có ý nghĩa đối với các bảng
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 vì
ALTER TABLE t1 CHARACTER SET = utf8mb4;
7 luôn đặt hàng các hàng bảng theo chỉ mục phân cụm.

Khi được sử dụng trên một bảng được phân vùng, chỉ các đơn đặt hàng

ALTER TABLE t1 CHARACTER SET = utf8mb4;
16 trong mỗi phân vùng.

Tùy chọn phân vùng

ALTER TABLE t1 CHARACTER SET = utf8mb4;
17 biểu thị các tùy chọn có thể được sử dụng với các bảng được phân vùng để tái bản, để thêm, thả, loại bỏ, nhập, hợp nhất và phân chia phân vùng và để thực hiện bảo trì phân vùng.

Có thể một câu lệnh

ALTER TABLE t1 ENGINE = InnoDB;
9 có chứa một điều khoản
ALTER TABLE t1 CHARACTER SET = utf8mb4;
19 hoặc
ALTER TABLE t1 CHARACTER SET = utf8mb4;
20 để bổ sung các thông số kỹ thuật thay đổi khác, nhưng điều khoản
ALTER TABLE t1 CHARACTER SET = utf8mb4;
21 hoặc
ALTER TABLE t1 CHARACTER SET = utf8mb4;
20 phải được chỉ định cuối cùng sau bất kỳ thông số kỹ thuật nào khác.
ALTER TABLE t1 ENGINE = InnoDB;
43,
ALTER TABLE t1 ENGINE = InnoDB;
44,
ALTER TABLE t1 CHARACTER SET = utf8mb4;
25,
ALTER TABLE t1 CHARACTER SET = utf8mb4;
26,
ALTER TABLE t1 ENGINE = InnoDB;
45,
ALTER TABLE t1 ENGINE = InnoDB;
47,
ALTER TABLE t1 CHARACTER SET = utf8mb4;
29,
ALTER TABLE t1 CHARACTER SET = utf8mb4;
30,
ALTER TABLE t1 CHARACTER SET = utf8mb4;
31 và
ALTER TABLE t1 CHARACTER SET = utf8mb4;
32 không thể kết hợp với các tùy chọn khác nhau.

Để biết thêm thông tin về các tùy chọn phân vùng, xem Phần & NBSP; 13.1.20, Tuyên bố Tạo bảng và Phần & NBSP; 13.1.9.1, hoạt động phân vùng bảng thay đổi. Để biết thông tin về và ví dụ về các câu lệnh

ALTER TABLE t1 CHARACTER SET = utf8mb4;
34, xem Phần & NBSP; 24.3.3, Phân vùng trao đổi và các phần phụ với các bảng.

Làm cách nào để thêm một bảng mới vào một bảng hiện có?

Một bản sao của một bảng hiện có có thể được tạo bằng cách sử dụng kết hợp câu lệnh CREATE TABLE và câu lệnh CHỌN. Bảng mới có cùng định nghĩa cột. Tất cả các cột hoặc các cột cụ thể có thể được chọn.using a combination of the CREATE TABLE statement and the SELECT statement. The new table has the same column definitions. All columns or specific columns can be selected.

Làm cách nào để thêm một bảng mới vào hai bảng trong MySQL?

Trả lời: Tham gia hai bảng trong SQL có thể được thực hiện theo bốn cách chính: tham gia bên trong (trả về các hàng với các cột phù hợp), tham gia bên trái (tất cả các bản ghi trong bảng bên trái và các bản ghi phù hợp trong bảng bên phải), tham gia bên phải (tất cả các bản ghi trongBảng bên phải và các bản ghi phù hợp trong bảng bên trái) và Union (loại bỏ các bản sao).

Làm cách nào để tạo một bảng mới trong cơ sở dữ liệu hiện có trong MySQL Workbench?

Tạo một bảng..
Mở rộng cơ sở dữ liệu mà bạn muốn tạo bảng ..
Mục đầu tiên trong menu mở rộng phải là bảng.....
Đặt tên cho bảng của bạn ..
Bấm đúp vào phần trắng trống dưới tên bảng để thêm cột ..
Xác định tên cột, kiểu dữ liệu và mọi ràng buộc mà nó có thể yêu cầu ..

Làm cách nào để thêm một cột vào một bảng trong một bảng khác trong MySQL?

Cú pháp.Cú pháp để thêm một cột vào bảng trong MySQL (sử dụng câu lệnh ALTER BẢNG) IS: ALTER BẢNG TABLE_NAME Thêm new_column_name cột_definition [Đầu tiên |Sau cột_name]; Table_Name.ALTER TABLE table_name ADD new_column_name column_definition [ FIRST | AFTER column_name ]; table_name.