Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е да се създаде колона с UNIX_TIMESTAMP по подразбиране в MySQL?

Начинът, по който MySQL реализира TIMESTAMP тип данни, той всъщност съхранява времето на епохата в базата данни. Така че можете просто да използвате TIMESTAMP колона със стойност по подразбиране CURRENT_TIMESTAMP и приложете UNIX_TIMESTAMP() към него, ако искате да го покажете като 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)

Въпреки това, ако наистина искате типът данни на колоната да бъде 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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Променете паролата за mysql в контейнера на Docker

  2. SQLSTATE[HY000] [2002] Неуспешен опит за свързване.. - При опит за свързване от локален към отдалечен сървър

  3. Не мога да намеря входна стойност тип=изображение в $_POST

  4. Android + MySQL с помощта на com.mysql.jdbc.Driver

  5. въпрос за разделител на mysql