Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile creare una colonna con un valore predefinito UNIX_TIMESTAMP in MySQL?

Il modo in cui MySQL implementa il TIMESTAMP tipo di dati, sta effettivamente memorizzando l'epoca nel database. Quindi potresti semplicemente usare un TIMESTAMP colonna con un valore predefinito di CURRENT_TIMESTAMP e applica il UNIX_TIMESTAMP() ad esso se vuoi visualizzarlo come 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)

Tuttavia, se vuoi davvero che il tipo di dati della colonna sia INT , puoi utilizzare il suggerimento di R. Bemrose e impostarlo tramite trigger:

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)