MySQL/除錯
外觀
< MySQL
有幾種方法可以除錯 MySQL 指令碼。例如,可能需要記錄每個 SQL 請求。為此
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE';
然後它會將伺服器的每個請求記錄到系統資料庫 mysql 中的 general_log 表中。
在 MySQL 中,像“被零除”這樣的異常不會返回任何錯誤,而是返回 NULL。
但是,在操作表時可能會發生一些異常,例如為了避免由於“UNIQUE”約束導致插入列表在中途停止。以下示例函式在 InnoDB 表(而不是 MyISAM)上執行[1]
ALTER TABLE `MyTable1` ADD UNIQUE(`id`);
INSERT INTO MyTable1 (id) VALUES('1');
START TRANSACTION;
INSERT INTO MyTable1 (id) VALUES('2');
INSERT INTO MyTable1 (id) VALUES('3');
INSERT INTO MyTable1 (id) VALUES('1');
IF condition THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
在這裡,在插入第二個 id=1 時會發生錯誤。但是根據一個條件,指令碼可以取消 2 和 3 的插入,或者無論如何提交它們。
預設情況下,MySQL 設定為自動提交,這意味著在每個操作之後都會自動執行 COMMIT(使 ROLLBACK 無用)。要停用它,請啟動 SET autocommit = 0;
注意:當在執行一個 ROLLBACK 之前執行多個 COMMIT 時(例如在迴圈中),它只會取消最後一個 COMMIT 之後的 operations。
從遠端計算機連線時,使用的帳戶未被授權。應該設定如下
GRANT ALL PRIVILEGES ON *.* TO 'MyUser1'@'%' WITH GRANT OPTION;
而不是或除了
GRANT ALL PRIVILEGES ON *.* TO 'MyUser1'@'localhost' WITH GRANT OPTION;
當嘗試根據這些相同行的選擇刪除某些行時會發生這種情況。
只需使用一些中間 CREATE TEMPORARY TABLE 即可。
更改引數“host”。
- 在
SELECT的情況下,使用HAVING而不是WHERE來根據某些其他記錄修改記錄。 - 對於
UPDATE或DELETE,IN比較的欄位可能不屬於同一型別。
使用 phpMyAdmin 查詢確切的語法錯誤位置。
將“IN”替換為一些連線。