2017-11-05 18 views
2

よりも大きければ、私はorderedDate列を設定したnullまたは0000-00-00mysqlのチェック日付が0000-00-00

許可しないように、私のorderedDate列(date型を使用して)をしたいと思いますnullではないが、挿入時に挿入するとき

INSERT INTO Purchase(custName, price) 
VALUES('Max Wong', 10.00) 

注文日は0000-00-00です。私はこれが他の値が与えられていないときのデフォルト値であると仮定します。

私も

ALTER TABLE Purchase 
ADD CHECK (orderedDate > '0000-00-00'); 

試してみた(またorderedDate> 0000-00-00とorderedDateを> 0)

そして私は

SET mysql_mode = 'NO_ZERO_DATE' 

しかし、それを試して読んでうまくいかなかった。

私はオンラインで見ているときにたくさんのPHPの提案を見ましたが、SQLを使用する必要があります。

+0

..私は「標準」日时:あなたのビジネスに先行しても1ですべてゼロの日付を置き換えるために、クエリを実行すると思います。 '1970-01-01'のようにします...そして、その列をデフォルトの' CURRENT_TIMESTAMP'かそれに類するものとしてマークしてください。これが完了したら..単に '日付間の日付(NOW())と日付(1970-01-01)' – Zak

+0

を使うことができます。チェック制約として働くMySQLでトリガーを使う方法:https://stackoverflow.com/questions/9734920/can-a-mysql-trigger-simulate-a-check-constraint –

答えて

2

MySQLはCHECK制約をサポートしていません。それらを解析するので、エラーは発生しませんが、それらを保存したり強制したりすることはありません。

NO_ZERO_DATE SQLモードを有効にすると、0000-00-00を使用すると、MySQLではエラーではなく警告が表示されます。

NO_ZERO_DATEモード strictモードを有効にすると、エラーが発生します。

このモードは、MySQL 5.7からのデフォルトです。詳細については

:それは私だったらhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html