вы можете использовать виртуальный столбец, который автоматически генерирует контрольную сумму MD5 из вашего ROW, и хранилище находится в новом поле с уникальным индексом.
Примечание. Существует небольшая разница в синтаксисе между MySQL и MariaDB.
образец
Ваш стол
CREATE TABLE `mytable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Directory` varchar(128) DEFAULT NULL,
`IdentityReference` varchar(128) DEFAULT NULL,
`AccessControlType` varchar(128) DEFAULT NULL,
`FileSystemRights` varchar(128) DEFAULT NULL,
`IsInherited` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
добавить2 записи
MariaDB [chksum]> INSERT INTO `mytable` (`id`, `Directory`, `IdentityReference`, `AccessControlType`, `FileSystemRights`, `IsInherited`)
-> VALUES
-> (1, '/usr/local', 'yes', 'rwxrwxrwx', 'NO', 7),
-> (2, '/etc/var/log', 'yes', 'xxxxx', 'YES', 99);
Query OK, 2 rows affected (0.003 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [chksum]> select * from mytable;
+----+--------------+-------------------+-------------------+------------------+-------------+
| id | Directory | IdentityReference | AccessControlType | FileSystemRights | IsInherited |
+----+--------------+-------------------+-------------------+------------------+-------------+
| 1 | /usr/local | yes | rwxrwxrwx | NO | 7 |
| 2 | /etc/var/log | yes | xxxxx | YES | 99 |
+----+--------------+-------------------+-------------------+------------------+-------------+
2 rows in set (0.000 sec)
MariaDB [chksum]>
Измените таблицу, добавьте новое поле
MariaDB [chksum]> ALTER TABLE `mytable`
-> ADD COLUMN
-> `chksum` VARCHAR(32) AS (
-> MD5(
-> CONCAT( `DIRECTORY`,'-',
-> `IdentityReference`,'-',
-> `AccessControlType`,'-',
-> `FileSystemRights` ,'-',
-> `IsInherited`
-> )
-> )
-> ) PERSISTENT ,
-> ADD UNIQUE KEY `idx_chksum` (`chksum`);
Query OK, 2 rows affected (0.029 sec)
Records: 2 Duplicates: 0 Warnings: 0
просмотреть содержимое с новым полем
MariaDB [chksum]> select * from mytable;
+----+--------------+-------------------+-------------------+------------------+-------------+----------------------------------+
| id | Directory | IdentityReference | AccessControlType | FileSystemRights | IsInherited | chksum |
+----+--------------+-------------------+-------------------+------------------+-------------+----------------------------------+
| 1 | /usr/local | yes | rwxrwxrwx | NO | 7 | 5b812d391703099e6fea16f8a590891e |
| 2 | /etc/var/log | yes | xxxxx | YES | 99 | 99a5e08acb58b23618bdb9f40737e5cf |
+----+--------------+-------------------+-------------------+------------------+-------------+----------------------------------+
2 rows in set (0.002 sec)
MariaDB [chksum]>
вставить строку без дублирующего ключа
MariaDB [chksum]> INSERT INTO `mytable` (`id`, `Directory`, `IdentityReference`, `AccessControlType`, `FileSystemRights`, `IsInherited`)
-> VALUES
-> (NULL, '/usr/local/XXX', 'yes', 'rwxrwxrwx', 'NO', 7);
Query OK, 1 row affected (0.002 sec)
MariaDB [chksum]> INSERT INTO `mytable` (`id`, `Directory`, `IdentityReference`, `AccessControlType`, `FileSystemRights`, `IsInherited`)
-> VALUES
-> (NULL, '/usr/local', 'yes', 'rwxrwxrwx', 'NO', 7);
ERROR 1062 (23000): Duplicate entry '5b812d391703099e6fea16f8a590891e' for key 'idx_chksum'
MariaDB [chksum]>