【问题标题】:inserting an item into a table if it doesn’t exist SQLite3如果项目不存在,则将项目插入表中 SQLite3
【发布时间】:2022-01-10 09:58:05
【问题描述】:

如果用户名尚未出现,我正在尝试将(硬编码)新用户插入数据库。在下面的代码中,我试图让 sql 检查用户是否已经存在,如果存在则选择(或什么都不做),否则,将新用户插入表中。我尝试了多种编码方式,但无论我做什么,表格都不会填充!任何提示或想法都会非常有帮助,非常感谢。作为参考,我使用的是语言 C 的 sqllite3 扩展,我使用 sql_exec 函数进行查询。

尝试 1:

IF EXISTS ( SELECT * PERSON WHERE USERNAME='name') BEGIN SELECT 1 END ELSE BEGIN INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) VALUES('name', 'password', 'ONLINE', '12345') END;

尝试 2:

IF NOT EXISTS ( INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) VALUES('name', 'password', 'ONLINE', '12345') ) END ;

尝试 3:

WHERE NOT EXISTS ( INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) VALUES('name', 'password', 'ONLINE', '12345') )

尝试 4:

WHERE NOT EXISTS ( INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) VALUES('name', 'password', 'ONLINE', '12345') );

尝试 5:

I F NOT EXISTS ( SELECT 1 WHERE USERNAME='kat') BEGIN INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) VALUES('name', 'password', 'ONLINE', '12345') END;

谢谢!!!!!!

【问题讨论】:

标签: sql c database sqlite


【解决方案1】:

将用户名字段设为主键或唯一键,这样如果用户名重复,则不会插入。

INSERT INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) 
VALUES('name', 'password', 'ONLINE', '12345') 

【讨论】:

    【解决方案2】:

    您只需在表中为 USERNAME 字段添加一个主键,然后使用 ON CONFLICT 子句执行以下请求:

    INSERT OR IGNORE INTO PERSON (USERNAME, PASSWORD, STATUS, SIGNATURE) 
    VALUES('name', 'password', 'ONLINE', '12345') 
    

    见:https://sqlite.org/lang_conflict.html

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      相关资源
      最近更新 更多