MySQL 时间默认为当前时间

介绍

MySQL是一个流行的关系型数据库管理系统,常用于存储和管理大量的数据。在MySQL中,时间是一种常见的数据类型,用于存储和操作日期和时间。当我们向数据库插入数据时,经常需要指定时间的默认值。本文将介绍在MySQL中如何设置时间字段的默认值为当前时间,并提供相应的代码示例。

默认当前时间

MySQL提供了多种方法来设置时间字段的默认值为当前时间。下面列出了三种常见的方法:

方法一:使用DEFAULT CURRENT_TIMESTAMP

使用DEFAULT CURRENT_TIMESTAMP可以将时间字段的默认值设置为当前时间。具体示例如下:

CREATE TABLE example (
  id INT PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

在上述示例中,created_at字段的默认值为当前时间。

方法二:使用ON UPDATE CURRENT_TIMESTAMP

使用ON UPDATE CURRENT_TIMESTAMP可以在更新操作时自动更新时间字段的值。具体示例如下:

CREATE TABLE example (
  id INT PRIMARY KEY AUTO_INCREMENT,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

在上述示例中,updated_at字段的默认值为当前时间,并在更新操作时自动更新为当前时间。

方法三:使用触发器

使用触发器是一种更为灵活的方法,可以根据具体需求来设置时间字段的默认值为当前时间。具体示例如下:

CREATE TABLE example (
  id INT PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME
);

DELIMITER //
CREATE TRIGGER set_created_at
BEFORE INSERT ON example
FOR EACH ROW
BEGIN
  SET NEW.created_at = NOW();
END //
DELIMITER ;

在上述示例中,创建了一个名为set_created_at的触发器,在插入操作之前设置created_at字段的值为当前时间。

示例代码

下面是一个完整的示例代码,演示了如何在MySQL中设置时间字段的默认值为当前时间:

CREATE DATABASE IF NOT EXISTS sample;
USE sample;

CREATE TABLE example1 (
  id INT PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE example2 (
  id INT PRIMARY KEY AUTO_INCREMENT,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE example3 (
  id INT PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME
);

DELIMITER //
CREATE TRIGGER set_created_at
BEFORE INSERT ON example3
FOR EACH ROW
BEGIN
  SET NEW.created_at = NOW();
END //
DELIMITER ;

INSERT INTO example1 () VALUES ();
INSERT INTO example2 () VALUES ();
INSERT INTO example3 () VALUES ();

在上述示例代码中,我们首先创建了一个名为sample的数据库,并在该数据库中创建了三个示例表example1example2example3。其中,example1example2使用了方法一和方法二来设置时间字段的默认值为当前时间,而example3使用了触发器来实现相同的功能。最后,我们向这三个表中插入了一条数据。

类图

下面是示例代码中三个表的类图:

classDiagram
    class example1 {
      id: INT
      created_at: DATETIME
    }
    class example2 {
      id: INT
      updated_at: DATETIME
    }
    class example3 {
      id: INT
      created_at: DATETIME
    }
    example1 "1" -- "1" example2
    example1 "1" -- "1" example3

在上述类图中,example1example2example3分别代表示例表中的三个表,每个表都有一个整型的id字段和一个日期时间型的时间字段。

状态图

下面是示例代码中插入数据时的状态图:

stateDiagram
  [*] --> InsertData
  InsertData --> example1
  InsertData --> example2
  InsertData --> example3

在上述状态图中,初始状态为[*],表示待插入数据。插入数据时,数据将被分别插入到example1example2example3表中。

总结

本文介绍了在MySQL中如何设置时间字段的默认值为当前时间的三种常见方法,并提供了相应的代码示例。通过使用DEFAULT CURRENT_TIMESTAMP、`ON UPDATE