标签: sql-insert

SQL仅在记录不存在时才插入表中

我想运行一组查询来将一些数据插入到SQL表中,但前提是满足某些条件的记录.该表有4个字段:( idprimary)fund_id,dateprice

我在查询3个字段:fund_id,dateprice.

所以我的查询会是这样的:

INSERT INTO funds (fund_id, date, price)
    VALUES (23, '2013-02-12', 22.43)
    WHERE NOT EXISTS (
       SELECT * 
       FROM funds 
       WHERE fund_id = 23
         AND date = '2013-02-12'
    );
Run Code Online (Sandbox Code Playgroud)

所以我只想在匹配fund_iddate不存在的记录时插入数据.如果以上是正确的,那么我觉得这是一种非常低效的方法,因为每次都必须运行一个额外的select语句.

有没有更好的方法来实现上述目标?

编辑:澄清既不是fund_id也不date是唯一的字段; 将存在共享相同fund_id或日期的记录,但没有记录应具有与另一个相同的fund_id和日期.

mysql sql sql-insert

64
推荐指数
3
解决办法
23万
查看次数

使用Postgres一次在3个表中插入数据

我想通过一个查询将数据插入到3个表中.
我的表如下所示:

CREATE TABLE sample (
   id        bigserial PRIMARY KEY,
   lastname  varchar(20),
   firstname varchar(20)
);

CREATE TABLE sample1(
   user_id    bigserial PRIMARY KEY,
   sample_id  bigint REFERENCES sample,
   adddetails varchar(20)
);

