mysql相关
# 查看版本
select version();
# 查看状态:
show status;
# 查看参数配置:
show variables;
# 查看指定参数:
show variables like 'slow%';
# 临时修改参数值:
set global max_connect_errors=200;
# mysql重启后失效,需要永久修改编辑/etc/my.cnf配置文件
# 查看消息队列:
show processlist;
show full processlist;
# 使用full可以将查询结果info字段中正在执行的sql语句显示完整
# 查看当前用户:
select user();
库相关
# 显示所有库
show databases;
# 查看当前所在数据库
select database();
# 创建数据库
create database [db_name] character set utf-8 collate utf8_general_ci;;
# 删除数据库
drop database [db_name];
# 切换数据库
use [db_name];
表相关
# 显示库中的表:
show tables;
# 查看表字段:
desc [table_name];
# 查看建表语句(有序显示)
show create table [table_name]\G
# (表格显示)
show create table [table_name];
# 创建表:
CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) ,
`name` varchar(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 自增属性
AUTO_INCREMENT
# 修改自增起始值
alter table [table_name] AUTO_INCREMENT=100;
# 删除表
drop table [table_name];
# 修改表名
alter table [table_name] rename [table_name2];
# 增加字段
alter table [table_name] add `[column_name]` [datatype];
# 删除字段
alter table [table_name] drop column `[column_name]`;
# 修改字段
alert table [table_name] change `[column_name]` `[column_name]` [datatype]
# 增加数据
insert into [table_name] (`[column_name]`, `[column_name2]`) values (0 ,'abc');
# 增加数据,根据主键判断,如果不存在则新增,如果存在则忽略
insert ignore into [table_name] (`[column_name]`, `[column_name2]`) values (0 ,'abc');
# 删除数据
delete from [table_name] where `[column_name]`=1;
# 修改数据
update [table_name] set `[column_name]`=2 where `[column_name]`=1;
# 累加/减数据
update [table_name] set `[column_name]`=`[column_name]`+(1|-1) where `[column_name]`=1;
# UNSIGNED 属性 累减数据
update [table_name] set `[column_name]`= `[column_name]` + case when `[column_name]` > 0 then -1 else 0 end where `[column_name]` in (1, 2);
// 单个字段更新累减
update [table_name] set `[column_name]`=`[column_name]`-1 where `[column_name1]`=1 and `[column_name]`>0
# 查询数据
select `[column_name]`, `[column_name2]`|* from [table_name] where `[column_name]`=2
group by `[column_name]`
having `[column_name]`>1 --针对group by之后再次筛选
order by `[column_name]` asc|desc
limit [start_num], [end_num];
# 存在则更新,不存在则插入
insert into [table_name] (`name`) values (1, 'andy'), (2, 'baby')
on duplicate key update `name`='baby';
# 先删后增
replace into [table_name] (`name`) values (1, 'andy'), (2, 'baby');
索引
# 创建索引
create `[index_name]` on `[table_name]` (`[column_name]`);
create `[index_name]` on `[table_name]` (`[column_name]`, `[column_name]`);
alter `[table_name]` add index `[index_name]` (`[column_name]`);
alter `[table_name]` add primary key (`[column_name]`);
alter `[table_name]` add unique index `[index_name]` (`[column_name]`);
# 删除索引
drop index `[index_name]` on `[table_name]`;
alter `[table_name]` drop index `[index_name]`;
alter `[table_name]` drop primary key;
# 修改索引
alter `[table_name]` drop index `[index_name]` add index `[index_name]` (`[column_name`]);
表结构属性
常用数据类型
| 类型 |
说明 |
| INT |
4比特的整数,有符号的表示范围是-2147483648到2147483647,无符号unsigned的表示范围是0到4294967295。 |
| VARCHAR |
变长(0-65,535)字符串,最大有效长度取决于最大行大小 |
| TEXT |
最多存储 65535(2^16 - 1)字节的文本字段,存储时在内容前使用 2 字节表示内容的字节数 |
| DATE |
日期,支持的范围从 1000-01-01 到 9999-12-31 |
数字数据类型
| 类型 |
说明 |
| TINYINT |
1 字节整数,有符号范围从 -128 到 127,无符号unsigned范围从 0 到 255 |
| SMALLINT |
2 字节整数,有符号范围从 -32768 到 32767,无符号unsigned范围从 0 到 65535 |
| MEDIUMINT |
3 字节整数,有符号范围从 -8388608 到 8388607,无符号unsigned范围从 0 到 16777215 |
| INT |
4比特的整数,有符号的表示范围是-2147483648到2147483647,无符号unsigned的表示范围是0到4294967295。 |
| BIGINT |
8 字节整数,有符号范围从 -9223372036854775808 到 9223372036854775807,无符号unsigned范围从 0 到 18446744073709551615 |
| DECIMAL |
定点数(M,D)- 整数部分(M)最大为 65(默认 10),小数部分(D)最大为 30(默认 0) |
| FLOAT |
单精度浮点数,取值范围从 -3.402823466E+38 到 -1.175494351E-38、0 以及从 1.175494351E-38 到 3.402823466E+38 |
| DOUBLE |
双精度浮点数,取值范围从 -1.7976931348623157E+308 到 -2.2250738585072014E-308、0 以及从 2.2250738585072014E-308 到 1.7976931348623157E+308 |
| REAL |
DOUBLE 的别名(例外:REAL_AS_FLOAT SQL 模式时它是 FLOAT 的别名) |
| BIT |
位类型(M),每个值存储 M 位(默认为 1,最大为 64) |
| BOOLEAN |
TINYINT(1) 的别名,零值表示假,非零值表示真 |
| SERIAL |
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名 |
日期与时间数据类型
| 类型 |
说明 |
| DATE |
日期,支持的范围从 1000-01-01 到 9999-12-31 |
| DATETIME |
日期与时间,支持的范围从 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| TIMESTAMP |
时间戳,范围从 1970-01-01 00:00:01 UTC 到 2038-01-09 03:14:07 UTC,存储为自纪元(1970-01-01 00:00:00 UTC)起的秒数 |
| TIME |
时间,范围从 -838:59:59 到 838:59:59 |
| YEAR |
四位数(4,默认)或两位数(2)的年份,取值范围从 70(1970)到 69(2069)或从 1901 到 2155 以及 0000 |
文本数据类型
| 类型 |
说明 |
| CHAR |
定长(0-255,默认 1)字符串,存储时会向右边补足空格到指定长度 |
| VARCHAR |
变长(0-65,535)字符串,最大有效长度取决于最大行大小 |
| TINYTEXT |
最多存储 255(2^8 - 1)字节的文本字段,存储时在内容前使用 1 字节表示内容的字节数 |
| TEXT |
最多存储 65535 字节,即 64KB(2^16 - 1)字节的文本字段,存储时在内容前使用 2 字节表示内容的字节数 |
| MEDIUMTEXT |
最多存储 16777215 字节,即 16MB(2^24 - 1)字节的文本字段,存储时在内容前使用 3 字节表示内容的字节数 |
| LONGTEXT |
最多存储 4294967295 字节,即 4GB(2^32 - 1)的文本字段,存储时在内容前使用 4 字节表示内容的字节数 |
| BINARY |
类似于 CHAR 类型,但其存储的是二进制字节串而不是非二进制字符串 |
| VARBINARY |
类似于 VARCHAR 类型,但其存储的是二进制字节串而不是非二进制字符串 |
| TINYBLOB |
最多存储 255(2^8 - 1)字节的 BLOB 字段,存储时在内容前使用 1 字节表示内容的字节数 |
| MEDIUMBLOB |
最多存储 16777215 字节,即 16MB(2^24 - 1)字节的 BLOB 字段,存储时在内容前使用 3 字节表示内容的字节数 |
| BLOB |
最多存储 65535(2^16 - 1)字节的 BLOB 字段,存储时在内容前使用 2 字节表示内容的字节数 |
| LONGBLOB |
最多存储 4294967295 字节,即 4GB(2^32 - 1)的 BLOB 字段,存储时在内容前使用 4 字节表示内容的字节数 |
| ENUM |
枚举,可从最多 65535 个值的列表中选择或特殊的错误值 ‘’ |
| SET |
可从最多 64 个成员中选择集合为一个值 |
空间数据类型
| 类型 |
说明 |
| GEOMETRY |
一种能存储任意类型几何体的类型 |
| POINT |
二维空间中的点 |
| LINESTRING |
点之间的线性插值曲线 |
| POLYGON |
多边形 |
| MULTIPOINT |
点的集合 |
| MULTILINESTRING |
点之间的线性插值曲线的集合 |
| MULTIPOLYGON |
多边形的集合 |
| GEOMETRYCOLLECTION |
任意类型几何体对象的集合 |
字段属性
| 类型 |
说明 |
| NULL |
空值 |
| NOT NULL |
不为空值 |
| BINARY |
where子句的字符串比较是不区分大小写的,但是可以使用binary关键字设定where子句区分大小写 |
| UNSIGNED |
无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据 |
| UNSIGNED ZEROFILL |
宽度小于设定的宽度,则自动填充0。例如 tinyint(2) 存储1,查询结果为01,实际上还是1 |
| on update CURRENT_TIMESTAMP |
当执行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,它的值也会跟着更新为当前UPDATE操作时的时间。 |
主键 primary key
# 主键用于唯一标识每一条记录(每个人都有自己唯一的身份证)
# 每一张表只能有一个主键。
# 因为唯一标识,所以主键字段的数据不能为空,并且主键字段的数据值不能重复
# 主键也是一种索引,可以提高查找速率。
创建/修改
craete table [table_name] (id int PRIMARY KEY);
create table [table_name] (id int, PRIMARY KEY(id));
alter table [table_name] modify `id` int(10) primary key;
删除
alter table [table_name] drop primary key;
唯一键 unique key
# 唯一键的功能与主键有点类型,但不同的是主键只能有一个,唯一键可以有多个,而且唯一键的字段的数据允许为空。
# 唯一键可以约束字段,使得字段的数据不能重复
# 如果唯一键同时也有not null,并且表中没有主键的话,在desc查看表结构中会显示成主键
# 如果唯一键也不允许为空,那么功能与主键相同
唯一键的定义方法可以参考主键的。
删除
alter table [table_name] drop index [键名];
自增长 auto_increment
# 自增长的功能是可以使某个字段的数据随着记录的插入而进行增长(不给这个字段插入数据的情况下)
# 自增长的前提是这个字段必须是一个“索引”,比如主键、唯一键
# 自增长的前提这个字段的数据类型是一个数值型的,(如果给了float,也不会增长成小数,而仅仅是整数)
# 一个表只能有一个自增长。
# 只有不给值,或者给null的情况下,才能正确自增长;如果某一次自增长失败了,那么下一次会从当前字段的最大值开始继续自增长。
定义
create table [table_name] (id int primary key auto_increment);
修改 (只能改大,不能变小)
alter table [table_name] auto_increment=值;
默认值 default
# 默认值的功能是当我们不给一个字段赋值的时候,使用默认值作为数据
create table [table_name] (
id int primary key auto_increment,
age int default `0`
)
# 字段描述是用来描述字段的,能在查看数据表创建语句的时候显示出来(不会再select结果中显示出来)
create table [table_name] (
id int primary key auto_increment,
age int default `0` COMMENT '年龄字段'
)
备份相关
# 备份库
$ mysqldump -uroot -p [db_name] > /tmp/[db_name]_bak.sql
# 恢复库
$ mysql -uroot -p [db_name] < /tmp/[db_name]_bak.sql
# 备份表
$ mysqldump -uroot -p [db_name] [table_name] > /tmp/[db_name]_[table_name]_bak.sql
# 恢复表
$ mysql -uroot -p [db_name] < /tmp/[db_name]_[table_name]_bak.sql
# 备份所有库
$ mysqldump -uroot -p -A > /tmp/dbs_all_bak.sql
# 备份库的表结构
$ mysqldump -uroot -p -d [db_name] > /tmp/[db_name]_bak.sql
# 备份库中某表的机构
$ mysqldump -uroot -p -d [db_name] [table_name] > /tmp/[db_name]_[table_name]_bak.sql