1

テーブルに挿入されたすべてのレコードに一意のランダムな文字列を関連付けるトリガーを作成しようとしています。

これまでのところ、挿入前に、ハッシュを生成してテーブルに追加するトリガーを作成しました。ただし、この新しいハッシュがテーブルに対して一意であることを確認するにはどうすればよいのでしょうか。

これまでのところ、以下のトリガーがありますが、ご覧のとおり、一意の部分が欠落しています...

BEGIN
DECLARE newhash VARCHAR(255);
SELECT MD5(CONCAT(NOW(),RAND())) INTO newhash;
SET NEW.`hash` = newhash;
END
4

1 に答える 1

1

列はテーブル定義で一意である必要があり、それだけです。

いずれにせよ、md5(now || rand)が必要ですか?nowとrandの適切な実装では、重複する可能性はほとんどありませんが、now()の粒度があまりない場合、または乱数が適切な乱数でない場合は、特定の条件下で問題が発生する可能性があります。シナリオ。

UUID(MySQLがサポートしているようです: http://dev.mysql.com/doc/refman/5.0/en/)を使用するなど、この種のことには既製のスキームを使用することをお勧めします。miscellaneous-functions.html#function_uuid)。

于 2011-10-19T19:51:14.433 に答える