2014-02-26 128 views
1

使用这两个表我试图创建一个查询来插入一个新的课程,但我使用外键,我不知道如何将用户(表)ID传递到课程(表格)ID。mysql外键插入

我试图让这样的事情

我完全失去了,如何将数据插入包含外键的表, 我想要做的是:

  1. 第一个人可以注册(用户表)

2.然后用户将可以添加课程(使用外键IM识别特定用户的课程)

用户表

id | username | 
--------------- 
1 | test  | 

课程表

coursesid | coursesname | id(same id that in users table) 

1   | courses test| 1 

创建表的命令是

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` char(64) COLLATE utf8_unicode_ci NOT NULL, 
    `salt` char(16) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; 



CREATE TABLE `course` (
    `courseid` int(11) NOT NULL AUTO_INCREMENT, 
    `coursename` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `id` int(11) NOT NULL, 
    UNIQUE KEY (`courseid`) 
FOREIGN KEY (od) REFERENCES users(id) 
) 
+0

将数据插入到用户,然后当然,最好在同一笔交易中。 –

+0

我不能同时做,因为用户可以根据自己的意愿添加尽可能多的课程 – user3214262

+0

然后请解释您需要的内容并向我们展示您尝试的内容。 –

回答

1

您可以使用子查询查找用户ID,例如:

insert into course 
(courseid, coursename, id) 
values 
(1, 'test courses', 
    (SELECT id FROM users where username = 'test') 
) 
; 

原因,如果你知道用户ID,您可以直接插入此ID:

insert into course 
(courseid, coursename, id) 
values 
(1, 'test courses', 1) 
; 

其他查询只插入最后一个用户ID:

insert into course 
(courseid, coursename, id) 
values 
(1, 'test courses', 
    (SELECT max(id) FROM users) 
) 
; 
+0

谢谢你,熟练使用子查询! (): – user3214262

+0

“INSERT INTO courses(courseid,coursename,id)VALUES(:courseid,:coursename,(SELECT id from users where username =(select username from users))”; 假设我不知道用户名i想要查询以识别用户名,任何想法为什么不起作用 – user3214262

+0

但是,在课程创建期间您对用户有什么了解?是否要插入任何用户,例如上次存储的用户?您的系统是否保留记录的用户名? – AppLend