mysql explicit_defaults_for_timestampパラメータの詳細

1614 ワード

mysqlには、1行のデータの一部の列が更新され、この行にtimestampタイプの列がある場合、このtimestamp列のデータも、更新操作が発生した時点に自動的に更新されます.この操作はexplicit_defaults_for_timestampこの変更制御の
mysql> create table t(x int ,y timestamp);  --       timestamp   
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t(x) values(1);  --   x 
Query OK, 1 row affected (0.00 sec)

mysql> select * from t; -- timestamp      
+------+---------------------+
| x    | y                   |
+------+---------------------+
|    1 | 2017-06-07 13:48:56 |
+------+---------------------+
row in set (0.00 sec)

mysql> update t set x=2 where x=1; -- update  timestamp        
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t;
+------+---------------------+
| x    | y                   |
+------+---------------------+
|    2 | 2017-06-07 13:49:21 |
+------+---------------------+
row in set (0.00 sec)

explicit_defaults_for_timestampこの変更はonに設定されています.timestamp列の値に指定が表示される場合、このデフォルトの動作はオフになります.このクローズは、テーブル構造が変更されたため、作成したテーブル1、explicit_にはパラメータ値の変更が影響しないため、クローズ後に作成したテーブルにのみ有効です.defaults_for_timestamp=off時テーブル構造
CREATE TABLE `t` (
  `x` int(11) DEFAULT NULL,
  `y` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- `y` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE

1、explicit_defaults_for_timestamp=on時表構造
CREATE TABLE `t6` (
  `x` int(11) DEFAULT NULL,
  `y` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- `y` timestamp NULL DEFAULT NULL