我想运行一组查询来将一些数据插入到SQL表中,但前提是满足某些条件的记录.该表有4个字段:( idprimary)fund_id,date和price
我在查询3个字段:fund_id,date和price.
所以我的查询会是这样的:
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_id和date不存在的记录时插入数据.如果以上是正确的,那么我觉得这是一种非常低效的方法,因为每次都必须运行一个额外的select语句.
有没有更好的方法来实现上述目标?
编辑:澄清既不是fund_id也不date是唯一的字段; 将存在共享相同fund_id或日期的记录,但没有记录应具有与另一个相同的fund_id和日期.
我想通过一个查询将数据插入到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
假设我有一个包含以下字段的简单表:
我从不使用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被更改,但它对我的应用程序无关紧要.
我试图将数据插入现有表并继续收到错误.
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转储文件将此作为最后一个条目.
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列?
每周一次,我需要在我的本地开发环境中运行一个巨大的数据库更新,如下所示:
$ 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)
我试图在一夜之间运行这些,因为它可能需要几个小时才能完成.
你能帮我提出一个方法来展示这些任务的进展吗?
以下是一些猜测:
show processlist在mysql中运行以查看它当前正在插入的表(我当前的方法,但是一些表是巨大的,并且我的至少一个数据库只有一个巨大的表,因此该过程的大部分都停留在此表中,使此选项小于有用)所有db.sql.gz文件都是标准的gzip压缩mysqldumps,所以我认为我不能在转储中构建任何内容来为我提供更新.(但如果我遗漏某些东西,我会对此持开放态度)
赏金规则
答案必须:
scp(首选!)或通过可轻松访问的简单进度数据库表).mysqldump出口或定期gunzip ... | mysql进口(对于其他工程师,可能不会使用你想出的任何东西)mysqldump或替代mysql分支请求的轻松.我有一个带有列的表,让我们调用table_column当前null表的所有行.我想将值"test"插入到所有行的列中.有人可以给我这个SQL吗?
我已经尝试了, INSERT INTO table (table_column) VALUES ("test");但只填充了最后一行.如何一次完成所有行?
祝大家好,我正在使用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) 它似乎INSERT和UPDATE我做同样的事情.
有什么时候我应该使用INSERT而不是UPDATE反之亦然?
我试图将数据插入表中.执行查询后,我得到一个异常说明
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)
数据插入成功,但我不知道为什么我得到这个例外?
sql-insert ×10
sql ×7
mysql ×6
database ×2
postgresql ×2
sql-update ×2
c# ×1
gunzip ×1
java ×1
jsp ×1
oracle ×1
progress ×1
sql-delete ×1
wordpress ×1