回答

收藏

使用一个SQL命令将数据添加到多对多关系

技术问答 技术问答 300 人阅读 | 0 人回复 | 2023-09-12

我对SQL数据库有一个基本的理解,但我可能忽略了一些问题,但我无法理解以下问题:多对多关系(例如:users-user_roles-4 Q. f" ^9 g; p9 O# o8 L, O7 y" }
角色)。可以用一个吗?SQL命令(原子操作)向(新)用户添加(新)角色?目前,我使用它Sqlite。- m$ Q! D+ D; J; C" }6 u
我知道该SELECTlast_insert_rowid();命令,通过这个命令和几个SQL命令,我可以实现所需的功能。但我想将其合并到命令中(因此服务器(在这种情况下)Sqlite)可以优化查询等。).我不知道它是如何在现实生活中完成的(一个命令和多个一对一的事务),这是这个问题的根本原因。
$ {* k* w+ c7 o7 |5 W' Y0 M) w, X到目前为止,这是我能做到的:* x# r+ B! F3 G. k! H& H
pragma foreign_keys = on;CREATE TABLE users (  user_id integer primary key autoincrement, user_name text not null unique);CREATE TABLE roles (  role_id integer primary key autoincrement, role_name text not null unique);CREATE TABLE user_roles (  user_id integer not null, role_id integer not null, foreign key (user_id) references users(user_id), foreign key (role_id) references roles(role_id), primary key (user_id,role_id));insert into users (user_name) values ('Joe');insert into roles (role_name) values ('admin');insert into user_roles (user_id,role_id) values (  (select user_id from users where user_name = 'Joe'), (select role_id from roles where role_name = 'admin'));如果同时存在用户和角色(Joe和admin),如果工作正常,我不知道。Joe或admin如何实现来自数据库的何实现添加-如果缺少-然后-返回-
" m0 m1 f; Q; K5 A/ Did”的行为。# L/ o* |' `, Y' w
例子:
! {, g2 y+ Z# V" I3 o. Z) kinsert into user_roles (user_id,role_id) values (  (select user_id from users where user_name = 'Bill'), (select role_id from roles where role_name = 'user'));结果:+ q6 t5 r: o) l* ~. A. Y( E  t
Execution finished with errors.Result: NOT NULL constraint failed: user_roles.user_id                2 m3 c# K6 x7 q1 F$ D
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则