Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es möglich, eine Spalte mit einem UNIX_TIMESTAMP-Standard in MySQL zu erstellen?

Die Art und Weise, wie MySQL den TIMESTAMP implementiert Datentyp, es speichert tatsächlich die Epochenzeit in der Datenbank. Sie könnten also einfach einen TIMESTAMP verwenden Spalte mit dem Standardwert CURRENT_TIMESTAMP und wenden Sie UNIX_TIMESTAMP() an dazu, wenn Sie es als int anzeigen möchten:

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)

Wenn Sie jedoch wirklich möchten, dass der Datentyp der Spalte INT ist , können Sie den Vorschlag von R. Bemrose verwenden und per Trigger setzen:

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)