MySQL日常使用笔记
逍遥山人的MySQL使用笔记,持续更新中
表结构
新建表以及添加表和字段的注释
create table t_user(
ID INT(11) primary key auto_increment comment '主键',
NAME VARCHAR(255) comment '姓名',
CREATE_TIME date comment '创建时间'
)comment = '用户信息表';
修改字段类型
alter table tablename modify column column_name varchar(30);
查看表结构
查看表的字段、字段类型、索引等DESC tablename;
或
SHOW COLUMNS FROM tablename;
或包含字符集、字段注释等
SHOW FULL FIELDS from table_name;
查看表生成的DDL
注意表名不加单引号
show create table 表名;
查看分区表的分区情况
SELECT
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
FROM
information_schema.PARTITIONS
WHERE
table_schema = SCHEMA()
AND table_name = 'table_name';
分区操作参考:http://blog.csdn.net/youzhouliu/article/details/52757043
注释
修改表/字段的注释
alter table t_user comment = '修改后的表注释信息(用户信息表)';
修改字段注释
alter table t_user modify column id int comment '主键ID';
查看所有表的注释
SELECT table_name 表名, table_comment 表说明
FROM information_schema.TABLES
WHERE table_schema = '数据库名'
ORDER BY table_name;
查询所有表及字段的注释
SELECT
a.table_name 表名,
a.table_comment 表说明,
b.COLUMN_NAME 字段名,
b.column_comment 字段说明,
b.column_type 字段类型,
b.column_key 约束
FROM information_schema.TABLES a
LEFT JOIN information_schema. COLUMNS b ON a.table_name = b.TABLE_NAME
WHERE a.table_schema = '数据库名'
ORDER BY a.table_name;
查询某表的所有字段的注释
select
COLUMN_NAME 字段名,
column_comment 字段说明,
column_type 字段类型,
column_key 约束
from information_schema.columns
where table_schema = '数据库名' and table_name = '表名';
或者
show full columns from 表名;
索引
创建索引
ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引
ALTER TABLE table_name ADD INDEX index_name (column_list);
ALTER TABLE table_name ADD UNIQUE (column_list);
ALTER TABLE table_name ADD PRIMARY KEY (column_list);
CREATE INDEX可对表增加普通索引或UNIQUE索引
CREATE INDEX index_name ON table_name (column_list);
CREATE UNIQUE INDEX index_name ON table_name (column_list);
table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义。
另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。
删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
前两条相同,第三条在主键时用;
查看表的索引
查看表所有索引的具体情况
SHOW KEYS FROM tablename;
SHOW INDEX FROM tablename;
注释:
Table 表的名称。
Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。
Key_name 索引的名称。
Seq_in_index 索引中的列序列号,从1开始。
Column_name 列名称。
Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。
Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。
Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。
Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。查看某一个库下某一张表的索引
SELECT DISTINCT
lower(index_name) index_name,
lower(index_type) type
FROM
information_schema.statistics
WHERE
table_schema = 'employees' AND table_name = 'employees';
查看某一个库下某一张表的某一个索引
SELECT
lower(column_name) column_name,
seq_in_index column_position
FROM
information_schema.statistics
WHERE
table_schema = 'employees' AND table_name = 'employees' AND index_name = 'primary';
连接
交叉连接(CROSS JOIN)
使用交叉连接的时候,结果集由第一个表的所有行与第二个表的所有行的结合,表之间不需要关系;
可用于在统计中构造连续的数据,比如统计每天/周/月的(交易等)数据,为使每天/周/月都有数据,可用交叉连接的方式构造数据;
使用形式如下:SELECT *
FROM T1
CROSS JOIN T2;
日期或时间操作
格式化(date_format)
定义
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。语法
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的格式有:
模式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (00-23) %h 小时 (01-12) %I 小时 (01-12) %i 分钟,数值(00-59) %j 年的天 (001-366) %k 小时 (0-23) %l 小时 (1-12) %M 月名 %m 月,数值(00-12) %p AM 或 PM %r 时间,12-小时(hh:mm:ss AM 或 PM) %S 秒(00-59) %s 秒(00-59) %T 时间, 24-小时 (hh:mm:ss) %U 周 (00-53) 星期日是一周的第一天 %u 周 (00-53) 星期一是一周的第一天 %V 周 (01-53) 星期日是一周的第一天,与 %X 使用 %v 周 (01-53) 星期一是一周的第一天,与 %x 使用 %W 星期名 %w 周的天 (0=星期日, 6=星期六) %X 年,其中的星期日是周的第一天,4 位,与 %V 使用 %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y 年,4 位 %y 年,2 位 示例:
SELECT date_format(CURDATE(), '%Y-%m-%d %h:%m:%s');
SELECT date_format(CURDATE(), '%Y/%m/%d');
SELECT STR_TO_DATE('2016-08-08', '%Y-%m-%d %h:%m:%s');
SELECT DATE_FORMAT(NOW(),'%Y%m%d');
毫秒数与日期转化
-- 毫秒数转化为日期
select FROM_UNIXTIME(1364176514656/1000,'%Y-%m-%d %h:%i:%s') as dt;
-- 日期转化为毫秒数
select UNIX_TIMESTAMP('2011-05-31 23:59:59');
正则表达式(regexp)
操作符
模式 描述 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置 . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式 [...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a' [^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p' p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food" * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,} + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,} {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次 实例
匹配连续数字
SELECT * FROM ofchatlog a WHERE a.`sender` REGEXP 'jf[0-9]{5}' LIMIT 10;
匹配三个字符串(或的关系)
SELECT *
FROM ofchatlog a
WHERE a.sender REGEXP 'xx1|xx2|xx3';
不匹配(包含)
用not regexp 'xxx'
实现开窗函数
类似Oracle和SqlServer的 函数名(列) OVER(选项)
分组排序功能
类似格式row_number() over(partition by )
示例1:
create table heyf_t10 (empid int ,deptid int ,salary decimal(10,2) ); select empid,deptid,salary,rank
from (
select heyf_tmp.empid,heyf_tmp.deptid,heyf_tmp.salary,@rownum:=@rownum+1,
if(@pdept=heyf_tmp.deptid,@rank:=@rank+1,@rank:=1) as rank,
@pdept:=heyf_tmp.deptid
from (
select empid,deptid,salary
from heyf_t10
order by deptid asc ,salary desc
) heyf_tmp ,(select @rownum := 0 , @pdept := null ,@rank := 0) a
) result;
示例2:
SELECT
-- rownum 判断@sp_id 是否与当前的sp_id一致,一致加1,否则重置为1
IF(@sp_id = a.sp_id,@i := @i + 1,@i := 1) rownum
,a.*
-- 设置@sp_id 等于上一个 sp_id
,(@sp_id := a.sp_id)
FROM jf_sp_contact a,(SELECT @i := 0,@sp_id := 0) AS b
WHERE a.sp_id = 3334
注意:示例1生效,而示例2无效,原因是该逻辑是针对按规则进行排序的数据进行标识;
过程,作业和触发器
查询作业
SELECT a.name,b.command
FROM msdb.dbo.sysjobs a
INNER JOIN msdb.dbo.sysjobsteps b ON a.job_id = b.job_id
WHERE b.command LIKE '%P_GZ_HeavyPaste_UpOrder%';
查询过程
SELECT a.name,b.text
FROM sys.objects a
INNER JOIN sys.syscomments b ON a.object_id = b.id
WHERE a.type = 'P' AND b.text LIKE '%T_SEM_PostSnap%';
查询触发器
SELECT * FROM sys.objects WHERE TYPE = 'tr';
查询视图
SELECT * FROM sysobjects WHERE xtype='V';
库
- 查看库、表、字段等
查看所有的库
SHOW DATABASES;
或者使用系统表,除库名外还能得到数据库配置信息
SELECT
lower(schema_name) schema_name
FROM
information_schema.schemata
WHERE
schema_name NOT IN (
'mysql',
'information_schema',
'test',
'search',
'tbsearch',
'sbtest',
'dev_ddl'
);
创建或删除库
创建库-- 按照默认的字符集和排序规则创建数据库
CREATE DATABASE test1;
-- 指定字符集和排序规则
CREATE DATABASE test1 CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
-- 创建数据库时如果已存在会报错,避免报错可以先判断是否存在
CCREATE DATABASE IF NOT EXISTS test1;
删除库
DROP DATABASE test;
查看某一个库中的所有表
SELECT
table_name,
create_time updated_at,
table_type,
ENGINE,
table_rows num_rows,
table_comment,
ceil(data_length / 1024 / 1024) store_capacity
FROM
information_schema.TABLES
WHERE
table_schema = 'employees' AND table_name NOT LIKE 'tmp#_%' ESCAPE '#';
查看某一个库下某一个表的所有字段
SELECT
lower(column_name) column_name,
ordinal_position position,
column_default dafault_value,
substring(is_nullable, 1, 1) nullable,
column_type data_type,
column_comment,
character_maximum_length data_length,
numeric_precision data_precision,
numeric_scale data_scale
FROM
information_schema.COLUMNS
WHERE
table_schema = 'employees' AND table_name = 'employees';
判断库中是否存在包含
status的表SELECT table_name FROM information_schema.TABLES WHERE table_name LIKE '%status%';
判断库中是否存在包含
order的存储过程SELECT * FROM information_schema.ROUTINES a WHERE a.SPECIFIC_NAME LIKE '%order%';
查看服务器版本;
show variables;
 
优化分析
- 分析查询语句的执行计划
 
EXPLAIN
SELECT * FROM tablename LIMIT 10;
- 表结构优化建议
 
select column from table_name procedure analyse();
强制使用某索引
FORCE INDEX(索引名)
查询是否有表被锁
show OPEN TABLES where In_use > 0;
MySQL日常使用笔记的更多相关文章
- Hive Sql的日常使用笔记
		
date: 2019-03-22 17:02:37 updated: 2020-04-08 16:00:00 Hive Sql的日常使用笔记 1. distinct 和 group by distin ...
 - 《高性能MySQL》读书笔记--锁、事务、隔离级别 转
		
1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...
 - MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
 - MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
 - MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
 - MySQL日常应用和操作记录
		
整理MySQL日常操作. 1.知道一个字段名,怎样查到它在数据库里的哪张表里? USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE ...
 - mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量
		
继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...
 - mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计
		
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
 - mysql颠覆实战笔记(一)--设计一个项目需求,灌入一万数据先
		
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
 
随机推荐
- CSP-201609-3 炉石传说
			
问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示).游戏在一个战斗棋盘上进行 ...
 - Django rest framework框架中有哪些组件
			
