web-dev-qa-db-ja.com

CURRENT_DATE / CURDATE()がデフォルトのDATE値として機能しない

ここでかなり簡単な質問です。これは機能するはずですが、機能しません。なぜできないのですか?

CREATE TABLE INVOICE(
   INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
32
inControl

サポートされていないため機能しません

DEFAULT句は、列のデフォルト値を指定します。 1つの例外を除いて、デフォルト値は定数でなければなりません。関数または式にすることはできません。これは、たとえば、日付列のデフォルトをNOW()CURRENT_DATEなどの関数の値に設定できないことを意味します。例外は、TIMESTAMP列のデフォルトとしてCURRENT_TIMESTAMPを指定できることです

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

53
zerkms

日付列を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 ;
21
user3630264
create table the_easy_way(
  capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  capture_dt DATE AS (DATE(capture_ts))
)

(MySQL 5.7)

4
Brian Purgert

他の回答が正しく注記しているように、動的関数をデフォルト値として使用することはできません。 TIMESTAMPCURRENT_TIMESTAMP属性とともに使用できますが、これは常に可能とは限りません。たとえば、creationおよびupdatedタイムスタンプ。2番目に許可されているTIMESTAMP列のみが必要です。

この場合、 代わりにトリガーを使用

2

----- 2016-07-04 MariaDB 10.2.1-リリースノート------

式を使用した DEFAULTのサポートMDEV-10134 )。

----- 2018-10-22 8.0.13一般出荷-------

MySQLは、データ型仕様のデフォルト値として式の使用をサポートするようになりました。これには、 [〜#〜] blob [〜#〜]のデフォルト値としての式の使用が含まれます[〜#〜] text [〜#〜] 、ジオメトリ、および [〜#〜] json [〜#〜] データ型。以前はデフォルト値をまったく割り当てることができませんでした。詳細については、 データ型のデフォルト値 を参照してください。

2
Rick James

これに応じて ドキュメント 、MySQL 8.0.13以降では、以下を指定できます。

CREATE TABLE INVOICE(
    INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)

残念ながら、今日現在、そのバージョンはまだリリースされていません。 here で最新のアップデートを確認できます。

0
Amos Long