mysql中'updated_at'的默认值无效

时间:2016-08-04 07:29:21

标签: java mysql database timestamp

  

引起:java.sql.SQLException:默认值无效   'updated_at'查询:

CREATE TABLE IF NOT EXISTS saved_query (id int(11)
NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,description
 varchar(255) DEFAULT NULL,query longtext,params_json
longtext,created_at timestamp DEFAULT CURRENT_TIMESTAMP,updated_at
=timestamp NOT NULL,  PRIMARY KEY (id)) Parameters: []

将查询粘贴为可读性:

CREATE TABLE IF NOT EXISTS saved_query 
( 
 id          INT(11) NOT NULL auto_increment, 
 name        VARCHAR(255) NOT NULL, 
 description VARCHAR(255) DEFAULT NULL, 
 query       LONGTEXT, 
 params_json LONGTEXT, 
 created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
 updated_at  TIMESTAMP NOT NULL, 
 PRIMARY KEY (id) 
) 

Mysql版本为5.7.13。上述查询适用于版本5.65.5。以下查询适用于5.7,但不适用于<5.7版本:

CREATE TABLE IF NOT EXISTS saved_query 
  ( 
     id          INT(11) NOT NULL auto_increment, 
     name        VARCHAR(255) NOT NULL, 
     description VARCHAR(255) DEFAULT NULL, 
     query       LONGTEXT, 
     params_json LONGTEXT, 
     created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
     updated_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
     PRIMARY KEY (id) 
  ) 

5.6中的错误是:

  

引起:java.sql.SQLException:表定义不正确;那里   在DEFAULT或DEFAULT中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP   ON UPDATE子句查询:

 CREATE TABLE IF NOT EXISTS saved_query (id
 int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,description
 varchar(255) DEFAULT NULL,query longtext,params_json
 longtext,created_at timestamp DEFAULT CURRENT_TIMESTAMP,updated_at
 timestamp DEFAULT CURRENT_TIMESTAMP,  PRIMARY KEY (id)) Parameters: []

在所有这些版本中适用的查询应该是什么?

2 个答案:

答案 0 :(得分:3)

问题是因为s​​ql_modes。您必须删除sql_mode才能使其正常工作。删除这些SQL模式

pywinauto.mouse.click(button='left', coords=(0, 0)) //Click at the specified coordinates

pywinauto.mouse.double_click(button='left', coords=(0, 0)) //Double click at the specified coordinates

pywinauto.mouse.move(coords=(0, 0))  //Move the mouse

pywinauto.mouse.press(button='left', coords=(0, 0))    //Press the mouse button

pywinauto.mouse.release(button='left', coords=(0, 0)) //Release the mouse button

pywinauto.mouse.right_click(coords=(0, 0)) //Right click at the specified coords

pywinauto.mouse.scroll(coords=(0, 0), wheel_dist=1) //Do mouse wheel

pywinauto.mouse.wheel_click(coords=(0, 0)) //Middle mouse button click at the specified coords  

在运行任何查询之前

将此查询放在第一行:

NO_ZERO_IN_DATE
NO_ZERO_DATE

在运行任何查询之前

将此查询放在第一行:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

答案 1 :(得分:-1)

TIMESTAMP不能为NULL,而mysql为列添加DEFAULT CURRENT_TIMESTAMP。但可能只有一个列宽DEFAULT CURRENT_TIMESTAMP。只需使用'0000-00-00 00:00:00'

CREATE TABLE IF NOT EXISTS saved_query 
  ( 
     id          INT(11) NOT NULL auto_increment, 
     name        VARCHAR(255) NOT NULL, 
     description VARCHAR(255) DEFAULT NULL, 
     query       LONGTEXT, 
     params_json LONGTEXT,
     created_at  TIMESTAMP DEFAULT '0000-00-00 00:00:00',
     updated_at  TIMESTAMP DEFAULT '0000-00-00 00:00:00',
     PRIMARY KEY (id) 
  )