簡単に:
MySQL の奇妙な動作が発生しています。追加したくないのに更新時に CURRENT_TIMESTAMP属性が追加されています。なぜこれが起こっているのかを知りたいです-それはMySQLサーバーの問題ですか、それとも私が使用しているMySQL Workbench(v5.2.38)の問題ですか。
詳細:
EER ダイアグラムを使用してデータベース構造をモデル化しました。テーブルの例を以下に示します。
CREATE TABLE IF NOT EXISTS `privilege` (
`id` INT NOT NULL ,
`name` VARCHAR(64) NOT NULL COMMENT 'privilege name (just a label)' ,
`created_at` TIMESTAMP NOT NULL COMMENT 'when the privilege was created' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
上記のスクリプト フラグメントは、WorkBench 内で[エクスポート] > [Forward Engineer SQL Create Script ] を使用して作成されます。ここではcreated_at列が重要です。これは NOT NULL であり、レコードが定義されるときにタイムスタンプに定義されるデフォルト値はありません。したがって、created_at を定義せずにレコードを挿入しようとすると、エラーが発生すると思います。
このスクリプトを MySQL サーバー内で実行して、構造全体を作成します。そして、作成された構造は異なります - show create table privilegesは次を返します:
CREATE TABLE `privilege` (
`id` int(11) NOT NULL,
`name` varchar(64) NOT NULL COMMENT 'privilege name (just a label)',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT 'when the privilege was created',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
「on update current_timestamp」はどこから来たのですか? 私が適切なオプションを選択しなかったことは 100% 確信しているので、MySQL は彼が求めていないものを作成するべきではありません。
なぜこれらの条項が追加されたのか、誰にも分かりますか?