10。数据库的数据新增
三种方式:1.单数据新增。2.批量数据新增。3.save()新增
一.单数据新增
1.使用insert()防法可以向数据表添加一条数据,更多的字段采用默认
$data = [
'username'=>'辉夜',
'password'=>'123',
'gender'=>'女',
'email'=>'[email protected]' ,
'price'=>90,
'details'=>'123'
];
Db::name(‘user‘)->insert( $data);
2.如果新增成功,insert()方法会返回一个1值;
return Db::name(‘user‘)->insert( $data);
3.如果你添加一个不存在的字段数据,会抛出一个异常Exception;
4.如果想强行新增抛弃不存在的字段数据,则使用strick(false)方法,忽略异常;
Db::name('user‘)->strict(false)->insert( $data);
...
5.如果我们采用的数据库是mysql,可以支持replace 写入;
6. insert和 replace 写入的区别,前者表示表中存在主键相同则报错,后者则修改
Db::name('user')->replace()->insert($data) ;
return Db::getLastsql();
7.使用insertGetId()方法,可以在新增成功后返回当前数据ID;
return Db::name('user')->insertGetId($data);
+++
二.批量数据新增
1.使用insertAl1()方法,可以批量新增数据,但要保持数组结构一致;
$data = [
[
'username'=>'辉夜',
'password'=>'123',
'gender'=>'女',
'email'=>'[email protected]' ,
'price'=>90,
'details'=>'123'
],
[
'username'=>'辉夜',
'password'=>'123',
'gender'=>'女',
'email'=>'[email protected]' ,
'price'=>90,
'details'=>'123'
]
];
return Db::name('user')->insertAll($data);
返回2,新增成功
...
2.批量新增也支持replace()方法,添加后改变成replace into;
Db::name('user')->replace()->insertAl1($data);
...
三. save()新增
1. save()方法是一个通用方法,可以自行判断是新增还是修改(更新)数据;
2. save()方法判断是否为新增或修改的依据为,是否存在主键,不存在即新增;
Db::name('user')->save($data);
===
11。数据库的修改删除
一.数据修改
1.使用update()方法来修改数据,修改成功返回影响行数,没有修改返回0;
$data = ['username '=>’李白'];
return Db::name('user')->where('id',38)->update($data);
2.如果修改数据包含了主键信息,比如 id,那么可以省略掉where条件;
$data=['id'=>231,'username'=>'李黑'];
return Db::name('user')->update($data);
返回1
如果修改和原来的一致,返回0,无修改。
3.如果想让一些字段修改时执行sQL函数操作,可以使用exp()方法实现;
Db::name('user')->where('id',232)
->exp('email','UPPER(email)')
->update();
4.如果要自增/自减某个字段,可以使用inc/dec方法,并支持自定义步长;
Db::name('user')->where('id', 232)
->inc('price')
->dec('status',2)
->update();
5.一个更加简单粗暴灵活的方式,使用静态:: raw()方法实现3,4点的内容;
Db::name('user') ->where('id', 232)
->update([
'email'=>Db::raw('UPPER(gmail)'),
'price'=>Db::raw('price +1')
'status'=>Db::raw('status - 2')]
);
6.使用save()方法进行修改数据,这里必须指定主键才能实现修改功能;
Db::name('user')->where('id',232)->save(['username' =>'李白']);
二.数据删除
1.极简删除可以根据主键直接删除,删除成功返回影响行数,否则0;
return Db::name('user') ->delete(51);
2.根据主键,还可以删除多条记录;
return Db::name('user')->delete([48,49, 50]);
返回3(新版本没问题,老版本返回有问题)
3.正常情况下,通过where()方法来删除;
Db::name('user')->where('id', 47)->delete();
4.通过true参数删除数据表所有数据,我还没测试,大家自行测试下;
Db::name('user')->delete(true);
Tag: Thinkphp Thinkphp笔记insert测试
public function insert(){
$data=[
'user_id'=>1052,
'user_name'=>'u1052',
'user_pwd'=>'sfsfafsadfasdf',
'user_email'=>'[email protected]',
];
echo db::name("user")->replace()->insertGetId($data)."<br>";
return db::getlastSql();
}
返回
1
REPLACE INTO `ty_user` SET `user_id` = 1052 , `user_name` = 'u1052' , `user_pwd` = 'sfsfafsadfasdf' , `user_email` = '[email protected]'
public function insertall(){
$data=[
[
'user_id'=>1053,
'user_name'=>'u1053',
'user_pwd'=>'sfsfafsadfasdf',
'user_email'=>'[email protected]',
],
[
'user_id'=>1054,
'user_name'=>'u1054',
'user_pwd'=>'sfsfafsadfasdf',
'user_email'=>'[email protected]',
],
];
echo db::name("user")->replace()->insertall($data)."<br>";
return db::getlastSql();
}
2
REPLACE INTO `ty_user` (`user_id` , `user_name` , `user_pwd` , `user_email`) VALUES ( 1053,'u1053','sfsfafsadfasdf','[email protected]' ) , ( 1054,'u1054','sfsfafsadfasdf','[email protected]' )
数据表不使用自增主键时,Replace,insertGetId不管用。
都返回1,但未写入。