如果我一次插入多行,数据库查询会更快:
喜欢
INSERT....
UNION
INSERT....
UNION
Run Code Online (Sandbox Code Playgroud)
(我需要插入2-3000行)
我正在使用Python写入postgres数据库:
sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)
Run Code Online (Sandbox Code Playgroud)
但由于我的一些行是相同的,我收到以下错误:
psycopg2.IntegrityError: duplicate key value
violates unique constraint "hundred_pkey"
Run Code Online (Sandbox Code Playgroud)
如何编写'INSERT除非此行已存在'SQL语句?
我见过这样的复杂陈述:
IF EXISTS (SELECT * FROM invoices WHERE invoiceid = '12345')
UPDATE invoices SET billed = 'TRUE' WHERE invoiceid = '12345'
ELSE
INSERT INTO invoices (invoiceid, billed) VALUES ('12345', 'TRUE')
END IF
Run Code Online (Sandbox Code Playgroud)
但首先,这对于我需要的东西是否过度,其次,我怎样才能将其中一个作为简单的字符串执行?
在其中插入带撇号的值的正确SQL语法是什么?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Run Code Online (Sandbox Code Playgroud)
我一直收到错误,因为我认为O之后的撇号是值的结束标记.
我正在寻找一种在Oracle 9数据库中执行多行插入的好方法.以下内容适用于MySQL,但在Oracle中似乎不受支持.
INSERT INTO TMP_DIM_EXCH_RT
(EXCH_WH_KEY,
EXCH_NAT_KEY,
EXCH_DATE, EXCH_RATE,
FROM_CURCY_CD,
TO_CURCY_CD,
EXCH_EFF_DATE,
EXCH_EFF_END_DATE,
EXCH_LAST_UPDATED_DATE)
VALUES
(1, 1, '28-AUG-2008', 109.49, 'USD', 'JPY', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(2, 1, '28-AUG-2008', .54, 'USD', 'GBP', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(3, 1, '28-AUG-2008', 1.05, 'USD', 'CAD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(4, 1, '28-AUG-2008', .68, 'USD', 'EUR', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(5, 1, '28-AUG-2008', 1.16, 'USD', 'AUD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(6, 1, '28-AUG-2008', 7.81, 'USD', 'HKD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008');
Run Code Online (Sandbox Code Playgroud) 我正在测试Postgres插入性能.我有一个表,其中一列以数字作为数据类型.它上面也有一个索引.我使用此查询填充数据库:
insert into aNumber (id) values (564),(43536),(34560) ...
Run Code Online (Sandbox Code Playgroud)
我通过上面的查询一次非常快速地插入了400万行.数据库达到600万行后,性能每15分钟急剧下降到100万行.有没有提高插入性能的技巧?我需要在这个项目上获得最佳插入性能.
在具有5 GB RAM的计算机上使用Windows 7 Pro.
我有一个SQLite数据库.我试图在表中插入值(users_id,lessoninfo_id),前提bookmarks是它们之前不存在.
INSERT INTO bookmarks(users_id,lessoninfo_id)
VALUES(
(SELECT _id FROM Users WHERE User='"+$('#user_lesson').html()+"'),
(SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+" AND cast(starttime AS int)="+Math.floor(result_set.rows.item(markerCount-1).starttime)+")
WHERE NOT EXISTS (
SELECT users_id,lessoninfo_id from bookmarks
WHERE users_id=(SELECT _id FROM Users
WHERE User='"+$('#user_lesson').html()+"') AND lessoninfo_id=(
SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+")))
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误说:
db error附近的语法.
我正在使用这段代码,我感到非常沮丧:
try {
$dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindParam(':v1', PDO::PARAM_NULL); // --> Here's the problem
Run Code Online (Sandbox Code Playgroud)
PDO::PARAM_NULL, null, '', 所有这些都失败并抛出此错误:
致命错误:无法通过/ opt /中的引用传递参数2
我有以下两个表:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
Run Code Online (Sandbox Code Playgroud)
我需要从数据插入Table1到Table2.我可以使用以下语法:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,重复的ID可能存在Table2(在我的情况下,它只是" 1")并且我不想再次复制,因为这会引发错误.
我可以这样写:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法可以不使用IF - ELSE?我想避免INSERT INTO-SELECT基于某些条件的两个陈述.
我在MySQL表中有一个具有timestamp数据类型的字段.我将数据保存到该表中.但是当我将timestamp(1299762201428)传递给记录时,它会自动将值保存0000-00-00 00:00:00到该表中.
如何将时间戳存储在MySQL表中?
这是我的INSERT发言:
INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
(2,5,9,'2',1299762201428,5,10,20,'1')
Run Code Online (Sandbox Code Playgroud) 我有一个MySQL语句,将一些变量插入数据库.我最近添加了2个可选字段($ intLat,$ intLng).现在,如果没有输入这些值,我会将空字符串作为值传递.如何将显式NULL值传递给MySQL(如果为空)?
$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long',
'$intLat', '$intLng')";
mysql_query($query);
Run Code Online (Sandbox Code Playgroud) sql-insert ×10
mysql ×4
sql ×4
php ×3
database ×2
null ×2
postgresql ×2
bulkinsert ×1
constraints ×1
oracle ×1
oracle9i ×1
pdo ×1
python ×1
sql-server ×1
sql-update ×1
sqlite ×1
t-sql ×1