CREATE TABLE sample2(
   id      bigserial PRIMARY KEY,
   user_id bigint REFERENCES sample1,
   value   varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我将获得一个密钥以换取每次插入,我需要在下一个表中插入该密钥.
我的查询是:

insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行单个查询,他们只是向我返回值,我不能立即在下一个查询中重用它们.

怎么做到这一点?

sql postgresql common-table-expression sql-insert sql-returning

64
推荐指数
4
解决办法
4万
查看次数

在SQL中,UPDATE总是快于DELETE + INSERT吗?

假设我有一个包含以下字段的简单表:

  1. ID:int,autoincremental(identity),主键
  2. 名称:varchar(50),唯一,具有唯一索引
  3. 标签:int

我从不使用ID字段进行查找,因为我的应用程序总是基于使用Name字段.

我需要不时更改Tag值.我正在使用以下简单的SQL代码:

UPDATE Table SET Tag = XX WHERE Name = YY;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人知道上述内容总是比以下更快:

DELETE FROM Table WHERE Name = YY;
INSERT INTO Table (Name, Tag) VALUES (YY, XX);
Run Code Online (Sandbox Code Playgroud)

再次 - 我知道在第二个例子中ID被更改,但它对我的应用程序无关紧要.

sql sql-insert sql-delete

62
推荐指数
7
解决办法
10万
查看次数

SQL错误:ORA-01861:literal与格式字符串01861不匹配

我试图将数据插入现有表并继续收到错误.

INSERT INTO Patient  
(
  PatientNo,
  PatientFirstName,
  PatientLastName,
  PatientStreetAddress,
  PatientTown,
  PatientCounty,
  PatientPostcode,
  DOB,
  Gender,
  PatientHomeTelephoneNumber,
  PatientMobileTelephoneNumber
)
VALUES 
(
  121, 
  'Miles', 
  'Malone', 
  '64 Zoo Lane', 
  'Clapham', 
  'United Kingdom',
  'SW4 9LP',
  '1989-12-09',
  'M',
  02086950291,
  07498635200
);
Run Code Online (Sandbox Code Playgroud)

错误:

Error starting at line : 1 in command -
INSERT INTO Patient (PatientNo,PatientFirstName,PatientLastName,PatientStreetAddress,PatientTown,PatientCounty,PatientPostcode,DOB,Gender,PatientHomeTelephoneNumber,PatientMobileTelephoneNumber)
VALUES (121, 'Miles', 'Malone', '64 Zoo Lane', 'Clapham', 'United Kingdom','SW4 9LP','1989-12-09','M',02086950291,07498635200)
Error report -
SQL Error: ORA-01861: literal does not match format string
01861. 00000 -  "literal does not match format …
Run Code Online (Sandbox Code Playgroud)

sql oracle sql-insert

48
推荐指数
4
解决办法
30万
查看次数

列数与第1行的值计数不匹配

所以我读了其他帖子,但这个问题很独特.所以这个SQL转储文件将此作为最后一个条目.

INSERT INTO `wp_posts` VALUES(2781, 3, '2013-01-04 17:24:19', '2013-01-05 00:24:19'.
Run Code Online (Sandbox Code Playgroud)

我正在尝试将此值插入表中...

INSERT INTO `wp_posts` VALUES(5, 5, '2005-04-11 09:54:35', '2005-04-11 17:54:35'
Run Code Online (Sandbox Code Playgroud)

它给了我错误,"列数与第1行的值计数不匹配" 所以我迷失在这里如何应用列和行的概念.

2781,3第2781行和第3列不代表?并不5,5意味着第5行和第5列?

mysql wordpress sql-insert

42
推荐指数
5
解决办法
21万
查看次数

有没有办法在`gunzip <database.sql.gz |上显示进度 mysql ...`进程?

每周一次,我需要在我的本地开发环境中运行一个巨大的数据库更新,如下所示:

$ gunzip < /path/to/database1.sql.gz | mysql -uUSER -p database1 &
$ gunzip < /path/to/database2.sql.gz | mysql -uUSER -p database2 &
$ gunzip < /path/to/database3.sql.gz | mysql -uUSER -p database3 &
Run Code Online (Sandbox Code Playgroud)

我试图在一夜之间运行这些,因为它可能需要几个小时才能完成.

你能帮我提出一个方法来展示这些任务的进展吗?

以下是一些猜测:

  1. 获取数据库的未压缩文件大小,并与我的本地数据库大小进行比较
  2. show processlist在mysql中运行以查看它当前正在插入的表(我当前的方法,但是一些表是巨大的,并且我的至少一个数据库只有一个巨大的表,因此该过程的大部分都停留在此表中,使此选项小于有用)

所有db.sql.gz文件都是标准的gzip压缩mysqldumps,所以我认为我不能在转储中构建任何内容来为我提供更新.(但如果我遗漏某些东西,我会对此持开放态度)


赏金规则

答案必须:

  1. 提供有用且合理准确的进度(可视化scp(首选!)或通过可轻松访问的简单进度数据库表).
  2. 不打破常规mysqldump出口或定期gunzip ... | mysql进口(对于其他工程师,可能不会使用你想出的任何东西)
  3. 不给我的DBA心脏病发作 - 所以保持对特殊mysqldump或替代mysql分支请求的轻松.

mysql sql progress gunzip sql-insert

40
推荐指数
1
解决办法
2万
查看次数

将相同的固定值插入多行

我有一个带有列的表,让我们调用table_column当前null表的所​​有行.我想将值"test"插入到所有行的列中.有人可以给我这个SQL吗?

我已经尝试了, INSERT INTO table (table_column) VALUES ("test");但只填充了最后一行.如何一次完成所有行?

mysql sql sql-update sql-insert

33
推荐指数
2
解决办法
10万
查看次数

带有MySQL INSERT参数的C#

祝大家好,我正在使用Visual C#2010和MySQL版本5.1.48社区.我希望你能帮我解决这个问题.我觉得它不适合我.我错过了什么?

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它.它说:

Person列不能为null

编辑:

但是,当我尝试这个代码.

comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')";
Run Code Online (Sandbox Code Playgroud)

但是这段代码很容易受到sql注入攻击,但它有效,不会给我一个错误.

编辑:

我试着用这个.我发现它在这里,所以我认为它会工作,但给了我这个错误

索引(从零开始)必须大于或等于零且小于参数列表的大小.

任何的想法?

    string a = "myname";
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "INSERT INTO room(person,address) VALUES(?,?)";
    //cmd.Prepare();

    cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;
    cmd.Parameters.Add("address", MySqlDbType.VarChar).Value = "myaddress";
    cmd.ExecuteNonQuery(); // HERE I GOT AN …
Run Code Online (Sandbox Code Playgroud)

c# mysql database sql-insert

30
推荐指数
3
解决办法
11万
查看次数

MySQL中的INSERT和UPDATE有什么区别?

它似乎INSERTUPDATE我做同样的事情.

有什么时候我应该使用INSERT而不是UPDATE反之亦然?

mysql sql sql-update sql-insert

28
推荐指数
2
解决办法
5万
查看次数

PostgreSQL中的Query错误没有返回任何结果

我试图将数据插入表中.执行查询后,我得到一个异常说明

org.postgresql.util.PSQLException: No results were returned by the query.
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:284)
Run Code Online (Sandbox Code Playgroud)

数据插入成功,但我不知道为什么我得到这个例外?

java database postgresql jsp sql-insert

28
推荐指数
4
解决办法
2万
查看次数