2013-12-09 5 views

答えて

39

それは

DEFAULT句をサポートしていないので、それは動作しませんが、列のデフォルト値を指定します。 1つの例外を除き、デフォルト値は定数でなければなりません。関数または式にすることはできません。これは、たとえば、日付列のデフォルトをNOW()またはCURRENT_DATEなどの関数の値に設定できないことを意味します。例外は、デフォルト値として、動的機能を使用することはできません、他の答えが正しく指摘するとして、あなたはTIMESTAMP

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

+0

タイムスタンプ値を日付のみにフォーマットすることはできますか? – inControl

+0

@inControl:yep、 'DATE_FORMAT'を使用して – zerkms

+7

それは2016年であり、正に、これがまだ成立しているという事実はばかげている。私は定数同義語の全理由が非定型表現が禁止されている場所でそれらを許可することだと思った。 – Dan

2

のデフォルトとしてCURRENT_TIMESTAMPを指定することができるということです。あなたはCURRENT_TIMESTAMP属性でTIMESTAMPを使用することができますが、これは常に可能ではない、たとえばあなたが作成更新タイムスタンプの両方を維持したい場合、あなたは第二のためにのみ許可されTIMESTAMP列を必要とするだろう。

この場合、use a trigger insteadです。

+1

自動タイムスタンプの数の制限が解除されました(http: /dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html)。 –

+0

追加してくれてありがとうございました。それは気づいていませんでした。ほとんどのウェブホスティングはまだ5.1または5.5になっていますので、心に留めておいてください。 –

+0

MariaDB 10.2.1は 'DEFAULT(expression)'を許可します。 [Create table](https://mariadb.com/kb/en/mariadb/create-table/)を参照してください。 –

18

あなたの日付列をNOT NULLとして宣言しますが、デフォルトはありません。次に、このトリガーを追加します。

USE `ddb`; 
DELIMITER $$ 
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW 
if (isnull(new.query_date)) then 
set new.query_date=curdate(); 
end if; 
$$ 
delimiter ; 
+0

この作業をするためにフィールドをNULLに設定しなければなりませんでした。そうでない場合は、代わりに '0000-00-00'が挿入されました。 MySQL v5.6.12。 – lolbas

関連する問題