sql >> Database >  >> RDS >> Mysql

Hoe stel je een standaardwaarde in voor een MySQL Datetime-kolom?

BELANGRIJKE BEWERKING: Het is nu mogelijk om dit te bereiken met DATETIME-velden sinds MySQL 5.6.5 , bekijk de andere post hieronder...

Eerdere versies kunnen dat niet met DATETIME...

Maar je kunt het doen met TIMESTAMP:

mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type        | Null | Key | Default           | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str   | varchar(32) | YES  |     | NULL              |       | 
| ts    | timestamp   | NO   |     | CURRENT_TIMESTAMP |       | 
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)

mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+---------------------+
| str  | ts                  |
+------+---------------------+
| demo | 2008-10-03 22:59:52 | 
+------+---------------------+
1 row in set (0.00 sec)

mysql>

WAARSCHUWING: ALS u een kolom definieert met CURRENT_TIMESTAMP AAN als standaard, moet u ALTIJD een waarde voor deze kolom specificeren, anders zal de waarde zichzelf automatisch resetten naar "now()" bij update. Dit betekent dat als u niet wilt dat de waarde verandert, uw UPDATE-instructie "[uw kolomnaam] =[uw kolomnaam]" (of een andere waarde) moet bevatten, anders wordt de waarde "now()". Vreemd, maar waar. Ik gebruik 5.5.56-MariaDB



  1. PLAFOND() Voorbeelden in SQL Server

  2. Op diepte gebaseerde boom genereren uit hiërarchische gegevens in MySQL (geen CTE's)

  3. Omzeilen van fouten die niet overeenkomen met architectuur bij gebruik van Microsoft Access

  4. Converteer alle records in postgre naar Titlecase, eerste letter hoofdletters