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外键插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL插入数据因外键约束失败?

MySQL插入外键

在数据库上插入实体+外键的正确方法(使用:Mysql,JPA)

批量 MySQL 插入,一个主记录,一个带有外键的详细记录

在mysql表中插入数据的查询包含外键

在mysql中创建两个用外键链接的表,插入、删除和更新