Mysql

無法刪除 MySQL 觸發器。出現在 information_schema 中,但沒有 .TRN 文件

  • June 26, 2015

我有一個帶有一些表和触發器的 MySQL 數據庫。一個程序試圖刪除其中一個觸發器,但失敗並出現以下錯誤:

Malformed file type header in file 'trigger_name.TRN'

我試圖手動放下觸發器,但顯然得到了同樣的錯誤。所以我繼續刪除了.TRN文件本身(這是個壞主意嗎?)。

刪除.TRN文件後,觸發器仍然出現在information_schema.TRIGGERS. 如果我嘗試刪除它,我會收到錯誤“觸發器不存在”。如果我嘗試創建另一個具有相同名稱、表和事件操作的觸發器,則會收到錯誤“觸發器已存在”。

我不知道還能做什麼。我怎樣才能真正刪除此觸發器以便再次創建它?

MySQL 版本是 5.0.22,所有表都是 MyISAM。

SHOW CREATE TABLE輸出:

CREATE TABLE `cash_operation` (
 `id` int(11) NOT NULL auto_increment,
 `amount` decimal(16,8) NOT NULL default '0.00000000',
 `comment` varchar(500) NOT NULL default '',
 `reason_id` int(11) NOT NULL default '-1',
 `date` datetime NOT NULL default '1980-01-01 00:00:00',
 `reconciliation_number` int(11) NOT NULL default '-1',
 `reason_desc` varchar(250) NOT NULL default '',
 `automatic` tinyint(1) NOT NULL default '0',
 `employee_id` int(11) NOT NULL default '-1',
 `employee_code` varchar(250) NOT NULL default '',
 `employee_name` varchar(250) NOT NULL default '',
 `payed_employee_id` int(11) NOT NULL default '-1',
 PRIMARY KEY  (`id`),
 KEY `cash_operation_reason_id` USING BTREE (`reason_id`),
 KEY `cash_operation_reconciliation_number` USING BTREE (`reconciliation_number`),
 KEY `cash_operation_automatic` USING BTREE (`automatic`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

SELECT @@global.datadir;導致錯誤“未知系統變數’datadir’”

根據我在聊天室給出的建議,這是我的回答

  1. CREATE TABLE cash_op LIKE cash_operation;
  2. 轉到 Windows 伺服器中的數據目錄
  3. rename cash_op.MYD cash_op.MYX
  4. copy cash_operation.MYD cash_op.MYD
  5. 登錄到mysql並執行
  • REPAIR TABLE cash_op;
  • ALTER TABLE cash_operation RENAME cash_op_old;
  • ALTER TABLE cash_op RENAME cash_operation;
  1. 在新的 cash_operation 表上創建兩個觸發器

你在聊天室說:Awesome, that worked! You can post it as the answer.

我很高興你試一試,它對你有用!!!

順便說一句,您可以刪除舊表DROP TABLE cash_op_old;

引用自:https://dba.stackexchange.com/questions/105128