我正在使用this链接。
我已将我的cpp文件与Eclipse连接到我的数据库,有3个表(两个简单的表
Person
和Item
以及连接它们的第三个PersonItem
。在第三个表中,我使用一个简单的主键,然后使用两个外键:
CREATE TABLE PersonsItems(PersonsItemsId int not null auto_increment primary key,
Person_Id int not null,
Item_id int not null,
constraint fk_Person_id foreign key (Person_Id) references Person(PersonId),
constraint fk_Item_id foreign key (Item_id) references Items(ItemId));
所以,然后在c中使用嵌入式sql我希望Person有多个项目。
我的代码:
mysql_query(connection, \
"INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8);");
printf("%ld PersonsItems Row(s) Updated!\n", (long) mysql_affected_rows(connection));
//SELECT newly inserted record.
mysql_query(connection, \
"SELECT Order_id FROM PersonsItems");
//Resource struct with rows of returned data.
resource = mysql_use_result(connection);
// Fetch multiple results
while((result = mysql_fetch_row(resource))) {
printf("%s %s\n",result[0], result[1]);
}
我的结果是
-1 PersonsItems Row(s) Updated!
5
但VALUES (1,1,5), (1,1,8);
我希望那是
-1 PersonsItems Row(s) Updated!
5 8
可以告诉我为什么这不会发生? 亲切的问候。
答案 0 :(得分:1)
我怀疑这是因为您的第一个插入失败并出现以下错误:
Duplicate entry '1' for key 'PRIMARY'
因为您试图将1
两次插入作为主键的PersonsItemsId
中,所以必须是唯一的(它也是auto_increment所以根本不需要指定值);
这就是为什么受影响的行是-1,以及为什么在这一行:
printf("%s %s\n",result[0], result[1]);
您只看到5
,因为在插入值(1,1,5)
后第一个语句失败,因此表中仍有一行数据。
我认为要获得您期望的行为,您需要使用ON DUPLICATE KEY UPDATE语法:
INSERT INTO PersonsItems(PersonsItemsId, Person_Id, order_id)
VALUES (1,1,5), (1,1,8)
ON DUPLICATE KEY UPDATE Person_id = VALUES(person_Id), Order_ID = VALUES(Order_ID);
<强> Example on SQL Fiddle 强>
或者不指定personsItemsID的值,让auto_increment执行它的操作:
INSERT INTO PersonsItems( Person_Id, order_id)
VALUES (1,5), (1,8);
<强> Example on SQL Fiddle 强>
答案 1 :(得分:1)
我认为你的两个查询中有错字或错误。
您正在插入“PersonsItemsId,Person_Id,Item_id”
INSERT INTO PersonsItems(PersonsItemsId, Person_Id, Item_id) VALUES (1,1,5), (1,1,8)
然后你的select语句选择“Order_id”。
SELECT Order_id FROM PersonsItems
为了按照您的要求达到5,8,您的第二个查询需要是:
SELECT Item_id FROM PersonsItems
编辑以添加:
您的主键是autoincrement
,因此您无需将其传递给insert语句(事实上,当您传递1次时它会出错)。
您只需要插入其他列:
INSERT INTO PersonsItems(Person_Id, Item_id) VALUES (1,5), (1,8)