0

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

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

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

Col_3 default value = ABC123 

谁能解释如何做到这一点?

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

谢谢,

泰德

4

3 回答 3

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 的值——如果他们更改了其中一个值,那么包含两者组合的列也必须更新。它使事情变得比他们需要的更复杂。

如果您出于某种原因它们必须在数据库表中,请告诉我们。

于 2012-05-10T04:50:20.187 回答
0

使用触发器。我尚未对此进行测试,但值得您尝试。

CREATE TRIGGER `auto_default` 
BEFORE INSERT ON `table` FOR EACH ROW 
SET NEW.Col_3=CONCAT(NEW.Col_1,NEW.Col_2);
于 2012-05-10T04:39:37.807 回答
0

我没有遇到过这个。可能您将不得不使用触发器(您表示这不是您的选择)或者必须将其构建到执行 Insert into the table 的应用程序中。

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

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

对于使用触发器,乔纳斯建议的触发器应该可以工作..

于 2012-05-10T04:42:22.757 回答