/ / Hash dvoch stĺpcov v mysql - mysql

Hash dvoch stĺpcov v mysql - mysql

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ď č. 1

MySQL 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.