SSブログ

MySQL timestamp型の値を自動更新するためのcreate文 [MySQL]

DEFAULT CURRENT_TIMESTAMPを使用します。

create table sample(
 :
create_date timestamp DEFAULT CURRENT_TIMESTAMP COMMNET '作成日時',
update_date timestamp DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新日時'
);

この構文で間違いないのですが、なぜかバージョン5.1だと以下のエラーメッセージ。
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

「there can be only one TIMESTAMP column with CURRENT_TIMESTAMP」
ひとつのTIMESTAMPカラムにしかCURRENT_TIMESTAMP使用できない???

いろいろ調べるとMySQLの方言だとか…
これだと使い方が限られるので、yumを使って5.6にバージョンアップ。
(この作業も一苦労でした)


同じSQLを実行したところ問題なくテーブル作成できました。
show create table sample;

| sample | CREATE TABLE `sample` (
 :
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日',
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日',
 :

MySQLのtimestamp(ちょっとERMasterもあり) [MySQL]

テーブルに作成日時や更新日時を持たせるために、timestamp型を使ったのですが大はまり。

CREATE TABLE  XXX(
CREATE_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);

これを実行したところ、
Error Code: 1293. Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause    0.016 sec

CURRENT_TIMESTAMPをデフォルトとして利用できるのは、1テーブル内では1カラムだけとのこと。

とりあえず動作確認のため、 手作業でDDL分を修正。

CREATE TABLE  XXX(
CREATE_DATE TIMESTAMP DEFAULT 0 NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);

これで無事成功。

そもそもEclipse+ERMasterを使っているので、モデルでCREATE_DATEカラムの初期値を0に修正して、DDLファイルをエクスポートし、実行した。

Error Code: 1067. Invalid default value for 'CREATE_DATE'    0.000 sec

あれ、今度は別のエラーが発生。
自動生成したDDLをよくよくみたら、デフォルト0が文字列扱いに変換されてた。

CREATE TABLE  XXX(
CREATE_DATE TIMESTAMP DEFAULT '0' NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);

ERMasterでtimestamp型の初期値は'0000-00-00 00:00:00'にしないとダメでした。


こちらが最終系

CREATE TABLE XXX(
CREATE_DATE TIMESTAMP DEFAULT '0000-00-00 00:00:00' NOT NULL,
UPDATE_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL);

 

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

  • 作者: 西沢 夢路
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2012/05/01
  • メディア: 大型本

 


JavaからMySQLへの接続でエラー [MySQL]

昨日まで、DBUnitを実行できていたEclipse+外部MySQL環境で、突然接続エラーが発生した。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)


調べてみたら、MySQLデーモン(LINUX環境です)が起動していない。
MySQL稼働サーバは本日メンテナンス日で早朝にOSリブート後、MySQLデーモンを起動していなかったため。

MySQL rootのパスワードを忘れた! [MySQL]

世の中、どこにいってもセキュリティが厳しくなり、システム開発に携わる身として、IDとパスワードに特に気をつけています。
ところがそれが裏目に出て、IDはともかくパスワードを失念することもしばしばあります。

変更3世代分は同じものを許さんとか、英数字だけでなく記号もいれろとか、とても覚え切れません。

今回は社内システムで使用しているMySQLのrootパスワードを失念した際の、作業について書きます。

業務に必要なIDとパスワードはちゃんと認識しているのですが、めったに使用しないrootでいざアクセスしようとしたところ、一向につながる気配なし。

そこで思い切って、パスワードのリセットを実行することにしました。

まずは起動しているMySQLプロセスの停止
/etc/rc.d/init.d/mysql stop
※ 管理している環境は、rc.d自動起動なので、このような停止方法です。
  自動起動を設定していない方は、別の方法で対応願います。

つぎにセーフモードでの起動
/usr/local/mysql/bin/mysqld_safe --user=root --skip-grant-tables
※ mysqld_safeのインストール先は、/usr/binの場合もあります。

続いて、パスワードの変更です。
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3365 to server version: 4.1.12-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use mysql;
Database changed
mysql> select host, User, Password from user;
+----------------+---------------+--------------------+
| host           | User          | Password                                  |
+----------------+---------------+--------------------+
| localhost      | root          | *1174880A817A
 :

mysql> update user set password=password('newpassword')
 where user='root' and host='localhost';
 :

mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)

mysql> exit
Bye

MySQL再起動して完了です。
/etc/rc.d/init.d/mysql stop
/etc/rc.d/init.d/mysql start


実践した結果を公開していますが、本手順をお試しになった結果、不具合が発生しても一切の保証、責任は負いかねます。自己責任の元にお試しください。



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。