insert(data, [returning])
创建一个插入查询,将要插入到行中的属性的哈希值或插入数组作为单个插入命令执行。
如果传递返回的数组,例如['id','title'],它将使用所有具有指定列的所有添加行的数组来解析promise /实现回调。这是返回方法的快捷方式
(1) 在mysql”、“sqlite”、“oracle”中返回新增ID,并放在数组中[5];在“postgresql”中默认返回空数组[],除非设置了“returning”参数。
let banji_id = await knex('banji').insert({name: '测试大牛班'});
输出:
INSERT INTO `banji`(`name`) VALUES ('测试大牛班')
返回: 返回当前记录的ID,格式为[5]
(2) 插入多行,规范空值。
let obj = await knex('banji').insert([{name: '防御班'}, {name: '进攻班'}, {code: '200991', name: '智谋班'}]);
输出:
INSERT INTO `banji` (`code`, `name`) VALUES (DEFAULT, '防御班'), (DEFAULT, '进攻班'), ('200991', '智谋班')
返回: 返回第一个记录的ID,如:[7]
(3) “MySQL”,“SQLite”返回第一个记录的ID;“PostgreSQL”返回所有记录的ID,如下案例。
let obj = await knex.insert([
{name: '防御班'},
{name: '进攻班'},
{code: '200991', name: '智谋班'}
], ['banji_id']).into('banji');
输出:
INSERT INTO `banji` (`code`, `name`) VALUES (DEFAULT, '防御班'), (DEFAULT, '进攻班'), ('200991', '智谋班')
返回: 返回第一个记录的ID,如:[7] ;PostgreSQL返回[7,8,9]
(4) 如果有人喜欢用未定义的密钥NULL代替,DEFAULT则可以useNullAsDefault在knex config中提供配置参数。
const knex = require('knex')({
client: 'mysql',
connection: {
host: '127.0.0.1',
user: 'your_database_user',
password: 'your_database_password',
database: 'myapp_test'
},
useNullAsDefault: true
});
let obj = await knex('banji').insert([{name: '防御班'}, {name: '进攻班'}, {code: '200991', name: '智谋班'}]);
输出:
INSERT INTO `banji` (`code`, `name`) VALUES (NULL, '防御班'), (NULL, '进攻班'), ('200991', '智谋班')