我正在使用sqljocky将数据插入MySQL数据库。我需要先截断一个表,然后在其中插入多行。我会在一个事务中执行此操作,但似乎sqljocky现在根本不支持这个(或者我在dart和sqljocky中很新)。
我找到的解决方案如下,但我想知道是否有更好的解决方案。
// Start transaction
pool.query('START TRANSACTION').then((r) {
// Truncate table
pool.query('TRUNCATE myTable').then((r) {
// Prepare statement to insert new data
pool.prepare('REPLACE INTO myTable (Id, Name, Description) VALUES (?,?,?)').then((query) {
// Execute query inserting multiple rows
query.executeMulti(myArrayValues).then((results) {
// Other stuff here
pool.query('COMMIT').then((r) {
...
老实说,我仍然想知道这段代码是否真的执行了一个transactioned查询!
答案 0 :(得分:1)
以下是使用事务支持重写的相同代码:
// Start transaction
pool.startTransaction().then((trans) {
// Delete all from table
trans.query('DELETE FROM myTable WHERE 1=1').then((r) {
// Prepare statement
trans.prepare('REPLACE INTO myTable (Id, Name, Description) VALUES (?,?,?)').then((query) {
// Execute query inserting multiple rows
query.executeMulti(myArrayValues).then((results) {
// Stuff here
// Commit
trans.commit().then((r) { ...
答案 1 :(得分:0)
使用ConectionPool.startTransaction()
。
* You
* must use this method rather than `query('start transaction')` otherwise
* subsequent queries may get executed on other connections which are not
* in the transaction.
尚未尝试过。