一、语句
1、insert一个select查询
insert into XGC.User(username,password,role,rid,nickname) SELECT sid, '$2a$04$P85qlm9Gbb49bdvvNNdlbuULsx8fiHpTb9ZCxDuGYFYDZ5EnabKX2', 'ROLE_STUDENT', sid, name FROM XGC.student;
2、嵌套更新
update student set classId =(select c.id from Class c where c.name = class);
二、函数
1、length(str): 是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符;
2、char_length(str):不管汉字还是数字或者是字母都算是一个字符;
3、cast(1 as char(8)):数字转char;
4、concat(col_int):数字转varchar;
5、CONCAT(s1,s2,s3,…):连接字符串,千万不要用+,因为只会取最后一个字符串;
三、错误
1、Error Code: 1093. You can't specify target table 'Organization' for update in FROM clause
begin; update Organization set parentId = ( select distinct o.id from student s left join Organization o on s.department =o.name where s.class = name ); rollback;
【原因】:在更新或删除目标表中数据的时候如果使用子查询,目标表不能在子查询的From语句中出现。
【解决】:新建临时表
create table tmp_department as select distinct s.class,s.department,s.college,o.id as departmentId from student s left join Organization o on s.department =o.name; begin; update Organization set parentId = ( select distinct d.departmentId from tmp_department d where d.class = name and id<900 ); rollback;
四、正反模糊查询
一般来讲,我们使用模糊查询是如下的,其查询结果是用name中包含‘海南州藏族自治州’的所有记录,即‘海南州藏族自治州’是name的字串。
SELECT * FROM `citys` WHERE name like '%海南州藏族自治州%'
但是还有另外一种应用场景,如果要找name是‘海南州藏族自治州’字串的记录呢?其实很简单,转换一下思路即可:
SELECT * FROM `citys` WHERE '海南藏族自治州' like concat('%',name,'%')转载标明出处:https://blog.evanxia.com/2015/12/138