mysql外键插入
Posted
技术标签:
【中文标题】mysql外键插入【英文标题】:mysql foreign key insert 【发布时间】:2014-02-26 08:39:05 【问题描述】:我正在尝试使用这两个表创建查询以插入新课程,但我使用的是外键并且我不知道如何将该用户(表)ID 传递到课程(表)ID .
我正在尝试得到这样的东西
我完全迷失了,关于如何将数据插入包含外键的表中, 我想做的是:
-
首先一个人可以注册(用户表)
2.然后用户可以添加课程(我使用外键来识别特定用户的课程)
用户表
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)
)
【问题讨论】:
将数据插入用户,然后插入课程,最好在同一个事务中。 我不能同时做,因为用户可以根据需要添加任意数量的课程 那么请说明您的需求并向我们展示您的尝试。 【参考方案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)
)
;
【讨论】:
"INSERT INTO courses (courseid, coursename, id) VALUES (:courseid, :coursename, (SELECT id from users where username = (select username from users))"; 假设我没有知道我想查询的用户名以识别用户名,任何想法为什么不工作 但是您在课程创建过程中对用户了解多少?是否要插入任何用户,例如最后存储的用户?您的系统是否保留登录的用户名? 假设用户将登录,并且可以添加课程,如果他没有登录将无法添加 您能否通过 ui 和程序代码验证这一点,并防止未经身份验证的用户执行查询?以上是关于mysql外键插入的主要内容,如果未能解决你的问题,请参考以下文章