【积累】MySql使用

Posted on Posted in 计算机1,004 views

一、语句

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