sql >> Base de Datos >  >> RDS >> Mysql

¿Es posible crear una columna con un valor predeterminado de UNIX_TIMESTAMP en MySQL?

La forma en que MySQL implementa el TIMESTAMP tipo de datos, en realidad está almacenando el tiempo de época en la base de datos. Así que podrías usar un TIMESTAMP columna con un valor predeterminado de CURRENT_TIMESTAMP y aplique el UNIX_TIMESTAMP() a él si desea mostrarlo como un int:

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)

Sin embargo, si realmente desea que el tipo de datos de la columna sea INT , puede usar la sugerencia de R. Bemrose y configurarla a través del disparador:

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)