首先,这是问题的简明摘要:
INSERT有条件地运行声明是否可能?类似于此的东西:
IF(expression) INSERT...
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以使用存储过程执行此操作.我的问题是:我可以在查询中执行此操作吗?
现在,我为什么要这样做?
假设我们有以下2个表:
products: id, qty_on_hand
orders: id, product_id, qty
Run Code Online (Sandbox Code Playgroud)
现在,假设订购了20个Voodoo Dolls(产品ID 2).
我们首先检查手头的数量是否足够:
SELECT IF(
( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20
<=
( SELECT qty_on_hand FROM products WHERE id = 2)
, 'true', 'false');
Run Code Online (Sandbox Code Playgroud)
然后,如果它的计算结果为true,则运行INSERT查询.
到现在为止还挺好.
但是,并发性存在问题.
如果两个订单在同一时间进入,它们可能都会在其中任何一个订单进入订单之前读取手头数量.然后他们都会下订单,从而超过了qty_on_hand.
所以,回到问题的根源:
是否可以INSERT有条件地运行语句,以便我们可以将这两个查询合并为一个?
我搜索了很多,INSERT我能找到的唯一条件语句类型ON DUPLICATE KEY,这显然不适用于此.
我有一个文本文件,如下所示:
blah blah
foo1 bar1
foo1 bar2
foo1 bar3
foo2 bar4
foo2 bar5
blah blah
Run Code Online (Sandbox Code Playgroud)
现在我想'foo bar'在'foo1 bar3'和之间插入'foo2 bar4'.
我就这样做了:
import shutil
txt = '1.txt'
tmptxt = '1.txt.tmp'
with open(tmptxt, 'w') as outfile:
with open(txt, 'r') as infile:
flag = 0
for line in infile:
if not line.startswith('foo1') and flag == 0:
outfile.write(line)
continue
if line.startswith('foo1') and flag == 0:
flag = 1
outfile.write(line)
continue
if line.startswith('foo1') and flag == 1:
outfile.write(line)
continue
if …Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以运行这样的请求:
INSERT INTO t2 (a, b)
VALUES (
SELECT a, b
FROM `t1` AS o
WHERE o.id NOT
IN (
SELECT a
FROM t2
)
)
Run Code Online (Sandbox Code Playgroud)
想法是用t1中的一些数据填充t2,但我的语法肯定是错的.
谢谢你的帮助
网格行和列定义似乎是硬编码的,如下所示:
Grid.Row="3" Grid.Column="1"
Run Code Online (Sandbox Code Playgroud)
我正在开发一个新的WPF应用程序,我不得不不断添加和删除我的网格中的新行,因为客户端决定了表单的外观.我发现这是一项相当繁琐的工作.如果在顶部附近插入一行,我必须手动更改我刚插入的行下面的XAML中的所有行索引.
有没有一种简单的方法可以自动调整所有行?
如何使用MyBatis获取插入的生成密钥?我读了很多关于这个问题的网页,但我仍然被封锁,有人可以帮帮我吗?这是我的代码:
桌子:
ID_ERROR long primary key
DATE timestamp
TYPE varchar
MESSAGE varchar
SOURCE varchar
Run Code Online (Sandbox Code Playgroud)
道:
Long returnedId = 0L;
MyMapper myMapper = this.sqlSession.getMapper(MyMapper.class);
myMapper.insertRecord(returnedId, Utils.now(), t.getClass().getName(), t.getMessage(), c.getName());
return returnedId;
Run Code Online (Sandbox Code Playgroud)
mapper.java:
public void insertRecord(@Param("returnedId") Long returnedId, @Param("timestamp")Timestamp timestamp,@Param("type") String type,@Param("message") String message,@Param("source") String source);
Run Code Online (Sandbox Code Playgroud)
mapper.xml
<insert id="insertRecord" parameterType="map" useGeneratedKeys="true" keyProperty="ID_ERROR">
INSERT INTO errors (
DATE,
TYPE,
MESSAGE,
SOURCE
)
VALUES (
#{timestamp},
#{type},
#{message},
#{source}
)
<selectKey resultType="long" order="AFTER" keyProperty="returnedId">
SELECT LAST_INSERT_ID() as returnedId
</selectKey>
</insert>
Run Code Online (Sandbox Code Playgroud)
怎么了?如何获取此插入的生成密钥?谢谢!
我试图在循环中创建一个空向量,并希望每次将某个元素读入该循环时向该向量添加一个元素.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<float> myVector();
float x;
while(cin >> x)
myVector.insert(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误信息.
我想在SQL中插入从计数器中检索到的值,并重复300次.
就像是:
DECLARE @Counter = 0;
-- BEGIN Loop
SET @Counter = @Counter + 1
INSERT INTO tblFoo VALUES(@Counter)
-- REPEAT 300 times
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?谢谢
我必须将std :: map存储为std :: map中的值
std::map< std::string, std::map<std::string, std::string> > someStorage;
Run Code Online (Sandbox Code Playgroud)
如何插入第二个(内部)地图?我尝试过:
someStorage.insert( std::make_pair("key", std::make_pair("key2", "value2")) );
Run Code Online (Sandbox Code Playgroud)
但这会引发很多错误.怎么了?
我正在努力学习一些PHP/MySQL代码.我正在读取1个表,更改一些字段然后写入另一个表,如果插入时没有任何反应,并且当我希望它在数据库中插入null时,其中一个数组值为null(该字段允许空值).看起来有点像这样:
$results = mysql_query("select * from mytable");
while ($row = mysql_fetch_assoc($results) {
mysql_query("insert into table2 (f1, f2) values ('{$row['string_field']}', {$row['null_field']});
}
Run Code Online (Sandbox Code Playgroud)
并非每一行都有一个空值,并且在我的查询中有更多字段和2列可能为空,也可能不为空
我正在使用以下内容尝试将记录插入到postgresql数据库表中,但它无法正常工作.我没有收到任何错误,但表中没有记录.我需要提交还是其他什么?我正在使用随Bitnami djangostack安装一起安装的postgresql数据库.
import psycopg2
try:
conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'")
except:
print "Cannot connect to db"
cur = conn.cursor()
try:
cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
print "Cannot insert"
Run Code Online (Sandbox Code Playgroud)