几个月前,我从Stack Overflow的答案中学到了如何使用以下语法在MySQL中一次执行多个更新:
INSERT INTO table (id, field, field2) VALUES (1, A, X), (2, B, Y), (3, C, Z)
ON DUPLICATE KEY UPDATE field=VALUES(Col1), field2=VALUES(Col2);
Run Code Online (Sandbox Code Playgroud)
我现在切换到PostgreSQL,显然这是不正确的.它指的是所有正确的表,所以我认为这是使用不同关键字的问题,但我不确定PostgreSQL文档中的哪个被覆盖.
为了澄清,我想插入几个东西,如果它们已经存在则更新它们.
有可能我做一个简单的查询来计算我在一个确定的时间段内有多少记录,如年,月或日,有一个TIMESTAMP字段,如:
SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR
Run Code Online (Sandbox Code Playgroud)
甚至:
SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH
Run Code Online (Sandbox Code Playgroud)
要有月度统计数据.
谢谢!
我正在尝试学习编写查询的最佳方法.我也理解保持一致的重要性.到现在为止,我已经随机使用了单引号,双引号和后退,没有任何实际想法.
例:
$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';
Run Code Online (Sandbox Code Playgroud)
此外,在上面的例子中,考虑table可能是变量.
这是什么标准?你是做什么?
我一直在这里阅读类似问题的答案大约20分钟,但看起来这个问题没有明确的答案.
是否可以暂时禁用MySQL中的约束?
我有两个Django模型,每个模型都有一个ForeignKey到另一个.由于ForeignKey约束,删除模型的实例会返回错误:
cursor.execute("DELETE FROM myapp_item WHERE n = %s", n)
transaction.commit_unless_managed() #a foreign key constraint fails here
cursor.execute("DELETE FROM myapp_style WHERE n = %s", n)
transaction.commit_unless_managed()
Run Code Online (Sandbox Code Playgroud)
是否可以暂时禁用约束并删除?
即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?
考虑这个示例情况.SQL是用PHP构造的,如下所示:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)
我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?
像这样的经典注射:
aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)
不工作.
你知道任何可能通过上面的PHP代码注入的注入吗?
我试图在SQL中以不同的方向排序多个列.column1将按降序排序,并按column2升序排序.
我怎样才能做到这一点?
假设一个表结构MyTable(KEY, datafield1, datafield2...).
通常我想要更新现有记录,或者如果新记录不存在则插入新记录.
实质上:
IF (key exists)
run update command
ELSE
run insert command
Run Code Online (Sandbox Code Playgroud)
写这个的最佳表现方式是什么?
表:
UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)
我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)
更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.
本OR该在WHEN一个子句CASE语句不支持.我怎样才能做到这一点?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Run Code Online (Sandbox Code Playgroud)