MySQL如何启用 explicit_defaults_for_timestamp?
MySQL 是一个广泛使用的关系型数据库管理系统。在 MySQL 中,我们可以通过开启 explicit_defaults_for_timestamp 变量来设定 timestamp 类型列在插入或更新时的默认值。下面介绍如何启用 explicit_defaults_for_timestamp。
阅读更多:MySQL 教程
步骤一:修改 my.cnf 文件
首先需要修改 MySQL 配置文件 my.cnf,打开该文件并找到 [mysqld] 配置节,添加以下内容:
[mysqld]
explicit_defaults_for_timestamp=ON
修改完成后保存文件并重启 MySQL 服务。如果 MySQL 是通过二进制文件启动的,则需要使用以下命令来启动:
sudo mysqld --explicit_defaults_for_timestamp=ON
步骤二:验证是否启用了 explicit_defaults_for_timestamp
我们可以通过以下命令来查看 MySQL 是否启用了 explicit_defaults_for_timestamp 变量:
SHOW VARIABLES LIKE 'explicit_defaults_for_timestamp';
如果输出结果为以下内容,则说明已经成功启用了该变量:
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| explicit_defaults_for_timestamp | ON |
+--------------------------------+-------+
示例
我们可以使用以下 SQL 语句来创建一个包含 timestamp 类型列的表:
CREATE TABLE test (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
在上述语句中,我们使用了 DEFAULT CURRENT_TIMESTAMP 和 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 语句将 created_at 和 updated_at 列设定为 timestamp 类型,并设置了默认值。
我们可以将数据插入到 test 表中并查看插入的结果:
INSERT INTO test (name) VALUES ('Alice'), ('Bob'), ('Charlie');
SELECT * FROM test;
输出结果如下:
+----+--------+---------------------+---------------------+
| id | name | created_at | updated_at |
+----+--------+---------------------+---------------------+
| 1 | Alice | 2021-08-25 06:24:10 | 2021-08-25 06:24:10 |
| 2 | Bob | 2021-08-25 06:24:10 | 2021-08-25 06:24:10 |
| 3 | Charlie| 2021-08-25 06:24:10 | 2021-08-25 06:24:10 |
+----+--------+---------------------+---------------------+
我们可以看到在插入数据时,created_at 和 updated_at 列的默认值均为当前时间。
总结
通过修改 my.cnf 文件,并启用 explicit_defaults_for_timestamp 变量,我们可以在 MySQL 中设定 timestamp 类型列的默认值。这样会使得数据插入和更新操作更加方便。注意,实际运行环境中,需要根据具体需求来决定是否启用该选项。