我的数据库表中有两列,第一列是自动递增的ID。在第二个我希望镜像的ID。 (我知道这听起来像设计错误,但我确实需要它)
是否可以这样配置?
答案 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。