用group_concat函数,可以轻松的把分组后,name 相同的数据拼接到一块,组成一个字符串,用逗号分隔。
2. char_length通过该函数就能获得字符长度。
3.locate在某个字符串中的地方
4.replace将字符串中的字符 A 替换成 B。REPLACE(name,lsquo;Arsquo;,lsquo;Brsquo;)
5.now获得目前时间
6.insert into hellip; selectINSERTINTO`brand`(`id`,`code`,`name`,`edit_date`)selectnull,code,name,now(3)from`order`wherecodein(004,005);
如此就能将 order 表中的部分数据,很轻松插入到 brand 表中。
7.insert into hellip; ignoreINSERTignoreINTO`brand`(`id`,`code`,`name`,`edit_date`)VALUES(123,108,苏三,now(3));
假如 brand 表中已经存在 name 为苏三的数据了,则该 sql 语句也能正常实行,并不会显示错误。由于它会忽视异常,返回的实行结果影响行数为 0,它不会重复插入数据。
8.select hellip; for updatebegin;select*from`user`whereid=1forupdate;//业务逻辑处置update`user`setscore=score-1whereid=1;commit;
如此在一个事务中用for update锁住一行记录,其他事务就不可以在该事务提交之前,去更新那一行的数据。
应该注意的是 for update 前的 id 条件,需要是表的主键或者唯一索引,不然行锁或许会失效,大概变成表锁
9.on duplicate key update一般情况下,大家在插入数据之前,一般会先查看一下,该数据是不是存在。假如没有,则插入数据。假如已存在,则不插入数据,而直接返回结果。
在没什么并发量的场景中,这种做法是没那些问题的。但假如插入数据的请求,有肯定的并发量,这种做法就或许会产生重复的数据。
当然预防重复数据的做法不少,譬如:加唯一索引、加分布式锁等。
但这类策略,都没法做到让第二次请求也更新数据,它们一般会判断已经存在就直接返回了。
这样的情况可以用on duplicate key update语法。
该语法会在插入数据之前判断,假如主键或唯一索引没有,则插入数据。假如主键或唯一索引存在,则实行更新操作。
INSERTINTO`brand`(`id`,`code`,`name`,`edit_date`)VALUES(123,108,苏三,now(3))onduplicatekeyupdatename=苏三,edit_date=now(3);
如此一条语句就能轻松解决需要,既不会产生重复数据,也能更新最新的数据。
但应该注意的是,在高并发的场景下用on duplicate key update语法,或许会存在死锁的问题,所以要依据实质状况酌情用。
10.show create table有时,大家想迅速查询某张表的字段状况,一般会用desc命令
desc`order`;
查询索引信息
showindex
大家可以看到很完整的建表语句,表名、字段名、字段种类、字段长度、字符集、主键、索引、实行引擎等都能看到
showcreatetableshowcreatetable`order`;11.create table hellip; select
有时,大家需要迅速备份表。
一般情况下,可以分两步走:
创建一张临时表
将数据插入临时表
创建临时表
createtableorder_2022121819like`order`;
将 order 表的数据插入到 order_2022121819 表中,也就是达成数据备份的功能。
insertintoorder_2022121819select*from`order`;
整理上面两条命令
createtableorder_2022121820select*from`order`;






