Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chuyển đổi bảng từ MyISAM sang InnoDB trong MySQL

Để chuyển đổi engine, sử dụng lệnh ALTER TABLE.

Tạo bảng với engine MyISAM

mysql> create table DemoTable (
    -> ClientId int NOT NULL AUTO_INCREMENT,
    -> ClientName varchar(100),
    -> ClientAge int,
    -> ClientCountryName varchar(100),
    -> isMarried boolean,
    -> PRIMARY KEY(ClientId)
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.67 sec)

Chuyển đổi sang InnoDB

mysql> alter table DemoTable ENGINE=InnoDB;
Query OK, 0 rows affected (1.97 sec)
Records: 0 Duplicates: 0 Warnings: 0

Kiểm tra engine sau chuyển đổi

mysql> show create table DemoTable;

Kết quả - Engine đã chuyển thành InnoDB

+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table        | Create Table                                                                                                                                                                                                                                                                                                                                                                             |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DemoTable    | CREATE TABLE `DemoTable` (`ClientId` int(11) NOT NULL AUTO_INCREMENT, `ClientName` varchar(100) ..., PRIMARY KEY (`ClientId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Lưu ý quan trọng:

  • InnoDB: Hỗ trợ transaction, khóa ngoại, khóa hàng (row-level locking), phục hồi sự cố tốt hơn. Mặc định từ MySQL 5.5+.
  • MyISAM: Nhanh hơn cho đọc nhiều, ghi ít, hỗ trợ fulltext search (cũ), khóa cấp bảng (table-level locking).
  • Chuyển đổi bảng lớn có thể tốn thời gian và khóa bảng trong quá trình.
  • Dữ liệu được giữ nguyên, chỉ thay đổi engine lưu trữ.

Kiểm tra engine hiện tại: SHOW TABLE STATUS WHERE Name = 'ten_bang';