MySQL指令笔记
-- 双中划线+空格: 单行注释, 与#相同 -- 链接数据库 mysql.exe -h localhost -P3306 -uroot -p -- 查看服务器的对外处理字符集 show variables like 'character_set%'; -- 修改服务器认为的客户端数据的字符集为gbk;(单次访问有效) set character_set_client = gbk; -- 修改服务器给定的字符集为gbk;(单次访问有效) set character_set_results = gbk; -- 快捷设置字符集(单次访问有效) set names gbk; -- 查看支持的存储引擎 show engines; show engines\G;
-- 查看数据库连接用户的操作情况, root用户可查看所有用户
show processlist; -- 数据库操作 -- 增 -- 创建数据库 create database mydatabase charset utf8; -- 创建关键字数据库需用反引号 create database `database` charset utf8; -- 创建中文数据库(先告诉服务器当前中文的字符集) set names gbk; create database 中国 charset utf8; -- 删 -- 删除数据库 drop database 数据库名字; -- 改 -- 修改数据库mydatabase的字符集 alter database mydatabase charset gbk; -- 查 -- 查看所有数据库 show databases; -- 查看指定部分的数据库: 模糊查询 show databases like 'pattern'; -- pattern是匹配模式 -- %: 匹配多个字符 -- _: 匹配单个字符 -- 查看以abc_开始的数据库: _需要被转义 show databases like 'abc\_%'; -- 查看数据库创建语句 show create database 数据库名称; -- 进入数据库环境 use 数据库名字; -- 表操作 -- 增 -- 增加表(若当前为某一数据库环境下,不用制定数据库名) create table [if not exists] 数据库名.表名( 字段名字 数据类型 [not null] [unique] [default 默认值], 字段名字 数据类型 [primary key] [comment '注释'] )[表选项]; -- if not exists: 如果表名不存在,就创建,否则不执行创建代码(检查功能) -- unique: 不能重复 -- 表选项: 控制表的表现 -- 字符集: charset/character set 具体字符集; -- 保证表中数据存储的字符集 -- 校对集: collate 具体校对集; -- 存储引擎: engine 具体存储引擎;(innodb 和 myisam) -- primary key: 将该列设为主键, 主键不能为空 -- 复合主键: 在最后加 primary key(字段名, 字段名) -- not null: 表示该字段不能为空 -- default 默认值: 为该字段指定默认值 -- 外键: foreign key(本表字段名) references 外部表名(主键字段名) [on delete 模式 on update 模式]; -- 只有InnoDB存储引擎支持 -- 指定模式: 外键约束有三种约束模式: 都是针对父表的约束 -- district: 严格模式(默认),父表不能删除或者更新一个已经被字表引用的记录 -- cascade: 级联模式,父表的操作,对应字表关联的数据跟着被操作 -- set null: 置空模式,父表的操作之后,子表对应的数据(外键字段)被置空 -- 自增长: id int auto_increment, create table 表名 like 数据库名:表名; -- 从已有表创建新表(复制表结构) -- 删 -- 删除数据表 drop table 表名1, 表名2...; -- 清空表,重置自增长 truncate 表名; -- 改 -- 修改表名 rename table 旧表名 to 新表名; -- 修改表选项: 字符集,校对集和存储引擎 alter table 表名 表选项 [=] 值; --表选项同上; -- 查 -- 查看所有表 show tables; -- 查看部分表 show tables like 'pattern'; -- pattern同上 -- 查看表创建语句 show create table 表名; show create table 表名\g -- \g == ; show create table 表名\G -- \G将查到的结构旋转90度变成纵向 -- 查看表结构: 产看表中的字段信息 desc 表名; describe 表名; show columns from 表名; -- 字段操作 -- 增 -- 新增字段 alter table 表名 add[column] 字段名 数据类型[列属性][位置]; -- 位置: 字段名可以存放表中的任意位置。 -- 第一个: first; -- 在哪个字段之后: after 字段名; -- 新增外键 alter table 表名 add [constraint 外键名] foreign key (外键字段) references 父表(主键字段); -- 删 -- 删除字段 alter table 表名 drop 字段名; -- 删除外键 alter table 表名 drop foreign key 外键名; -- 改 -- 修改字段 alter table 表名 modify 字段名 数据类型[属性][位置]; -- 重命名字段 alter table 表名 change 旧字段名 新字段名 数据类型[属性][位置]; -- 查 -- 数据操作 -- 增 -- 插入数据 int insert into 表名 values (值列表) [,(值列表)]; -- 给全表字段插入数据,不需要指定字段列表; -- 要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致 -- 凡是非数值数据,都需要使用引号包裹; -- 可以一次性插入多条记录 insert into 表名 (字段列表) values (值列表)[,(值列表)] [on duplicate key update 字段=字段[+values(字段)]]; -- 给部分字段插入数据,需要选定字段列表: -- 字段列表出现的顺序与字段的顺序无关; -- 但是值列表的顺序必须与选定的字段的顺序一致 -- on duplicate key update: 若主键已经存在,则执行更新操作,更新的值为后面跟的值,获取传入的值使用 values(), 例: num=num+values(num) -- 主键冲突时更新数据 insert into 表名 [(字段列表: 包含主键)] values (值列表) on duplicate key update 数据名 = 数据值; -- 主键冲突时替换数据 replace into 表名 [(字段列表: 包含主键)] values(值列表); -- 不冲突直接插入 -- 复制表数据 insert into 表名 [(字段列表)] select */字段列表 from 数据库名:数据表名; -- 可以迅速让表中的数据膨胀到一定数量级: 测试表的压力以及效率 -- 删 -- 删除数据 delete from 表名 [where 条件] [limit 数量]; -- 改 -- 修改数据 update 表名 set 字段 = 值 [where 条件] [limit 数量]; -- 查 -- 查看 指定字段/所有字段 [指定条件]的数据 select 字段列表 from 表名 [where 条件]; -- 查询数据完整语句 select [select选项] 字段列表[字段别名] from 数据源 [where 子句] [group by子句] [having子句] [order by子句] [limit子句]; -- select选项: select对查出来的结果的处理方式, 可以使用 子查询, 查询语句只能返回单行结果 -- all: 默认的,保留所有的结果 -- distinct: 查出来的结果将重复(所有字段都相同)的去除 -- 字段别名: 当数据进行查询的时候,有时候名字并不一定满足需求 -- (多表查询的时候,会有同名字段),需要对字段名进行重命名: 即别名 -- 语法: 字段名 [as] 别名; -- 数据源: 数据的来源,关系型数据库的来源都是数据表: 本质上只要保证数据类似二维表,最终都可以作为数据源 -- 数据源分为多种: 单表数据源,多表数据源,查询语句 -- 单表数据源: select * from 表名; -- 多表数据源: select * from 表名1,表名2...; -- 从一张表中取出一条记录,去另外一张表中匹配所有记录,而且全部保留(记录数和字段数),没什么用 -- 查询语句: select * from (select语句) as 别名; -- 子查询, 数据的来源是一条查询语句(查询语句的结果是二维表) -- 连接查询 -- 交叉连接: 左表 cross join 右表; -- 等同于 from 左表,右表; -- 内连接: 左表 [inner] join 右表 on 左表.字段 = 右表.字段; -- 从左表中取出每一条记录,去右表中与所有记录进行匹配,当左表.字段与右表.字段相等时保留结果 -- 外连接: 左表 left/right join 右表 on 左表.字段 = 右表.字段; -- 以其中一张表为主,取出里面所有记录,每条与另一张表进行连接。能匹配的保留, 若一项匹配的都没有,则保留一条数据,另一张表的字段都置空NULL。 -- 自然连接: 左表 natural join 右表; -- 内连接 -- 左表 natural left/right join 右表; -- 外连接 -- 系统以字段名作为匹配模式,同名字段作为条件,连接之后合并同名字段,多个同名字段都作为条件 -- where 字句: 用来判断数据,筛选数据,返回0或1(对磁盘数据进行判断,是否加载到内存)(条件可以使用子查询) -- 比较运算符: >, <, >=, <=, !=, <>, =, like, between A and B(A到B 闭区间), in, not in, is, is not, =any, !=any, =some, !=some, =all, !=all -- 逻辑运算符: &&(and), ||(or), !(not) -- 可以使用 子查询 -- group by字句: 根据某个字段进行分组(相同的放一组,不同的分到不同的组) -- 基本语句: group by 字段名1,字段名2... [asc/desc] [with rollup]; -- 分组是为了统计数据,mysql提供的一些统计函数(在查询时放在字段列表中) -- count(字段名): 统计分组后的记录数,每一组有多少记录(*代表统计记录,字段名代表统计对应的字段 NULL不统计) -- max(字段名): 统计每组中最大值 -- min(字段名): 统计每组中最小值 -- avg(字段名): 统计平均值 -- sum(字段名): 统计和 -- group_concat(字段): 对分组的结果中的某个字段进行字符串连接(保留改组所有的某个字段) -- isnull(字段名, 0): 若字段值为null, 则返回0, 否则返回字段 -- asc/desc: 对分组的结果进行排序 asc:升序(默认) desc:降序 -- with rollup: 回溯统计 -- having子句: 与where字句一样: 进行条件判断的(进入内存后的判断) -- 分组统计的结果或者说统计函数只有having能够使用 -- having能够使用字段别名 -- 可以使用 子查询 -- order by字句: 排序,根据某个字段进行升降序排序,依赖校对集 -- 基本语法: order by 字段名1[asc/desc],字段名2[asc/desc]...; -- 可以使用 子查询 -- limit子句: 一种限制结果的语句 -- 只用来限制长度(数量): limit 数量; -- 限制起始位置和长度(可以实现数据的分页): limit 起始位置,长度; -- 联合查询:将多次查询,在记录上进行拼接(字段不会增加) select语句1 union [union选项] select语句2...; -- 字段数必须严格一致 -- union选项: 与 select选项 一样有两个,all和distinct(默认) -- order by: 在联合查询中order by不能直接使用,需要对查询语句使用括号才行。若要order by生效,必须搭配limit。 -- 视图操作 -- 增 -- 创建视图 create [algorithm = 指定算法] view 视图名 as select语句; -- with check option: 在where语句后添加,表示不允许修改where语句中的字段 -- 视图算法: 分为三种(如果视图的select语句中包含五子句,而且很有可能顺序比外部的查询语句靠后,就要使用临时表算法了) -- undefined: 未定义(默认的),不是实际使用算法,让系统自主选择算法 -- temptable: 临时表算法,先执行视图的select语句,后执行外部查询语句 -- merge: 合并算法,系统将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高,系统经常选择) -- 删 -- 删除视图 drop view 视图名; -- 改 -- 修改视图本身的来源语句 alter view 视图名 as 新select语句; -- 查 -- 表的所有查看方式都使用于视图 -- 将视图当作表查询即可 -- 数据备份与还原 -- 单表数据备份(前提是外部文件不存在) select 字段列表 into outfile 文件所在路径 [fields 字段处理 lines 行处理] from 数据源; -- fields 字段处理 -- enclosed by: 字段使用什么包裹,默认是''空字符串 -- teminated by: 字段以什么结束,默认是'\t'tab键 -- escaped by: 特殊符号用什么方式处理,默认是'\\'使用反斜杠转义 -- lines 行处理 -- starting by: 每行以什么开始,默认是''空字符串 -- teminated by: 每行以什么结束,默认是'\t\n'换行符 -- 单表数据还原(前提是表结构存在) load data infile 文件所在路径 into table 表名 [(字段列表)] fields 字段处理 lines 行处理; -- 处理方式与备份相同 -- SQL备份(备份的是sql语句,系统对表结构以及数据进行处理,变成对应的sql语句,然后进行备份)(使用mysql提供的软件:mysqldump.exe) mysqldump.exe -hPup 数据库名字 [数据表名字1,数据表名字2...] > 外部文件路径 -- SQL还原 mysql.exe -hPup 数据库名字 < 备份文件目录 -- (使用mysq.exe客户端还原) source 文件所在路径; -- sql指令还原,数据库默认当前数据库 -- 增量备份 -- 事务安全操作(免费的引擎只有InnoDB存储引擎支持) -- 开启事务 start transaction; -- 关闭事务 commit; -- 提交事务: 同步数据表(操作成功) rollback; -- 回滚事务: 清空日志表(操作失败) -- 设置回滚点 savepoint 回滚点名字; -- 回到回滚点 rollback to 回滚点名字; -- 存储过程操作 -- 创建过程 create procedure 过程名字([参数列表]) begin 过程体 end -- 删除过程 drop procedure 过程名; -- 查看所有过程 show procedure status [like 'pattern']; -- 查看过程创建语句 show create procedure 过程名; -- 调用过程 call 过程名(); -- 触发器 -- 创建触发器 delimiter 自定义结束符; create trigger 触发器名 触发时间 事件类型 on 表名 for each row begin 指令 end 自定义结束符 delimiter ; -- 查看所有触发器 show triggers [like 'pattern']; -- 查看触发器创建语句 show create trigger 触发器名字; -- 删除触发器 drop trigger 触发器名;