我在任何地方都找不到这个(我可能没有问正确的问题)。有人请指出我正确的方向。
我在 MySQL 中使用 2 列复合主键。我想将该值显示为同一表和另一个表中的第三列中的默认值。
Col_1 value = ABC,
Col_2 value = 123,
PK = ABC123,
Col_3 default value = ABC123
有人能解释如何做到这一点吗?
如果可能的话,我宁愿不使用触发器或插入语句来执行此操作。
谢谢
泰德
很多情况下,您真正需要值实际位于列中。通过在用于获取数据的 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的值 - 如果他们更改其中一个值,那么保存两者组合的列也必须更新。它使事情变得比他们需要的更复杂。
如果您有某种原因,它们必须在数据库表中,请告诉我们。
使用触发器。我还没有测试过这个,但值得你尝试。
CREATE TRIGGER `auto_default`
BEFORE INSERT ON `table` FOR EACH ROW
SET NEW.Col_3=CONCAT(NEW.Col_1,NEW.Col_2);
我没有遇到过这个.可能您将不得不使用触发器(您指出这不是您的选择)或必须将其构建到执行插入表中的应用程序中。
当我浏览 MYSQL 的材料时,它清楚地指出"默认值必须是一个常量;它不能是函数或表达式"。
参考"http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html"
对于使用触发器,乔纳斯设置的触发器应该起作用..