web-dev-qa-db-ja.com

MySQLはデフォルトIDUUIDを設定しました

idフィールドを持つデータベースにテーブルを作成しようとしています。このフィールドにはデフォルトでUUIDが入力されます。

私は次のようなことを試しました:

CREATE TABLE FOO (
  id CHAR(36) PRIMARY KEY DEFAULT uuid()
);

どうぞよろしくお願いいたします。

6
Doghouse308

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()値に変更されます。

11
fyrye

タイプとしてbinary(16)を使用する場合、デフォルトを次のように設定できます。

unhex(replace(uuid(),'-',''))
0
ravindu1024