extra 与 duplicate
extra
extra
方法可以用于CURD查询,例如:
Db::name('user')->extra('IGNORE')->insert(['name' => 'think']);
Db::name('user')->extra('DELAYED')->insert(['name' => 'think']);
Db::name('user')->extra('SQL_BUFFER_RESULT')->select();
1、extra('IGNORE')
配合 insert( )
:插入指定字段对应的值,而其他字段被忽略且对应值为缺省值。
2、DELAYED
关键字 延迟 已经在【Mysql 5.6被废弃】,服务器可以接收,但是会忽略这个关键字
3、extra('SQL_BUFFER_RESULT')
配合select()
:查询缓存的结果
duplicate
DUPLICATE
查询的用法示例:
Db::name('user')->duplicate(['score' => 10])->insert(['name' => 'think']);
当主键重复的记录存在时,更新score,不存在时,新增一条数据。
数据库链式操作之extra
与 duplicate
结合使用的案例:
$inserData = array(
array('nickname'=>'helloWorld','email'=>'helloWorld@slong.ink'),
array('nickname'=>'helloPHP','email'=>'helloWorld@slong.ink')
);
$sql = Db::name('user')
->extra('IGNORE')->duplicate(array(
'nickname',
'email',
'update_time' => time()
))->fetchSql(true)->insertAll($inserData);
生成的sql是:
INSERT IGNORE INTO `user` (`nickname` , `email`)
VALUES ( 'helloWorld','helloWorld@slong.ink' ) , ( 'helloPHP','helloWorld@slong.ink' )
ON DUPLICATE KEY UPDATE `nickname` = VALUES(nickname) , `email` = VALUES(email) , `update_time` = 1618224366