Thinkphp
Allen 2022-10-23 00:29:50 4197 1 0 0 0
Thinkphp,Thinkphp笔记,Thinkphp6学习笔记06:数据库的数据新增,修改更新,删除

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笔记
评论
Allen#1Allen 2023-04-16 02:05:26(N) 链接地址

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,但未写入。

顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Thinkphp]   ·   返回顶部