Mám tabuľku MYSQL s 5 stĺpcami v ňom:
id bigint
name varchar
description varchar
slug
Môžem MySQL automaticky vygenerovať hodnotu slug ako 256 Bit Hash názov + popis?
Teraz používam PHP na vytvorenie hodnoty SHA256 slimáka pred uložením.
Automatické, myslím, že je možné zmeniť predvolenú hodnotu poľa slimáka, aby bolo vypočítané pole, ktoré je "sha256 názvu + popisu".
Už viem, ako ju vytvoriť ako súčasť operácie vkladania.
odpovede:
4 pre odpoveď č. 1MySQL 5.7 podporuje generované stĺpce takže môžete definovať výraz a automaticky sa aktualizuje pre každý riadok, ktorý vložíte alebo aktualizujete.
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;
Ak používate staršiu verziu MySQL, môžete to urobiť Triggers:
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 pre odpoveď č. 2
Použite MySQL CONCAT()
skombinovať dve hodnoty a SHA2()
generovať 256-bitový hash.
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`
VÝKON:
COLUMN VALUE
id 1
name Fred
description A Person
slug ea76b5b09b0e004781b569f88fc8434fe25ae3ad17807904cfb975a3be71bd89
Vyskúšaj si to SQLfiddle.