【问题标题】:Mysql. Query to insert data into a table related to anothermysql。查询以将数据插入与另一个相关的表中
【发布时间】:2012-01-20 14:46:46
【问题描述】:

我是 sql 新手。我有疑问。假设我有两张桌子。一个称为用户,另一个称为订单。

User
User_Id - name - email

Order
Order_id - product - User_id

我应该使用什么查询在订单表中插入新订单,其中 User_id 字段与用户表中的 User_id 相关(现有用户)

例如:

Order_id - product - User_id
1a - plate - 1
2a - car - 3
3a - bike - 1

【问题讨论】:

  • 首先,你应该得到一本书,阅读并尝试。只有当您尝试了所有这些但仍然失败时,您才会来这里询问。
  • 网上教程数不胜数。只是做了 5 秒的搜索,并想出了这个详细的解释。 sql-tutorial.com/relations-keys-normalization-sql-tutorial
  • @allingeek - 如果您用了 10 秒而不是 5 秒,您会看到此链接无法回答问题。它只是解释了规范化。 OP 的表格已经标准化。他们询问如何在订单表中插入数据,同时确保传递正确的用户 ID。这是一个非常好的问题,正如 Vaandu 的明确回答所表明的那样。尽管他们的解决方案很好,但它假定 NAME 是用户表中的唯一值,可以从中找到 user_id。但是如果 NAME 是唯一的,那么表用户一开始就不需要 user_id。

标签: java mysql sql insert


【解决方案1】:

如果你有nameemail的用户,可以试试这个。如果 USER 在 user_idname 列上有一个复合主键,它将正常工作。最好在 ORDER 的 user_id 列上保持外键关系。

示例有 NAME 列,您也可以尝试使用电子邮件列。

INSERT INTO ORDER (ORDER_ID, PRODUCT, USER_ID)
VALUES (1a, 'plate', (SELECT USER_ID FROM USER WHERE NAME = 'Existing user'));

编辑:

我只研究过 Oracle sql。在您发表评论后,找到此链接。

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

如果您在 order_id 列上定义了 AUTO_INCREMENT,则不需要传递值。

INSERT INTO ORDER (PRODUCT, USER_ID)
VALUES ('plate', (SELECT USER_ID FROM USER WHERE NAME = 'Existing user'));

【讨论】:

  • 如果 order_id 自动增加,我不想传递任何值,对吧?
【解决方案2】:

您使用标准的 sql 插入。

insert into Order (Order_id, product, User_id) values ("3a", "bike", 1)

如果你的表设置了属性,那么User_id字段会有外键限制,所以如果你尝试插入订单但没有引用有效的人,mysql会抛出错误。

【讨论】:

    【解决方案3】:
    INSERT order (Order_id, product, User_id) VALUES (1a,plate,1) 
    

    外键与插入中使用的 sql 无关,它应该在创建表时或创建后通过 ALTER TABLE 查询设置。

    【讨论】:

      【解决方案4】:

      表之间的关系是在您创建表时使用 FOREIGN KEY 定义的。

      CREATE TABLE Users(
          UserId int primary key
      );
      
      CREATE TABLE Orders(
          OrderId int primary key,
          UserId int FOREIGN KEY REFERENCES Users(UserId)
      );
      

      然后你做一个简单的插入:

      INSERT INTO ORDER(OrderId, UserId) VALUES(1, 5);
      

      在此处查看有关外键约束的文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

      【讨论】:

      • 我明白了。我的疑问是当我创建订单时。如何向特定用户引用该订单。我应该像 vanathi 说的那样手动编码用户 ID 还是进行选择?
      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 2014-09-09
      • 2013-04-25
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多