mysql - 在mysql中创建复合索引

标签 mysql sql

我想在mysql中创建索引,这样 其中两列的值不能相同,但不同行中的值可以相同。

+-------------------+------------+-------+
| id                | value 1    |value 2| 
+-------------------+------------+-------+
| id                | 2          | 1     | 
| user_id           | 2          | 1     | 
| following_user_id | 2          | 2     | (value should never like this )
+-------------------+------------+-------+

这意味着不同行中的值可以相同,但不同列中的值不能相同。 我说的是值 1 和值 2。

最佳答案

您无法使用索引执行此操作,因为索引适用于不同的行,并且不会检查单行中的列。

您可以在其他数据库引擎中使用检查约束,但 MySQL 目前会忽略这一点。

使用触发器检查值并在值不正确时中止插入/更新。对于更新,您可以使用类似的内容

delimiter |
CREATE TRIGGER your_update_trigger BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
    IF NEW.value1 = NEW.value2 THEN 
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'An error occurred. Same IDs are not allowed';
    END IF;
END
|
delimiter ;

关于mysql - 在mysql中创建复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209597/

相关文章:

sql - 在 SQLite 中显示/更改工作目录

sql - 根据 T-Sql 中的日期范围求列总和

php - 如何进行良好的 SQL 搜索?

mysql - SQL 操作数应包含 1 列

mysql - 内连接仅返回第一个匹配的行

php - 如何用另一个替换 mysql 数据库中特定值的所有实例?

php - 如果未选中复选框,则从表中删除

sql - 如何插入到使用顺序GUID作为主键的表中?

php - 查询响应检查引用手册中的 'Function Name Parsing and Resolution' 部分

sql - 在设计 View 中打开查询时,MS Access不断崩溃