【转】数据处理常用的sql语句整理

时间:2023-03-08 18:45:33

一下语句都是基于 mysql数据库

查询是否使用索引

explain  select * FROM t_table1;

结果列的含义:

table:此次查询操作是关联哪张数据表
type:连接查询操作类型,一般根据索引查询的话为const,如果没有索引,则遍历所有数据那么为All(此种方式效率极低)
    possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。
key: 实际使用的索引。如果为NULL,则没有使用索引。
key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
rows:返回请求的数据的行数

新建t_table1 复制 t_table2 的表结构和数据
 CREATE TABLE t_table1 SELECT * FROM t_table2  ;
 
 t_table2 数据复制到 t_table1 
 INSERT INTO t_table1  SELECT * FROM t_table2   ;

多表关联删除
 DELETE t1 FROM t_table1 t1 LEFT JOIN t_table2 t2 ON t1.id=t2.id WHERE t2.id IS NULL;
 
 多表关联更新数据
 UPDATE  t_table1 t2  LEFT JOIN t_table2 t1 ON  t2.name= t1.name set t2.avatar = t1.avatar   ;
   
 截取  substring_index(字段, 截取的符号,1(截取符号之前的)/-1(截取符号之后的))
 SELECT substring_index(time, '.',1) from t_table1  
 
  根据多列查重复数据
 SELECT * FROM t_table1 a  group by  name,avatar HAVING count(1) > 1   ;
 
  查找带中文字符的数据  length 不等于 char_length时说明含有中文
  SELECT * FROM t_table1 WHERE length(name)!=char_length(name);
  
  删除重复数据
   DELETE  FROM t_table1 WHERE id in (SELECT id FROM ( 
SELECT id FROM t_table1 a 
WHERE ((SELECT COUNT(*) FROM t_table1 WHERE id = a.id) > 1) and id not in (
select min(id) from t_table1 group by id having count(*)>1
) ORDER BY id DESC  ) as temp
  );
 
 获取字符长度 LENGTH
 SELECT LENGTH(name) from  t_table1  where LENGTH(name)>50  ;

替换字符 replace(字段,要替换的字符,替换字符)
 update t_table1 set  name = replace(name,'/','+') where name LIKE '%/%';
 
 截取字符 SUBSTRING(字段,从第几个字符开始截取,截取多少位)
 SELECT SUBSTRING(avatar,3,LENGTH(avatar)) from t_table1  LIMIT 1; 
 
 添加唯一键
 ALTER TABLE t_table1 ADD CONSTRAINT UN_t_table1_phoneNumber UNIQUE (phone_number);

原文:https://blog.****.net/qq_27292113/article/details/80008573