标签: insert

MySQL INSERT IF(自定义if语句)

首先,这是问题的简明摘要:

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,这显然不适用于此.

mysql concurrency if-statement insert race-condition

32
推荐指数
2
解决办法
7万
查看次数

在文本文件的指定位置插入行

我有一个文本文件,如下所示:

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)

python text insert

31
推荐指数
3
解决办法
5万
查看次数

MySql插入一个select的结果

我想知道我是否可以运行这样的请求:

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,但我的语法肯定是错的.

谢谢你的帮助

mysql select insert

31
推荐指数
2
解决办法
3万
查看次数

WPF网格:如果我需要插入新行,是否有一种简单的方法来重新调整行项目?

网格行和列定义似乎是硬编码的,如下所示:

Grid.Row="3" Grid.Column="1"
Run Code Online (Sandbox Code Playgroud)

我正在开发一个新的WPF应用程序,我不得不不断添加和删除我的网格中的新行,因为客户端决定了表单的外观.我发现这是一项相当繁琐的工作.如果在顶部附近插入一行,我必须手动更改我刚插入的行下面的XAML中的所有行索引.

有没有一种简单的方法可以自动调整所有行?

wpf grid row insert

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

MyBatis,如何获取插入的自动生成密钥?[MySQL的]

如何使用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)

怎么了?如何获取此插入的生成密钥?谢谢!

java mysql insert mybatis

31
推荐指数
5
解决办法
8万
查看次数

如何在循环中向空向量添加元素?

我试图在循环中创建一个空向量,并希望每次将某个元素读入该循环时向该向量添加一个元素.

#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)

但这给了我错误信息.

c++ insert vector

30
推荐指数
2
解决办法
6万
查看次数

如何在SQL循环中插入表300次?

我想在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)

我怎样才能做到这一点?谢谢

t-sql sql-server loops insert

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

在地图中存储标准地图

我必须将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)

但这会引发很多错误.怎么了?

c++ insert std map

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

PHP/MySQL插入空值

我正在努力学习一些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列可能为空,也可能不为空

php mysql null insert

29
推荐指数
3
解决办法
13万
查看次数

Python psycopg2没有插入postgresql表

我正在使用以下内容尝试将记录插入到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)

python postgresql psycopg2 insert

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