私はそれに5列のMYSQLテーブルがあります:
id bigint
name varchar
description varchar
slug
256ビットハッシュの名前+記述としてslugの値を自動的に生成するMySQLを取得できますか?
私は現在、それを保存する前にスラッグのSHA256値を生成するためにPHPを使用しています。
自動では、スラッグフィールドのデフォルト値を変更することが可能かどうかを見ることができます。計算フィールドは名前+説明のsha256です。
私はすでに挿入操作の一部として作成する方法を知っています。
回答:
回答№1は4MySQL 5.7のサポート 生成された列 式を定義すると、挿入または更新するすべての行に対して自動的に更新されます。
CREATE TABLE IF NOT EXISTS MyTable (
id int NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
description varchar(50) NOT NULL,
slug varchar(64) NOT NULL AS (SHA2(CONCAT(name, description), 256) STORED,
PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
以前のバージョンのMySQLを使用している場合は、 トリガー:
CREATE TRIGGER MySlugIns BEFORE INSERT ON MyTable
FOR EACH ROW SET slug = SHA2(CONCAT(name, description));
CREATE TRIGGER MySlugUpd BEFORE UPDATE ON MyTable
FOR EACH ROW SET slug = SHA2(CONCAT(name, description), 256);
回答№2については2
MySQLの使用 CONCAT()
2つの値を組み合わせる SHA2()
256ビットのハッシュを生成する。
CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` varchar(50) NOT NULL,
`slug` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `mytable` (`name`,`description`,`slug`)
VALUES ("Fred","A Person",SHA2(CONCAT(`name`,`description`),256));
SELECT * FROM `mytable`
出力:
COLUMN VALUE
id 1
name Fred
description A Person
slug ea76b5b09b0e004781b569f88fc8434fe25ae3ad17807904cfb975a3be71bd89
試着する SQLfiddle.