id
フィールドを持つデータベースにテーブルを作成しようとしています。このフィールドにはデフォルトでUUIDが入力されます。
私は次のようなことを試しました:
CREATE TABLE FOO (
id CHAR(36) PRIMARY KEY DEFAULT uuid()
);
どうぞよろしくお願いいたします。
5.7以降のMySQLは、列のデフォルト値としての関数の使用をサポートしていません。
データ型指定のDEFAULTvalue句は、列のデフォルト値を示します。 1つの例外を除いて、デフォルト値は定数でなければなりません。 関数または式にすることはできません。
https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html
別の方法は、トリガーを使用して、目的のテーブルの_BEFORE INSERT
_を監視することです。
_DELIMITER ;;
CREATE TRIGGER `foo_before_insert`
BEFORE INSERT ON `foo` FOR EACH ROW
BEGIN
IF new.id IS NULL THEN
SET new.id = uuid();
END IF;
END;;
DELIMITER ;
_
これにより、明示的に定義されていない限り、INSERT
ステートメントのデフォルト値がuuid()
値に変更されます。
タイプとしてbinary(16)
を使用する場合、デフォルトを次のように設定できます。
unhex(replace(uuid(),'-',''))