ここでかなり簡単な質問です。これは機能するはずですが、機能しません。なぜできないのですか?
CREATE TABLE INVOICE(
INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
サポートされていないため機能しません
DEFAULT
句は、列のデフォルト値を指定します。 1つの例外を除いて、デフォルト値は定数でなければなりません。関数または式にすることはできません。これは、たとえば、日付列のデフォルトをNOW()
やCURRENT_DATE
などの関数の値に設定できないことを意味します。例外は、TIMESTAMP
列のデフォルトとしてCURRENT_TIMESTAMP
を指定できることです
日付列を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 ;
create table the_easy_way(
capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
capture_dt DATE AS (DATE(capture_ts))
)
(MySQL 5.7)
他の回答が正しく注記しているように、動的関数をデフォルト値として使用することはできません。 TIMESTAMP
をCURRENT_TIMESTAMP
属性とともに使用できますが、これは常に可能とは限りません。たとえば、creationおよびupdatedタイムスタンプ。2番目に許可されているTIMESTAMP
列のみが必要です。
この場合、 代わりにトリガーを使用 。
----- 2016-07-04 MariaDB 10.2.1-リリースノート------
式を使用した DEFAULTのサポート ( MDEV-10134 )。
----- 2018-10-22 8.0.13一般出荷-------
MySQLは、データ型仕様のデフォルト値として式の使用をサポートするようになりました。これには、 [〜#〜] blob [〜#〜] 、 のデフォルト値としての式の使用が含まれます[〜#〜] text [〜#〜] 、ジオメトリ、および [〜#〜] json [〜#〜] データ型。以前はデフォルト値をまったく割り当てることができませんでした。詳細については、 データ型のデフォルト値 を参照してください。