在另一列

时间:2017-11-08 12:16:23

标签: mysql sql database

我的数据库表中有两列,第一列是自动递增的ID。在第二个我希望镜像的ID。 (我知道这听起来像设计错误,但我确实需要它)

是否可以这样配置?

3 个答案:

答案 0 :(得分:2)

如果您使用的是MySql 5.7.6或更高版本,则可以将第二个ID定义为虚拟列,如下所示:

CREATE TABLE my_table (
    id INT UNSIGNED AUTO_INCREMENT,
    id_mirrored INT UNSIGNED AS (id)
);

这样,id_mirrored列实际上并不存储在您的数据库中,而是在读取行时进行评估。

如果您使用的是早期版本的MySql,则创建视图可能是您的最佳选择。视图基本上是虚拟表。

CREATE VIEW my_view AS 
    SELECT
        t.id AS id,
        t.id AS id_mirrored
    FROM my_table t

第三个选项是将id_mirrored定义为实际列,并添加触发器以赋予其值。在其他答案中已经描述了这样做的方法。

答案 1 :(得分:1)

使用TRIGGER

DELIMITER |:    // switch delimiter to prevent execution of  ;

CREATE TRIGGER `copy_id2c_name` BEFORE INSERT ON tb_name
FOR EACH ROW BEGIN
SELECT AUTO_INCREMENT INTO @AI FROM information_schema.tables WHERE table_schema = 'db_name' and table_name = 'tb_name';
set NEW.c_name = @AI;
END;

|:   // execute code
DELIMITER ;   // switch back original delimiter

答案 2 :(得分:0)

如果使用存储过程,可以使用像LAST_INSERT_ID()这样的smth。