-- 双中划线+空格: 单行注释, 与#相同
-- 链接数据库
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 触发器名;