mysql行脚本拒绝执行(没有错误/警告)

时间:2011-10-05 04:31:17

标签: mysql command

我有一个非常长的脚本,它将csv文件导入到保留表中,进行一些按摩,然后将保存表中的数据复制到最终表中。

当我运行脚本时,一切都在执行,除了第494行:

UPDATE `database`.`holding` 
SET `rcnt_rslts`=TRUE 
WHERE `test_rcnt`=TRUE 
  AND (`rcntrslt`='pos' OR `rcntrslt`='neg' OR `rcntrslt`='indeterminate');
两个表中的{p> rcnt_rsltsBOOL / TINYINT(1),上面的行几乎相同,执行得很好。脚本中的任何其他位置都没有其他对rcnt_rslts的引用(使用find / replace验证)。

如果我将该行直接传递到CMI,它就可以工作。

是否存在行/大小限制并且mysql随机选择了一行来忽略?

修改:如果重要,脚本运行后rcnt_rslts中的所有值都为NULL

1 个答案:

答案 0 :(得分:1)

好的我会试一试:

1-也许你在rcntrslt中输了一个拼写错误,就这样做,你只列出一次。

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
  AND (rcntrslt IN ('pos','neg','indeterminate'));

2- =可以区分大小写,LIKE永远不会,尝试:

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
  AND (rcntrslt LIKE 'pos' OR rcntrslt LIKE 'neg' OR rcntrslt LIKE 'indeterminate');

3- rcntrslt可以有哪些其他值,你不能反转所有测试?

UPDATE `database`.holding 
SET rcnt_rslts = TRUE 
WHERE test_rcnt<>FALSE AND test_rcnt IS NOT NULL 
  AND (rcntrslt NOT IN ('othervalue','test1','gdsd')
  AND rcntrslt IS NOT NULL;

4-也许rcntrslt导致空间或其他不可打印的字符存在污染。

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
  AND (rcntrslt LIKE '%pos%' OR rcntrslt LIKE '%neg%' 
       OR rcntrslt LIKE '%indeterminate%');

5-如果你想调试,你总是可以在那里做一些诊断SELECTS来看看发生了什么。

CREATE TABLE log (
  id integer auto_increment not null primary key,
  logtime timestamp,
  reason varchar(255) not null,
  tablename varchar(255) not null,
  fieldnames varchar(10000) not null,
  values varchar(10000) not null,
  INDEX log_time (logtime),
  INDEX log_table (tablename),
  INDEX log_reason (tablename, reason)) ENGINE = InnoDB;

INSERT INTO log (reason, tablename, fieldnames, values)
  SELECT 
    'all values','holding', 'test_rcnt,rcntrslt'
    , CONCAT(IFNULL(test_rcnt,'NULL'), ',' ,IFNULL(rcntrslt,'NULL')
  FROM holding;

INSERT INTO log (reason, tablename, fieldnames, values)
  SELECT 
    'test_rcnt = TRUE','holding', 'test_rcnt,rcntrslt'
    , CONCAT(IFNULL(test_rcnt,'NULL'), ',' ,IFNULL(rcntrslt,'NULL')
  FROM holding 
  WHERE test_rcnt = TRUE;

现在检查日志以查看错误。