两个自动递增列或自动递增列,而另一列中的值相同 [英] Two autoincrements columns or autoincrement and same value in other column

查看:86
本文介绍了两个自动递增列或自动递增列,而另一列中的值相同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要表中的两列在插入时具有相同的值.有什么办法可以从数据库端做到这一点?

I need two columns in table that would have same value on insert. Is there any way to do it from database side?

推荐答案

因此,您想让一列使用auto_increment功能,但要使同一表中的另一列也具有相同的值?

So you want to let one column use the auto_increment feature, but make another column in the same table also have the same value?

我想不出您需要此功能的原因.也许您可以解释您要实现的目标,而我可以建议其他解决方案?

I can't think of a reason you would need this feature. Perhaps you could explain what you're trying to accomplish, and I can suggest a different solution?

触发器对此不起作用.这是鸡和蛋的问题:

A trigger won't work for this. It's a chicken-and-egg problem:

  • 您不能在AFTER触发器中更改任何列的值.
  • 但是执行BEFORE触发器时,尚未设置自动增量值.
  • You can't change any column's value in an AFTER trigger.
  • But the auto-increment value isn't set yet when a BEFORE trigger executes.

使用MySQL 5.7 GENERATED列也将不起作用:

It also won't work to use a MySQL 5.7 GENERATED column:

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT GENERATED ALWAYS AS (id)
);

ERROR 3109 (HY000): Generated column 'why_would_you_want_this' 
cannot refer to auto-increment column.

您不能在单个SQL语句中执行此操作.您必须先INSERT该行,然后立即执行UPDATE将第二列设置为相同的值.

You can't do it in a single SQL statement. You have to INSERT the row, and then immediately do an UPDATE to set your second column to the same value.

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT
);

INSERT INTO MyTable () VALUES ();

UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID() 
WHERE id = LAST_INSERT_ID();

您还可以使用AUTO_INCREMENT以外的其他机制(例如,Memcached增量键)来生成ID值.然后,您可以在两列中插入新值:

You could alternatively generate the ID value using some other mechanism besides AUTO_INCREMENT (for example a Memcached incrementing key). Then you could insert the new value in both columns:

INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);

这篇关于两个自动递增列或自动递增列,而另一列中的值相同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