點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Knex 執行多個 Raw SQL

Sam Xiao's Avatar 2021-10-22

實務上雖然大部分都使用 Knew 組合 SQL 或單一 Raw SQL Statement,但有時候可能得同時使用多個 Statement,在 Knex 也沒問題。

Version

MySQL 8.0.18
Knex 0.20.2

SQL

INSERT INTO books (title, price, categoryId) 
VALUES ('Haskell', 100, 4);

UPDATE books
SET categoryId = 5
WHERE title = 'Haskell'

若想同時執行兩個 SQL statement,必須在 statement 之後加上 ; 分隔。

Knex

import knex from 'knex'

let mySQL = knex ({
  client: 'mysql',
  connection: {
    host : 'localhost',
    port: 3306,
    user : 'root',
    password : 'demo',
    database : 'Bookshelf',
    multipleStatements: true
  }
})

let sql = `
  INSERT INTO books (title, price, categoryId) 
  VALUES ('Haskell', 100, 4);

  UPDATE books
  SET categoryId = 5
  WHERE title = 'Haskell'    
`

mySQL.raw(sql).then(console.log)

11 行

multipleStatements: true

建立 connection 時,必須加上 multipleStatements: true

15 行

let sql = `
  INSERT INTO books (title, price, categoryId) 
  VALUES ('Haskell', 100, 4);

  UPDATE books
  SET categoryId = 5
  WHERE title = 'Haskell'    
`

一樣每個 SQL statement 尾巴要加上 ;

Conclusion

  • Knex 也能同時執行多個 raw SQL,別忘了在建立 connection 時加上 multipleStatements: true