Một cách tiếp cận hacky khác mà tôi vừa thử thành công là lấy DDL tạo bảng thông qua lệnh mysql cụ thể
SHOW CREATE TABLE `tableName`
Sau đó, thực hiện một số phép thuật regexp và tạo một truy vấn DDL mới sẽ tạo một bảng tạm thời dựa trên bảng gốc, với tất cả các thay đổi bảng thay thế được kết hợp vào bảng tạo.
Trong dự án dựa trên PHP của tôi, tôi đã làm như sau để thêm một chỉ mục duy nhất vào một bảng tạm thời. Nó đã thực hiện một thủ thuật và không có cam kết ngầm nào xảy ra giữa giao dịch.
$createDDL = ... get from SHOW CREATE TABLE `tableName`
$nr = 0;
$createDDL = preg_replace("/CREATE TABLE `$tableName` \(/", "CREATE TEMPORARY TABLE `$tmpName` (\nUNIQUE `ukey-1` ($uniqCols),", $createDDL, -1, $nr);
if (!$nr)
throw new Exception("CREATE TABLE replacement error. No reps made.");
mysqli_query($con, $createDDL);
CHỈNH SỬA Nhân tiện, đây là một số báo cáo lỗi (tính năng) (kể từ nhiều năm). Trong lần đầu tiên, bạn có thể thấy một phản hồi (có từ năm 2006) cho biết:vì hành vi này giống như trong oracle db, đây là hành vi nhất quán ...
Có thể yêu cầu tính năng "chiến dịch gửi thư rác" nên được bắt đầu để yêu cầu tính năng này phục hồi!