【问题标题】:how to insert same record in one column but different row in mysql?如何在mysql中的一列中插入相同的记录但在不同的行中?
【发布时间】:2015-05-29 17:17:02
【问题描述】:

如何在两列但不同的行中插入相同的记录而不在同一行中复制两列?

我有两张桌子

结构表rek

  • rek int(主键)
  • 名称 varchar (10)
  • 地址 varchar (15)

结构表cek

  • cek int(主键)
  • rek int(外键)
  • 日期日期

表建议

rek   name   address
001   Jane   Alaska
002   Amel   Washington
003   John   Virginia

table cek(我希望我的输出如下表所示。)

cek    rek   date
01     002   12-05-2015
01     003   12-05-2015
02     002   13-05-2015
03     001   12-05-2015

如果我想要像表 cek 这样的输出,我该如何插入表 cek?当我尝试插入如上表所示的数据时,我不能。当我从 cek 中删除主键时,数据被复制了。

【问题讨论】:

  • 根据定义,insert 创建一条新记录。如果您想将数据“插入”到两个不同的记录中,则其中只有一个可以是新的。另一个必须是update
  • 那么,我不能得到像表 cek 这样的输出吗?
  • 所以你想查看像 cek 或 rek 这样的输出?您正在从 REK 表中获取 rek 并将它们与日期一起添加到 CEK 表中......这是正确的吗?
  • “试图插入数据”和“数据被复制”是什么意思?请阅读this
  • 嗯...毕竟日期并不重要 :) 但感谢大家试图帮助我 :) 如果我的问题难以理解(我不擅长解释),我很抱歉: )

标签: mysql database insert


【解决方案1】:

从您的第二个表中,cek 从两列中删除主键和 Fk。 并以这种方式在列 (cek,rek) 上创建复合主键,您可以在两列但不同的行中记录,而不会在同一行中复制两列... 否则最好的办法是在这两列之间创建桥接表

【讨论】:

  • 谢谢你,它有效 :) 真的非常感谢你的回答 :) 它解决了我的问题
  • @Ritsu 您所做的更改可能已经解决了您的问题,但您不必删除 FK 来声明复合 PK。你应该保留那个FK。您的插入问题可能与 FK 有关。但请编辑您的问题以使其更清楚。
【解决方案2】:

通过将列 cek 声明为主键,您表示每个 cek 值在表中都是唯一的。但从你想要的输出来看,这不是你想要的。也许您想要的是 (cek,rek) 对或 (cek,rek,date) 三元组是独一无二的。如果是这样,请改为声明这样的(复合)主键。但是你没有告诉我们足够多的信息让我们知道主键。

【讨论】:

  • 谢谢~~你使用复合键是对的,但我因为外键卡住了,但现在解决了:)谢谢你帮助我
  • “因为外键”是什么意思?
  • 起初,我在表cek(字段rek)上使用外键,所以我不能制作复合键,然后我删除表cek上的外键,现在它可以工作了(抱歉不好解释)
  • FK 声明不会阻止您进行 PK(复合或其他)。它只是强制引用表中的所有 FK 子行值已经在被引用的表中。但是,FK 引用子行必须是被引用表中的(超级)键(PK 或 UNIQUE),即使该表也具有较小的键。如果您按照我对您问题的评论显示您的 DDL、DML、输入、输出和预期输出,那么我们实际上可以看到发生了什么。
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多