Php MySQL默认日期();14天,一个专栏?

Php MySQL默认日期();14天,一个专栏?,php,mysql,date,default-value,Php,Mysql,Date,Default Value,我想知道下面的内容是否可以通过MySQL实现,或者是否必须使用PHP实现 任务-“到期日” 用户输入产品名称 用户单击提交表单按钮 数据被发布,然后发送到MySQL 到期日=现在的日期+14天 我试图实现的是mysql在一个表列中插入一个“expiration_date”的方法,它将等于在该表中创建行的日期后14天 CREATE TABLE product( product_id INT PRIMARY KEY, product VARCHAR(40), entryDat

我想知道下面的内容是否可以通过MySQL实现,或者是否必须使用PHP实现

任务-“到期日”

  • 用户输入产品名称
  • 用户单击提交表单按钮
  • 数据被发布,然后发送到MySQL
  • 到期日=现在的日期+14天
  • 我试图实现的是mysql在一个表列中插入一个“expiration_date”的方法,它将等于在该表中创建行的日期后14天

    CREATE TABLE product(
        product_id INT PRIMARY KEY,
        product VARCHAR(40),
        entryDate DATETIME,
        expDate DATETIME
    );
    
    CREATE TRIGGER test_trigger BEFORE INSERT ON `product` 
    FOR EACH ROW SET
        NEW.entryDate = IFNULL(NEW.entryDate, NOW()),
        NEW.expDate = TIMESTAMPADD(DAY, 14, NEW.entryDate);
    
    e、 g

    我有一种感觉,除非使用存储过程,否则在mysql中可能无法实现

    我很高兴用PHP来做这件事,但是我希望如果我能用mysql来做的话,我的系统中会留下更少的错误空间

    谢谢


    或者如前所述,将该字段的表结构(该字段的属性=)更改为“更新当前时间戳”

    您可以通过使用MySQL中的
    DateTime
    方法来使用它:

    DATE_ADD(date_starts,INTERVAL 14 DAY)
    
    例如:

    UPDATE events SET date_starts = DATE_ADD(date_starts,INTERVAL 14 DAY) WHERE event_id = 3;
    

    有关更多详细信息,请转到。

    您可以尝试此功能

    DATE\u ADD(现在(),间隔14天)

    根据这一点,您不能将表达式用作默认说明符

    因此,不确定自发布错误以来是否发生了更改


    但是,我不确定为什么我假设OP想要将其定义为默认值。

    我相信MySQL不允许您在默认值中使用表达式。你可能想写一个触发器

    MySQL确实提供了一个时间戳数据类型,当创建或更新一行时,该数据类型可以设置为当前时间戳。您可能会发现此功能有些有用:

    一旦确定MySQL按预期填充了该列,就可以编写如下查询:

    SELECT `Created`, `Created` + INTERVAL 14 DAY AS `expiry_date`
    FROM table1
    

    创建一个表并设置该表的触发器

    CREATE TABLE product(
        product_id INT PRIMARY KEY,
        product VARCHAR(40),
        entryDate DATETIME,
        expDate DATETIME
    );
    
    CREATE TRIGGER test_trigger BEFORE INSERT ON `product` 
    FOR EACH ROW SET
        NEW.entryDate = IFNULL(NEW.entryDate, NOW()),
        NEW.expDate = TIMESTAMPADD(DAY, 14, NEW.entryDate);
    

    每次向表中插入时,触发器将
    entryDate
    设置为当前时间,将
    expDate
    设置为14天时间。

    最简单的解决方法就是插入所需的值-无需触发器或以后的更新,例如

     INSERT INTO <your_table> (name, expiry_date) VALUES ('foo', DATE_ADD(CURRENT_TIMESTAMP,INTERVAL 7 DAY))
    
    插入(名称、到期日)值('foo',日期\u添加(当前时间戳,间隔7天))
    
    我更喜欢这种格式:

    SELECT NOW()+INTERVAL 14 DAY
    

    你可以使用触发器。当你插入时,只需在输入日期上加上14天(我想是现在(),然后将其与插入查询一起传递会不会更简单?@JaspreetChahal,不,因为我需要一个开始日期和结束日期来确定某个内容是否已过期,作为错误预防的故障保护谢谢,从来都不知道date_add()函数!:)我不想使用时间戳,因为它不如DATETIME好,但要感谢
    创建表
    中的错误,而不是
    插入
     INSERT INTO <your_table> (name, expiry_date) VALUES ('foo', DATE_ADD(CURRENT_TIMESTAMP,INTERVAL 7 DAY))
    
    SELECT NOW()+INTERVAL 14 DAY