bin/
mysqld.exe:服务端 mysql.exe:客户端
控制台访问:
-h:主机地址(本机 localhost可以省略) -P:端口号 (默认3306可以省略) -u:用户名 -p:密码 连在一起写! \q,quit,exit 退出服务 !!安全起见 -p后直接回车 然后输入密码
CREATE DATABASE 数据库名 数据库选项;
数据库选项:
SHOW DATABASES; //显示所有数据库 SHOW CREATE DATABASE 数据库名; //显示数据库创建指令
ALTER DATABASE 数据库名 数据库选项;
DROP DATABASE 数据库名;
USE 数据库名;
CREATE TABLE 表名( 字段名 字段类型, ... 字段名 字段类型 )表选项;
表选项
SHOW TABLES; //显示所有数据表 SHOW TABLES FROM 数据库名; //显示所有某数据库下数据表 SHOW TABLES LIKE ''; //显示匹配的表 _匹配一个字符 %匹配多个字符 SHOW CREATE TABLE 表名; //显示表创建指令
DESC 表名; DESCRIBE 表名; SHOW COLUMNS FROM 表名;
RENAME TABLE 表名 TO 新表名; //修改表名 ALTER TABLE 表名 表选项; //修改表选项
ALTER TABLE 表名 ADD [ COLUMN] 字段名 字段类型 [ 字段属性] [ 字段位置];
字段位置:(适用于增加字段,修改字段,更改字段名)
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 [ 字段属性] [ 位置];
ALTER TABLE 表名 MODIFY 字段名 字段类型 [ 字段属性] [ 位置];
ALTER TABLE 表名 DROP 字段名;
INSERT INTO 表名 VALUES (字段列表顺序对应所有值); //全字段插入 INSERT INTO 表名 (字段列表) VALUES (字段列表对应的值的顺序列表); //部分字段插入
SELECT */字段列表 FROM 表名;
UPDATE 表名 SET 字段=新值,...,字段=新值 [ WHERE 条件筛选];
DELETE FROM 表名 [ WHERE 条件];
SHOW charset; //显示MySQL支持的所有字符集
字符集 : charset / character set,是各种文字和符号在计算机中的总称
SET NAMES 客户端字符集; 告诉服务器当前客户端的字符集
SHOW collation; 查看MySQL支持的所有校对集
校对集 collate/collation 即数据比较时的对应规则
collate 校对集规则;
显示宽度 :整型数在数据库中显示的符号个数(包括正负号)
可以通过zerofill 让不够宽的数值补充到对应宽度
''
或者双引号""
包裹2^8-1
个字符2^16-1
个字符2^24-1
个字符2^32-1
个字符(4G)enum(元素1,...,元素N)
set(元素1,...,元素N)
year
1901-2155
年
0000
year
year(4)
timestamp
YYYY-MM-DD HH:II:SS
YYYYMMDDHHIISS
date
YYYY-MM-DD
1001-01-01~9999-12-31
datetime
YYYY-MM-DD HH:II:SS
1000-01-01 00:00:00~9999-12-31 23:59:59
time
-838:59:59~838:59:59
[H]HH:II:SS
D HH:II:SS //D表示天
属性 :建立在字段类型之后,对字段除了类型之外的其他进行约束
desc
进行查看desc 表名; //查看表属性 // Field:字段名字 // Type:数据类型 // Null:是否为空(属性) // Key:索引类型(属性) // Default:默认值(属性) // Extra:额外属性
NULL :数据是否允许为空
Not Null
NOT NULL
Default:默认值,在设计字段的时候给定默认数据
default
关键字触发primary key:主键,用来保证整张表中对应的字段永远不会出现重复数据
NOT NULL
默认int
primary key(字段1,...,字段n)
主键管理:在创建表并且已经有数据后的维护
ALTER TABLE 表名 DROP primary key; //删除主键
ALTER TABLE 表名 ADD primary key 主键字段名; //追加主键
auto_increment:自增长,被修饰的字段在新增时,自动增长数据
auto_increment_offset
默认值是1auto_increment_increment
默认值是1SHOW VARIABLES LIKE 'auto_increment%';
ALTER TABLE 表名 auto_increment = 值; //下一次开始就会从设置的这个值开始
SET auto_increment_offset = 值; //修改初始值,当前连接当前用户有效(局部) SET auto_increment_increment = 值; //修改步长 SET @@auto_increment_offset = 值; //修改初始值,所有用户一直有效(全局) SET @@auto_increment_increment = 值;
unique key:唯一键,用来维护数据的唯一性
unique key (字段1,...,字段n);
ALTER TABLE 表名 DROP index 唯一键名字;//删除唯一键
ALTER TABLE 表名 ADD unique key 字段名; //添加唯一键
comment: 描述,用文字描述字段作用
SHOW CREATE TABLE 表名; //查看comment
蠕虫复制:从已有表中复制数据直接插入到另一张表
主键冲突: 在数据进行插入时包含主键指定,而主键在数据表已经存在
INSERT IGNORE INTO 表名[(字段列表)] VALUES(值列表);
- 冲突更新:冲突后部分字段变成更新(替换部分字段数据)
INSERT INTO 表名 [(字段列表)] VALUES(值列表) ON duplicate key update 字段 = 新值[,字段=新值...]; //1.尝试新增 2.更新
- 冲突替换:先删除原有记录,后新增记录(替换全部字段数据)
REPLACE INTO 表名 [(字段列表)] VALUES(值列表); //效率低
ALL
:默认,表示保留所有记录DISTINCT
:去重重复的记录(所有字段都重复)字段选择 :根据实际需要选择要获取的字段信息
SELECT 1
SELECT unix_timestamp(),@@version
(@@是系统变量的前缀,后面跟变量名)字段别名
字段名 AS 别名; 字段名 别名;
FROM 数据源;
FROM 表名
FROM 表名1,...,表名n
FROM (SELECT ...)
WHERE :跟在FROM数据源之后,对数据进行条件匹配
比较运算符
> //大于 < //小于 = //等于 >= //大于等于 <= //小于等于 != //不等于 BETWEEN A AND B //A和B之间 ,包括A,B IN(数据1,...,数据n) //在列举的数据 IN(数据1,...,数据n) //在列举的数据 LIKE 'pattern' //像这样的,用于字符串比较 _ //匹配任意一个字符 % //匹配任意零个或多个字符
逻辑运算符
AND //与 OR //或 NOT //非
NULL运算符
IS NULL //为空 IS NOT NULL //不为空
GROUP BY : 分组统计,根据某个字段结果分类,并进行数据统计分析
回溯统计: 在进行分组的时候(通常是多分组),每次结果的回溯都要进行一次汇总统计
with rollup
分组排序 :在分组后统计结果时可以根据分组字段进行升序或者降序排序显示数据
GROUP BY 字段名 [ASC]
升序GROUP BY 字段名 DESC
降序HAVING 子句 :类似于WHERE 子句,是用来进行条件筛选的
ORDER BY :排序,根据某个指定的字段进行升序或者降序的排序
ORDER BY 字段 [ASC]
: 升序ORDER BY 字段 DESC
:降序LIMIT 子句 : 限制数据的获取数量(记录数)
LIMIT 数量
:限制获取的数量(不保证一定能获取到指定的数量)LIMIT 起始的位置,数量
限制数据的获取的位置以及数量数据更新 :即更新时对更新的记录数进行限制
数据删除 :限制要删除的记录数
清空数据 :将表中数据全部清除,并将表的所有状态回到原始状态
TRUNCATE 表名
UNION :联合查询,是指将多个结果合并为一个结果显示
SELECT 查询; /*决定字段名字*/ UNION 查询选项 SELECT 查询; ...
联合查询排序 :针对联合查询结果进行排序
CROSS JOIN : 交叉连接,不需要连接的条件连接
[INNER] JOIN :内连接,将两张表根据指定的条件连接起来,严格连接
左表 join 右表 on 连接条件
OUTER JOIN :外连接,是一种不严格的连接方式
NATURAL JOIN :自然连接,是一种自动寻找连接条件的连接查询
USING 关键字 :连接查询时如果是同名字段作为连接条件,USING 可以代替 ON 出现(比ON更好)
()
进行包裹,必要时对子查询结果进行别名处理EXISTS子查询 :带入查询,将主表(外部查询)的每一行代入到子表(子查询表)进行校验
>all(结果集)
:数据要大于结果集中的全部数据=any(结果集)
:数据只要等于结果集中任意一个即可外键 :FOREIGN KEY,表中指向外部表主键的字段为外键
[CONSTRAINT 外键名] FOREIGN KEY(当前表字段名) REFERENCES 外部表(主键字段)
外键约束:当表建立外键关系后,外键就会对主表(外键指向的表)和子表(外键所在的表)里的数据产生约束效果
新增外键
ALTER TABLE 表名 ADD [CONSTRAINT '外键名'] FOREIGN KEY(外键字段) REFERENCES 表名(主键) [ON 外键约束];
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
跟新外键:先删除后新增
事务 :要做的事情
AUTOCOMMIT
值为ON,自动提交START TRANSATION
COMMIT
ROLLBACK
SAVEPOINT 回滚点名字
ROLLBACK TO 回滚点名字
预处理 :PREPARE STATEMENT,一种预先编译SQL指令的方式(然后命令执行)
PREPARE 预处理名字 FROM '要执行的SQL指令'
EXECUTE 预处理名字
DROP/DEALLOCATE PREPARE 预处理名字
一般的预处理都不会是固定的SQL指令,而是需要参数的
参数使用占位符?
占位
PREPARE 预处理名字 FROM '预处理指令,参数用?替代';
在执行预处理时将数据参数传入
数据存储到变量中(预处理传入的值必须由变量保存)
SET @变量名 = 值
使用USING 关键字传参数
EXECUTE 预处理名字 USING @变量名1,...,@变量名n
参数顺序要保持一致
视图 :VIEW,是一种由SELECT指令组成的虚拟表
视图是虚拟表,可以使用表管理(结构管理)
CREATE VIEW 视图名字 AS SELECT指令; /*创建视图*/ SELECT */字段名 FROM 视图名字; #访问视图,一般都是查询
视图有结构,但不存储数据
视图查看:显示视图结构和具体视图信息
SHOW TABLES; #查看全部视图 SHOW CREATE TABLE / VIEW 视图名字; #查看视图创建指令 DESC 视图名字; #查看视图结构
视图修改:更改视图逻辑
ALTER VIEW 视图名 AS 新的查询指令; #更改视图 CREATE OR REPLACE VIEW 视图名 AS 新的查询指令; #创建或者替换为新的
视图删除
DROP VIEW 视图名;
视图数据操作 :直接对视图进行写操作(增删改)然后实现基表数据的变化
视图算法 :指视图在执行过程中对于内部的SELECT指令的处理方式
视图算法在创建视图时指定
CREATE ALGORITHM = 算法 VIEW 视图名字 AS SELECT指令;
视图算法一共三种
表数据备份 :单独针对表里面的数据部分进行备份(数据导出)
将数据从表中查出,按照一定格式存储到外部文件中
SELECT */字段列表 INTO OUTFILE 外部文件路径 [FIELDS TERMINATED BY 格式字符串 ENCLOSED BY 格式字符串 ESCAPED BY 格式字符串] [LINES TERMINATED BY 格式字符串 STARTING BY 格式字符串] FROM 数据表;
表数据备份不限制数据的来源是一张表还是多张表(可以连表)
表数据还原 :将符合数据表结构的数据导入到数据表中(数据导入)
将一定格式的数据按照一定的解析方式解析成符合表字段格式的数据导入到表中
LOAD DATA INFILE '数据文件所在路径' INTO TABLE 表名 [FIELDS TERMINATED BY 格式字符串 ENCLOSED BY 格式字符串 ESCAPED BY 格式字符串] #与备份导出时意义相同 [LINES TERMINATED BY 格式字符串 STARTING BY 格式字符串] #与备份导出时意义相同 [(字段列表)]; #如果是部分字段,需要字段列表
文件备份 :直接对数据表进行文件保留,属于物理备份
SQL备份 :将数据库的数据以SQL指令形式保存到文件中,属于逻辑备份
SQL备份是利用Mysqldump.exe客户端实现备份
SQL备份是将备份目标(数据表)以SQL指令形式,从表的结构、数据和其他信息保存到文件(.sql)
mysqldump.exe -h -P -u -p [备份选项] 数据库名字 [数据表列表]>SQL文件路径 //cmd等控制台,不是SQL语句
常见备份选项
--all-databases
所有数据库所有表,也不需要指定数据库名字[--databases] 数据库
指定数据库里的所有表(不需要表名)数据库名 表1,...,表n
SQL还原可以使用mysql.exe进行操作
mysql.exe -h -P -u -p [数据库名]<SQL文件路径
SQL还原还可以在进入到数据库后利用SQL指令还原
SOURCE SQL文件路径;
角色管理 :ROLE,即根据角色来分配权限,然后用户只需要关联角色即可(分配角色):MySQL8以后才有
CREATE ROLE 角色名字1,...,角色名字n
(可批量创建)GRANT 权限列表 ON */数据库.*/数据表 TO 角色名字
GRANT 角色名字 TO 用户名@主机地址
REVOKE 角色名字 FROM 用户名@主机地址
REVOKE 权限列表 ON */数据库.*/数据表 FROM 角色名字
DROP ROLE 角色名字1,...,角色名字n
账号创建之初除了登录,没有其他任何权限
账号的管理通常需要配合权限使用
GRANT 权限列表 ON */数据库.*/数据表 TO 角色名字
REVOKE 权限列表 ON */数据库.*/数据表 FROM 角色名字
FLUSH PRIVILEGES
SHOW GRANTS FOR 用户名@主机地址
MySQL提供的权限列表