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

Cách ngăn chặn cam kết ngầm của mysql

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. truy vấn laravel php cách nhận giá trị tối đa trong một phạm vi

  2. PHP PDO so với mysql_connect bình thường

  3. Chặn '0000-00-00' khỏi Trường Ngày MySQL

  4. Cho phép thực thi nhiều câu lệnh trong khi thực thi qua sqlalchemy

  5. Di chuyển từ Oracle sang MySQL