认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由系统 视图 渲染器 认证 自定义认证的类 """ from rest_fram ...
 - 引入C/C++动态库
			
[DllImport("SocketAPI.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = t ...
 - border-1px的实现(stylus)如何在移动端设置1px的border
			
在这里我只介绍下边框的实现: 当样式像素一定时,因手机有320px,640px等.各自的缩放比差异,所以设备显示像素就会有1Npx,2Npx.为保设计稿还原度,解决就是用media + scale. ...
 - VS中编码格式的问题(待总结)
			
今天又遇到这样的事情了,VS中代码明明是正确的,却报某个变量未定义.百思不得解,前面增加了一个换行之后,竟然又神奇般的复原了. 最后确认是编码格式的问题,后来把有问题的那部分代码粘贴到微软的" ...
 - Oracle常用SQL时间函数
			
1.查询当前日期和时间 select sysdate from dual; 2.查询本月最后一天 select last_day(sysdate) from dual; 3.查询前后多少月 ) fro ...
 - Linux中制作静态库
			
静态库生成: 1.第一步:生成.o文件 2.第二步:将所有.o文件打包 ar src libMyTest.a *.o 生成出libMyTest.a 3.使用: 第一种:gcc main.c ...
 - C++的const成员函数
			
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank = ‘’; blank = ‘\n’; // 错误 面向对象 ...
 - 阿里云linux挂载磁盘
			
1)使用fdisk -l命令查看主机上的硬盘 2.使用mkfs.ext4命令把硬盘格式化: mkfs.ext4 磁盘名称 如:mkfs.ext4 /dev/vdb/ 3. 使用mount命令 ...
 - 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:按键提示
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...