MySQL:TIMESTAMP的默认值无效

时间:2017-07-29 07:27:13

标签: mysql sql create-table

我收到错误

ERROR 1067 (42000) at line 5459: Invalid default value for 'start_time'
运行以下查询时

DROP TABLE IF EXISTS `slow_log`;
CREATE TABLE IF NOT EXISTS `slow_log` (
  `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `query_time` time(6) NOT NULL,
  `lock_time` time(6) NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';

我正在使用MySQL 5.7.18

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.18, for osx10.10 (x86_64) using  EditLine wrapper

根据MySQL 5.7 documentation,以下语法为

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

上面的SQL语法有什么问题?

2 个答案:

答案 0 :(得分:4)

有趣的是,这两项工作都是:

`start_time` timestamp(6), 

`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

您可以使用后者 - 将精度说明符保留在定义之外。

但正确的方法是:

`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),

正如documentation

中所述
  

如果TIMESTAMPDATETIME列定义包含显式内容   小数秒精度值在任何地方,必须是相同的值   在整个列定义中使用。这是允许的:

CREATE TABLE t1 (
  ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
     

这是不允许的:

CREATE TABLE t1 (
  ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(3)
);

答案 1 :(得分:1)

尝试:

function waitForElement(element, maxWaitTime, failOnError) {
  maxWaitTime = maxWaitTime || 10000;
  failOnError = failOnError || false;

  return browser.wait(ExpectedConditions.visibilityOf(element), maxWaitTime)
    .then((found) => Promise.resolve(found))
    .catch((waitError) => {
      if (failOnError) {
        return Promise.reject(`waitForElement: ${waitError} for expected condition ${expectation} for the element: ${element}`);
      } else {
        return Promise.resolve(false);
      }
    });
}