我正在try 这样做,但似乎MySQL不允许我这样做.这个问题有解决方案吗?或者我是否应该在插入查询中始终包含该函数?

CREATE TABLE foo(
  created INT NOT NULL DEFAULT UNIX_TIMESTAMP()
)

我知道时间戳类型接受当前的时间戳默认值,但我的客户坚持在数据库中使用纪元时间.

推荐答案

MySQL实现TIMESTAMP数据类型的方式实际上是在数据库中存储纪元时间.因此,如果您希望将其显示为int,则可以只使用TIMESTAMP列,默认值为CURRENT_TIMESTAMP,并对其应用UNIX_TIMESTAMP():

CREATE TABLE foo(
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

insert into foo values (current_Date()),(now());

select unix_timestamp(created) from foo;
+-------------------------+
| unix_timestamp(created) |
+-------------------------+
|              1300248000 |
|              1300306959 |
+-------------------------+
2 rows in set (0.00 sec)

但是,如果您真的希望列的数据类型为INT,可以使用R.Bemrose的建议并通过触发器进行设置:

CREATE TABLE foo(
  created INT NULL
);

delimiter $$

create trigger tr_b_ins_foo before insert on foo for each row
begin
  if (new.created is null)
  then
    set new.created = unix_timestamp();
  end if;
end $$

delimiter ;


insert into foo values (unix_timestamp(current_Date())), (null);

select created from foo;
+------------+
| created    |
+------------+
| 1300248000 |
| 1300306995 |
+------------+
2 rows in set (0.00 sec)

Database相关问答推荐

如何避免在模式更改时重新同步微服务数据库之间的整个表?

为什么Hibernate会为@JoinTable的双向@OneToMany关系生成一个复杂的子查询?

TYPO3 OOPS,出现错误!编码:202402180809040864ba5c

Mongo DB使用一对多关系离开JOIN

数据库术语中的relation关系是什么意思?

如何在我的 Rails 应用程序中避免竞争条件?

外键可以作为主键吗?

用于 sql server 的免费国家、城市数据库

通过生成迁移将索引:唯一添加到 ruby​​ on rails 中的列

我应该不断地open()和close() SQL 数据库还是让它保持打开状态?

SOA 和共享数据库

customer客户表的数据库 struct ,每个客户有很多订单,每个订单有很多商品

使用多个数据库模式的 JPA

MySQL:LAST_INSERT_ID() 返回 0

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

如何在 Windows 中将用户添加到 PostgreSQL?

唯一(多列)并且在一列中为空

如何将特定的、可变的 order订单保存到数据库中

LevelDB 支持 java 吗?

最佳事件采购数据库策略