2013-03-12 60 views
2

我一直在研究這個問題很長一段時間,但一直未能找到任何有用的結果。Mysql在現有列上的未知列(僅插入)

我有一個表:

CREATE TABLE `jobs` (
    `jb_id` MEDIUMINT(7) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `wo_id` MEDIUMINT(7) UNSIGNED NOT NULL, 
    `file_name` VARCHAR(140) NOT NULL COLLATE 'latin1_bin', 
    `jb_status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', 
    `descr` TEXT NULL COLLATE 'latin1_bin', 
    `syncronized` TINYINT(2) UNSIGNED NOT NULL, 
    `failedcnt` TINYINT(3) UNSIGNED NOT NULL, 
    `clip_title` TINYTEXT NULL COLLATE 'latin1_bin', 
    `clip_description` TEXT NULL COLLATE 'latin1_bin', 
    `clip_tags` TINYTEXT NULL COLLATE 'latin1_bin', 
    PRIMARY KEY (`jb_id`), 
    INDEX `woid` (`wo_id`), 
    INDEX `job_stat` (`jb_status`), 
    INDEX `synced` (`syncronized`), 
    INDEX `failedcnt` (`failedcnt`), 
    INDEX `file_name` (`file_name`) 
) 
COLLATE='latin1_bin' 
ENGINE=MyISAM; 

當我運行SELECT或UPDATE命令,一切工作正常。

select jobs.clip_description from jobs Limit 1; 
/* 0 rows affected, 1 rows found. Duration for 1 query: 0.768 sec. */ 

UPDATE `jobs` SET `clip_description`='test' WHERE `jb_id`=2 LIMIT 1; 

但是,當我嘗試運行

INSERT INTO `jobs` (`clip_description`) VALUES ('test'); 
/* SQL Error (1054): Unknown column 'clip_description' in 'field list' */ 

這也在昨天發生的事情,但我沒有太多的時間來處理這個問題的話,我創建新表使用不同的名稱,但相同的結構,複製所有數據,然後重命名這兩個表,然後再次運行。直到大約兩個小時前,問題纔回來。每12小時開始處理一次表並不是真正的選擇。

對於創建副本,我用:

CREATE TABLE jobs_new LIKE jobs; INSERT jobs_new SELECT * FROM jobs; 

之後,前面提到的插入會工作。

任何幫助將不勝感激。

編輯: 如果它使我運行 Server版本有什麼區別:在Ubuntu服務器12.04 LTS 64位5.5.28-0ubuntu0.12.04.2日誌(Ubuntu的)

+0

當您運行時會發生什麼 INSERT INTO作業SET clip_description ='test'? – 2013-03-12 09:44:27

+0

INSERT INTO作業SET clip_description ='test'; /* SQL錯誤(1054):'字段列表'中的未知列'clip_description'*/ – madisx 2013-03-12 09:45:55

+2

這可能是相關的:http://stackoverflow.com/questions/12862081/error-1054-unknown-coloumn-in-insert - 條款?rq = 1 – 2013-03-12 09:47:02

回答

2

它看起來像你與表相關的其他約束可能是觸發器或某個計算列,具體取決於clip_description列。是不是?

請檢查該表的依賴關係和觸發器。

+1

是的,在之前的文章中添加了一條評論,我找到了一個使用這個確切列的同事觸發器。 SET NEW.clip_description = REPLACE(clip_description,'Old','New');但必須是SET NEW.clip_description = REPLACE(NEW.clip_description,'Old','New'); – madisx 2013-03-12 10:04:44