在mysql中创建create语句时,需要在列中添加两个小时

时间:2019-07-16 07:10:55

标签: mysql

我正在创建一个表,因为我现在通过now()函数获取输入时间。每个数据将在2个两个小时内有效。所以我需要自动将时间添加到结束时间列中

CREATE TABLE `mdiner_test`.`table_assign_mgr` (
  `resid` INT NOT NULL AUTO_INCREMENT,
  `custname` VARCHAR(45) NOT NULL DEFAULT 'Guest',
  `custemail` VARCHAR(45) NOT NULL DEFAULT 'info@si.com',
  `custmobile` VARCHAR(45) NOT NULL DEFAULT '98989898',
  `isactive` TINYINT NOT NULL DEFAULT 1,
  `starttime` DATETIME NOT NULL DEFAULT now(),
  `endtime` DATETIME NOT NULL DEFAULT DATE_ADD(now(), INTERVAL 2 HOUR),
  PRIMARY KEY (`resid`));

2 个答案:

答案 0 :(得分:0)

这似乎是不必要的列,但是您可以使用生成的列(取决于mysql的版本)https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html,但是您将失去提供结束时间的功能。

drop table if exists t;
CREATE TABLE t (
  `resid` INT NOT NULL AUTO_INCREMENT,
  `custname` VARCHAR(45) NOT NULL DEFAULT 'Guest',
  `custemail` VARCHAR(45) NOT NULL DEFAULT 'info@si.com',
  `custmobile` VARCHAR(45) NOT NULL DEFAULT '98989898',
  `isactive` TINYINT NOT NULL DEFAULT 1,
  `starttime` DATETIME NOT NULL DEFAULT now(),
  `endtime` DATETIME as (DATE_ADD(starttime, INTERVAL 2 HOUR)),
  PRIMARY KEY (`resid`));

insert into t(resid) values (1);

select * from t;

+-------+----------+-------------+------------+----------+---------------------+---------------------+
| resid | custname | custemail   | custmobile | isactive | starttime           | endtime             |
+-------+----------+-------------+------------+----------+---------------------+---------------------+
|     1 | Guest    | info@si.com | 98989898   |        1 | 2019-07-16 08:27:58 | 2019-07-16 10:27:58 |
+-------+----------+-------------+------------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

如果无法使用生成的列,则可以使用触发器。

答案 1 :(得分:0)

根据最新的MySQL documentation,您似乎无法通过动态创建表来实现它:

  

DEFAULT子句中指定的默认值必须为文字   不变;它不能是函数或表达式。这意味着   例如,您不能将日期列的默认值设置为   NOW()或CURRENT_DATE之类的函数的值。例外是   对于TIMESTAMP和DATETIME列,您可以指定   CURRENT_TIMESTAMP作为默认值。请参见第11.3.4节“自动   TIMESTAMP和DATETIME的初始化和更新”。

在这种情况下,也许您可​​以继续使用P. Salmon的解决方案。