2

次のような列を持つテーブルを作成しようとしています

model_year smallint(4) not null default YEAR(CURRENT_DATE)

しかし、エラーがあります (無効なデフォルト値)。現在の年の model_year のデフォルト値を設定するにはどうすればよいですか?

4

2 に答える 2

3

MySQL doc ページから(私の太字):

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

行を挿入するときに実際の値を指定する必要があると思います。


それをしたくない場合、NULL を許可し、別のプロセスを実行してデータベースを定期的にスイープすることができます。

update table mytable set model_year = year(current_date) where model_year is null

しかし、これは面倒であり、列に NULL が存在する期間があるため、起動するのはかなり危険です。

これは、すべてのクエリで考慮に入れる必要があるものであり、次のような醜さにつながります。

select a, b, model_year from mytable where model_year is not null
union all
select a, b, year(current_date) from mytable where model_year is null

私は自分でデフォルト以外のルートに行きます。

于 2011-04-16T13:43:15.060 に答える
0

ストアドプロシージャが必要になります(申し訳ありませんが、MySQLの構文はわかりません)。モデル年列でNULLを検索し、モデル年を設定する同一のINSERTまたはUPDATEで置き換えるINSERTまたはUPDATEでトリガーするストアドプロシージャを設定できます。

于 2011-04-16T13:54:02.153 に答える