Java Mysql。将数据插入到与另一个表相关的表中的查询

Java Mysql。将数据插入到与另一个表相关的表中的查询,java,mysql,sql,insert,Java,Mysql,Sql,Insert,我是sql新手。我有疑问。假设我有两张桌子。一个称为用户,另一个称为订单 User User_Id - name - email Order Order_id - product - User_id 我应该使用什么查询在订单表中插入与用户表(现有用户)中的用户id相关的用户id字段的新订单 例如: 您可以使用标准的sql插入 insert into Order (Order_id, product, User_id) values ("3a", "bike", 1) 如果您的表是setup

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

User
User_Id - name - email

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

例如:


您可以使用标准的sql插入

insert into Order (Order_id, product, User_id) values ("3a", "bike", 1)
如果您的表是setup属性,那么
User\u id
字段上会有一个外键限制,因此如果您尝试插入订单但没有引用有效的人员,mysql将抛出一个错误

INSERT order (Order_id, product, User_id) VALUES (1a,plate,1) 

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

如果您有用户的
名称
电子邮件
,可以尝试此操作。如果用户在
USER\u id
name
列上有一个复合主键,它将正常工作。最好在订单的用户id列上保留外键关系

示例中有NAME列,您也可以尝试使用email列

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

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

若您已经在order_id列上定义了AUTO_INCREMENT,则不需要传递值

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

表之间的关系是在使用外键创建表时定义的

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);

请在此处查看有关外键约束的文档:。

首先,您应该买一本书,阅读并尝试。只有当你尝试了所有这些,但仍然失败了,你才会来到这里问。互联网上有无数的教程。只是做了5秒钟的搜索,得出了这个详细的解释@allingeek-如果你用10秒而不是5秒,你会看到这个链接没有回答问题。它只是解释了正常化。OP的表格已经正常化了。他们询问如何在orders表中插入数据,同时确保传递正确的用户id。这是一个非常好的问题,正如Vaandu明确的回答所示。虽然他们的解决方案很好,但它假定NAME是用户表中唯一的值,可以从中找到用户id。但是如果名称是唯一的,那么表用户首先就不需要用户id。如果订单id自动递增,我不想传递任何值,对吗?我明白。我的疑问是当我创建订单时。如何向特定用户引用该订单。我应该手动编码用户ID还是像vanathi说的那样进行选择?
INSERT INTO ORDER(OrderId, UserId) VALUES(1, 5);