如何在第3列中显示2列mysql复合主键值作为默认值?

时间:2012-05-10 04:19:40

标签: mysql default composite-primary-key

我找不到任何地方(我可能不会问正确的问题)。有人请指出我正确的方向。

我在MySQL中使用2列复合主键。 我想在同一个表和另一个表的第3列中将该值显示为默认值。

Col_1 value = ABC, 
Col_2 value = 123, 
PK          = ABC123, 

Col_3 default value = ABC123 

有人能解释如何做到吗?

如果可能的话,我宁愿不使用触发器或插入语句来执行此操作。

谢谢,

泰德

3 个答案:

答案 0 :(得分:1)

确实需要实际位于列中的值的情况并不多。通过在用于获取数据的select语句中创建值,或者在php,ruby或用于显示数据的任何代码中,您可以多次获得相同的效果。

例如:

SELECT Col_1, Col_2, CONCAT(NEW.Col_1,NEW.Col_2) as Col_3
FROM my_table;

这将解决您的问题,同时避免触发器和其他奇特的SQL技巧。

我认为这是一种更好的方法,以防有人想要更改Col_1或Col_2的值 - 如果他们更改其中一个值,那么保持两者组合的列也必须更新。它使事情变得比他们需要的更复杂。

如果您有某些理由必须在数据库表中,请告诉我们。

答案 1 :(得分:0)

使用触发器。我还没有测试过这个,但是你值得尝试。

CREATE TRIGGER `auto_default` 
BEFORE INSERT ON `table` FOR EACH ROW 
SET NEW.Col_3=CONCAT(NEW.Col_1,NEW.Col_2);

答案 2 :(得分:0)

我没有碰到过这个。可能你必须使用一个触发器(你表明这不是你的选择),或者必须将它构建到插入表中的应用程序中。

当我浏览MYSQL的材料时,它清楚地表明“默认值必须是常量;它不能是函数或表达式”。

供参考“http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html”

对于使用触发器,Jonas吸收的触发器应该起作用..