Mysql杂记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 插入多条数据、查询分组并统计总数用、mysql正则、事务、alter、索引、复制表、获取服务器元数据、统计重复数据、导入数据、sql函数。
-- SELECT * FROM tb_dept t,time tt WHERE tt.id=3 ;


1、

SELECT id FROM tb_dept  WHERE id =3 UNION ALL SELECT id FROM time WHERE id=3;


CREATE TABLE `employee_tbl` (
  `id` int(11) NOT NULL,
  `name` char(10) NOT NULL DEFAULT '',
  `date` datetime NOT NULL,
  `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


2、 插入多条数据


INSERT INTO alter_test(name,created,updated) VALUES('Tina',SYSDATE(),SYSDATE()),('Jame',SYSDATE(),SYSDATE());
SELECT  * FROM employee_tbl;


3、查询分组并统计总数用


with ROLLUP
SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;


4、 mysql正则


-- 查找name字段中以'ok'为结尾的所有数据匹配是REGEXP 不匹配前面加上not


SELECT dept FROM tb_dept WHERE dept REGEXP 'R$';


5、事务:


-- 原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)


CREATE TABLE `aa` (
`id`  int NOT NULL AUTO_INCREMENT ,
`column_name`  varchar(20) NULL ,
PRIMARY KEY (`id`)
);


6、alter


-- 重命名

ALTER TABLE aa RENAME TO alter_test;


-- 修改列名

ALTER TABLE alter_test CHANGE column_name name VARCHAR(10);


-- 显示表的状态

SHOW TABLE   STATUS LIKE 'alter_test';


-- 修改字段类型

ALTER TABLE alter_test MODIFY name datetime;


7、 索引


-- 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

--

-- 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

--

-- 上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

--

-- 建立索引会占用磁盘空间的索引文件。


-- 删除索引是drop


-- 索引失效:        1、.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因);要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引


--                          2、对于多列索引,不是使用的第一部分(第一个),则不会使用索引;


--                          3、like查询是以%开头;


--                          4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引;


--                          5、查询条件使用函数在索引列上,或者对索引列进行运算;


--                          6、not in ,not exist


--                        全值匹配我最爱,最左前缀要遵守;


--                        带头大哥不能死,中间兄弟不能断;


--                        索引列上少计算,范围之后全失效;


--                        LIKE百分写最右,覆盖索引不写星;


--                        不等空值还有or,索引失效要少用。


--                     left join(左连接):右表创建索引。


--                     right join(右连接):左表创建索引。


--                     简记:左右外连接,索引相反建(left:右表建,right:左表建)。


8、复制表


CREATE TABLE test SELECT * FROM alter_test where 1=2; /*复制表结构*/
CREATE TABLE test1 SELECT * FROM alter_test /*复制表结构和数据*/


9、获取服务器元数据


--             SELECT VERSION( )    服务器版本信息


--             SELECT DATABASE( )    当前数据库名 (或者返回空)


--             SELECT USER( )    当前用户名


--             SHOW STATUS    服务器状态


--             SHOW VARIABLES    服务器配置变量


10、统计重复数据


SELECT * FROM test1 GROUP BY NAME HAVING COUNT(*) >1;


-- 如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。


-- 删除重复数据 复制表(结构和数据),然后删除原表,再修改临时表名称


CREATE TABLE temp SELECT *FROM test1 GROUP BY name;
DROP TABLE test1;


ALTER TABLE temp RENAME TO test1;


-- 11、导出数据 导出路径在mysql安装盘的data/数据库名/文件名

SELECT * FROM test1 INTO OUTFILE 'test.txt';


12、 导入数据


--      mysql 命令导入;mysql -uroot -p123456 < sql的文件位置;
--      source命令导入:mysql> create database abc;      # 创建数据库
--                                           mysql> use abc;                  # 使用已创建的数据库 
--                                             mysql> set names utf8;           # 设置编码
--                                             mysql> source sql文件的位置  # 导入备份数据库
--             LOAD DATA 导入数据:LOAD DATA LOCAL INFILE 'D:/mysql/data/xiaojie/test.txt' INTO TABLE test;、
--      mysqlimport 导入数据


13、sql函数


ASCII(str):返回字符串 s 的第一个字符的 ASCII 码。eg:

SELECT ASCII(name) FROM test;


CHAR_LENGTH(str):返回字符数。eg :

SELECT CHAR_LENGTH(name) FROM test;


CHARACTER_LENGTH(str):返回字符数. eg:

SELECT CHARACTER_LENGTH(name) FROM test;


CONCAT(str1,str2,...) :字符串 s1,s2 等多个字符串合并为一个字符串。eg:

SELECT CONCAT('xiaoming','xiaoli','xiaohua') as NAME;


CONCAT_WS(separator,str1,str2,...):字符串连接 但是中间有个分隔符 eg:

SELECT CONCAT_WS('-','xiaoming','xiaoli','xiaohua') as NAME;


FIELD(str,str1,str2,str3,...) 返回第一个字符串 str 在字符串列表(str1,str2...)中的位置;

SELECT FIELD('miss','miss','start','skssed','miss','miss');


FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配到第一个字符串的位置;

SELECT FIND_IN_SET('b','a,b,c,d,e,f,b');


FORMAT(X,D):函数将数字x格式化保留小数后d位,最后一位四舍五入;SELECT FORMAT('2541231.23549',2); 输出结果--------2,541,231.24;
INSERT(str,pos,len,newstr):用newstr替换字符串str从pos开始长度为len的字符串; SELECT INSERT("www.baidu.com",2,6,"sina");----------wsinadu.com;
LOCATE(s1,s):从s中获取s1第一次出现的位置: SELECT LOCATE('china','ilovechina');-----------6
LCASE(s)/LOWER(s):将 s转小写字母: SELECT LCASE('ILOVEYOU');
LEFT(str,len):选取字符串左侧的len个字符; SELECT LEFT('china','3');
LPAD(str,len,padstr):用padstr添加到字符串(前面添加)str是字符长度到len: SELECT LPAD('aa',5,'bb');-----bbbaa;
LTRIM(str):去掉字符串str开始处的空格;SELECT LTRIM('  study day day up');----------study day day up
MID(s,n,len)/SUBSTR(s, start, length)/SUBSTRING(s,n,len):从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len);SELECT MID('ilove',2,4);-----------love;
POSITION(s1 IN s):从字符串 s 中获取 s1 的开始位置:SELECT POSITION('s' IN 'sabcdsdyu');
REPEAT(str,count): 将字符串str重复几次: SELECT REPEAT ('a',5);
REPLACE(s,s1,s2):将字符串 s2 替代字符串 s 中的字符串 s1: SELECT REPLACE('goodgoodstudy','o','a');--------gaadgaadstudy;
REVERSE(s):倒置字符串顺序; SELECT REVERSE('abcd');
`RIGHT`(str,len):返回字符串右边的len长度字符: SELECT RIGHT('good',1);
TRIM(s):去掉两端的空格: SELECT TRIM('   ssss   ');
UCASE(str)/UPPER(str):转字符为大写; SELECT UPPER('xioaming');
/*************************数字函数***********************************/
ABS(X):绝对值
ACOS(X)等三角函数:求反余弦值; SELECT ACOS(1);
CEIL(X)/CEILING(X):向上取整 SELECT CEIL(-1.5);
DEGREES(X):将弧度数转为角度:SELECT DEGREES(3.14159365358979);
n DIV m :SELECT 10 DIV 2;----5;
EXP(X):求自然数e的x次幂的值;
FLOOR(X):向下取整; SELECT FLOOR(-1.5);
GREATEST(value1,value2,...): 返回最大值;
LEAST(value1,value2,...):返回最小值;
POW(X,Y)/POWER(X,Y):返回x的y次幂;
RAND():返回0-1的随机数; SELECT RAND();
ROUND(X):返回距离x最近的整数: SELECT ROUND(-2.89);
SQRT(X):返回x的平发根: SELECT SQRT(4);
TRUNCATE(X,D) 对x保留小数 不会四舍五入 SELECT TRUNCATE(2.654523654,1);
/*************************日期函数***************************************************/
ADDDATE(d,n): 在当前日期增加几天 SELECT ADDDATE('2020-01-04',3);
ADDTIME(d,n):在当期时间加上几秒 SELECT ADDTIME('2020-01-07 16:04:25',35);
CURRENT_DATE()/CURDATE():返回当前日期 SELECT CURDATE();------2020-01-07;
`CURRENT_TIME`()/CURDATE();当前时间 SELECT CURRENT_TIME();
`CURRENT_TIMESTAMP`();当前日期和时间 SELECT CURRENT_TIMESTAMP();
DATEDIFF(d1,d2):返回时间差天数d1-d2; SELECT DATEDIFF('2019-01-01','2020-01-01'); 
DATE_FORMAT(d,f);格式化时间;
DATE_SUB(date,INTERVAL expr type) 当前日期减去: SELECT DATE_SUB(NOW(),INTERVAL 2 DAY);
DAYNAME(date): 返回周几 ;
DAYOFMONTH(date): 计算是本月的第几天; SELECT DAYOFMONTH(NOW());
`DAY`(date): 返回天数;
PERIOD_DIFF(P1,P2) 返回月份差: SELECT PERIOD_DIFF('2020-01-01','2020-01-02');
SEC_TO_TIME(seconds)将秒数改成时分秒: SELECT SEC_TO_TIME(120);
STR_TO_DATE(str,format):将字符串转为时间格式: SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
/*****************************高级函数***********************************/
BIN(N):放回二进制编码 : SELECT BIN(3);
CONNECTION_ID():服务器的连接数: SELECT CONNECTION_ID();
IF(expr,v1,v2):如果满足表达式值为v1 不然值为v2 SELECT IF(1>2,1,2); ------2
IFNULL(v1,v2);如果为null v1不然v2 ;
NULLIF(v1,v2):比较两个字符串相等返回null 不然返回v1: SELECT NULLIF('a','b');
SESSION_USER();当前用户: SELECT SESSION_USER(); --------root@localhost;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
MySQL必知必会—读书笔记
MySQL必知必会—读书笔记
|
存储 SQL 关系型数据库
MySQL阅读网上MySQL文章有感的杂记
MySQL阅读网上MySQL文章有感的杂记
62 0
|
存储 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库
|
SQL 关系型数据库 MySQL
|
SQL 存储 安全
mysql必知必会读书笔记
mysql必知必会读书笔记
mysql必知必会读书笔记
|
SQL 存储 关系型数据库
MySQL 学习记录系列(五)
错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
162 0
MySQL 学习记录系列(五)