Mysql
無法刪除 MySQL 觸發器。出現在 information_schema 中,但沒有 .TRN 文件
我有一個帶有一些表和触發器的 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’”
根據我在聊天室給出的建議,這是我的回答
CREATE TABLE cash_op LIKE cash_operation;
- 轉到 Windows 伺服器中的數據目錄
rename cash_op.MYD cash_op.MYX
copy cash_operation.MYD cash_op.MYD
- 登錄到mysql並執行
REPAIR TABLE cash_op;
ALTER TABLE cash_operation RENAME cash_op_old;
ALTER TABLE cash_op RENAME cash_operation;
- 在新的 cash_operation 表上創建兩個觸發器
你在聊天室說:
Awesome, that worked! You can post it as the answer.
我很高興你試一試,它對你有用!!!
順便說一句,您可以刪除舊表
DROP TABLE cash_op_old;