⭐Hi~ o( ̄▽ ̄)ブ大家好我是雪人,今天分享出我的Mysql整理笔记!
⭐耗时7200秒整理的资料直接拿走!
⭐适合新手入门与API查阅观看!
⭐本文包含以下内容:Mysql安装,SQL语句分类汇总,约束,mysql数据类型,事务,忘记ROOT密码等...
a. 找到MySql解压好的文件夹的根目录,在根目录下创建文件 my.ini(后缀为.ini)
b. 修改为如下配置
(注意:下列命令是初始化文件中的初始化命令,需要根据自己情况修改的只有mysql的安装路径以及数据的存放路径)
[mysqld]
# mysql 端口
port=3306
# mysql 目录
# 更改为自己安装的目录
basedir=D:\MySql\mysql
# mysql data 目录
# 更改为自己安装的目录
datadir=D:\MySql\mysql\data
# 最大连接数
max_connections=200
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8mb4
[client]
port=3306
# 默认字符集
default-character-set=utf8mb4
1.进入 mysql的bin目录
2.初始化 MySQL 并得到初始密码
在bin目录下,输入:<font color=red>mysqld --initialize --console </font>命令进行mysql初始化,并得到初始密码(需要记录初始密码,后续会用到)
3.安装 MySQL
输入<font color=red>mysqld --install mysql</font>命令进行mysql服务的安装,出现successfully字样,则代表安装成功!
4.启动 MySQL 服务
使用<font color=red>net start mysql</font>命令启动mysql服务,显示服务启动成功则表示成功。(使用net stop mysql可以关闭mysql服务)
5.连接 MySQL
<font color=red>mysql -u root -p</font> 输入此指令连接 MySQL
-h 可以指定域名
mysql -h localhost -u root -p
# 示例
mysql -u(root) -p(密码)
mysql -h(IP) -u(root) -p(密码)
mysql --host=(IP) --user=(root) --password=(密码)
说明:配置环境变量的目的是为了能在任何位置下都能正常启动并使用mysql!
1. 创建MYSQL_HOME变量----
找到-我的电脑-,右键打开属性,找到-高级系统设置-,找到-高级-选项中的-环境变量-,在-系统变量-中点击新建,变量名建议使用MYSQL_HOME,变量值就是最初mysql的安装路径,之后点击确定即可
2. 在Path中添加新值----
a. 添加%MYSQL_HOME%;
b. 添加%MYSQL_HOME%\bin;
注意:在添加时,Path变量值的展示方式可能不同,有的是展开式展示,如下图:
Structured Query Language 结构化查询语言
定义了操作所有关系型数据库的规则 (每一种数据库语法存在些许差异<方言>)
1. SQL语句可以单行或多行书写,以分号结尾。
2.可使用空格和缩进来增强语句的可读性。
3. MysQL数据库的sQL语句不区分大小写,关键字建议使用大写。
4. 3种注释
-- 注释内容
# 注释内容
/*注释内容*/
1) DDL(Data Definition Language)数据疋义语言用来定义数据库对象:数据库,表,列等。关键字: create,drop,alter 等
2) DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改。关键字:insert,delete,update等
3) DQL(Data Query Language)数据查询语言用来查询数据库中表的记录(数据)。关键字: select,where等
4) DCL(Data control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户。关键字︰GRANT,REVOKE等
<font color=orange>使用 create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码</font>
创建
删除
查询
修改
使用
<font color=yellow>本地IP: localhost / 127.0.0.1</font>
英语小字典:
1.alter
v.
改变;(使)更改;改动;修改(衣服使更合身)
第三人称单数: alters现在分词: altering过去式: altered过去分词: altered
2.identified
v.
确认;认出;鉴定;找到;发现;显示;说明身份
identify的过去分词和过去式
3.privileges
n.
特殊利益;优惠待遇;(有钱有势者的)特权,特殊待遇;荣幸;荣耀;光荣
v.
给予特权;特别优待
privilege的第三人称单数和复数
4.grant
vt.
授予;(尤指正式地或法律上)同意,准予,允许;(勉强)承认,同意
n.
(政府、机构的)拨款
第三人称单数: grants复数: grants现在分词: granting过去式: granted过去分词: granted
查询
-- 1.切换到Mysql数据库
USE mysql;
-- 2.查询user表
SELECT * FROM user; # user表中管理用户信息
# PASSWORD('') Mysql中的函数 对密码进行加密
创建
-- 创建后默认只有登录权限
删除
修改
授权
-- 权限示例: SELECT DELETE UPDATE
# 给与一个用户 所有表 所有数据库的全部权限
GRANT ALL ON *.* TO 'root'@'rootPassword';
创建
<字段名> <字段类型>(最大字节长度))
删除
查询
修改
其他参数
()内 列参数
()外 表参数:
添加
删除
条件示例: id = 3 id > 3
修改
select # 字段列表
from # 表名列表
where # 条件列表
group by # 分组字段
having # 分组之后的条件
order by # 排序
limit # 分页限定
-- DISTINCT关键字 去除重复结果
SELECT (DISTINCT) <字段列表名1>,<字段列表名2>... FROM <表名>
-- 计算 数字型数据结构 使用 + - * /
SELECT name,math,english,math + english from student1
-- 如果有null参与的计算 默认计算结果均为 null 将null替换为一个值
-- IFNULL(可能为NULL的值,如果为NULL要替换的值)
SELECT name,math,english,math + IFNULL(english,0) from student1
-- 起别名 AS
SELECT name,math,english,math + english AS 总分 from student1 -- AS 可以以空格替代
# Where 后跟句子条件
# 运算符
-- > < <= >= = <>
-- BETWEEN...AND
-- IN(集合)
-- LIKE 模糊查询
-- 占位符 _:单个任意字符 %:多个任意字符
-- IS NULL
-- and 或 &&
-- or 或 ||
-- not 或 !
-- <> 为大于小于 与 != 一致
# 示例
SELECT * FROM student WHERE age!=20;
SELECT * FROM student WHERE age=20;
SELECT * FROM student WHERE age>20 and age<30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
SELECT * FROM student WHERE age=20 or age=29 or age=17;
SELECT * FROM student WHERE age IN(20,29,17);
SELECT * FROM student WHERE age IS NULL;
SELECT * FROM student WHERE age IS NOT NULL;
-- 姓 马 的有哪些
SELECT * FROM student WHERE name LIKE '马%';
-- 三个字的名字
SELECT * FROM student WHERE name LIKE '___';
-- 姓名中有马
SELECT * FROM student WHERE name LIKE '%马%';
-- 语法 order by 子句
# order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
-- 排序方式 有多个排序条件 第一个排序条件一致时 才会判断第二个条件
# ASC:升序
# DESC:降序
-- 聚合函数:将一列数据作为整体进行计算
(计算时默认排除 NULL 值)
# count:统计个数
# 一般选择非空的列:主键
# count(*) 统计所有列 有一列不为null 就统计在内
# max:计算最大值
# min:计算最小值
# sum:计算和
# avg:计算平均值
SELECT COUNT(math) FROM student;
SELECT COUNT(IFNULL(math,0)) FROM student;
SELECT MAX(math) FROM student;
SELECT MIN(math) FROM student;
SELECT SUM(math) FROM student;
# 语法: GROUP BY 分组字段
-- 注意
-- 分组之后查询的字段:分组字段,聚合字段 其他字段无意义
-- where 和 having 的区别
-- where 在分组之前进行限定 (如果不满足条件 不参与分组) 对每一条的判断
-- having 在分组之后进行限定 (如果不满足结果 不会被查询) 对一组的判断
-- where 不可使用聚合函数 而 having可以
SELECT sex,AVG(math) FROM student GROUP BY sex WHERE math > 70;
SELECT sex,AVG(math) FROM student GROUP BY sex WHERE math > 70;
# 语法: limit 开始的索引,每页显示几条记录
-- 分页操作是一个 "方言"
SELECT * FROM student LIMIT 0,3; -- 第一页
SELECT * FROM student LIMIT 3,3; -- 第二页
SELECT * FROM student LIMIT 6,3; -- 第三页
...
SELECT * FROM student LIMIT n(x-1),n; -- 第x页
SELECT * FROM table1, table2;
-- 笛卡尔积 A B
# 有两个集合 A 和 B 取这两个集合的所有组成情况
# 要完成多表查询 需要消除无用数据
-- 消除无用数据方法
# 内连接查询
# 外连接查询
# 子查询
-- 内连接
# 从哪些表中查询数据
# 查询条件是什么
# 查询哪些字段
-- 隐式内连接 使用 WHERE 消除 无用数据
# 多表筛选
SELECT * FROM emp,dept WHERE emp.'dept_id' = dept.'id';
# 使用 表名.列名 进行条件筛选
SELECT emp.'id',emp.'name',emp.'gender' FROM emp,dept WHERE emp.'dept_id' = dept.'id';
-- 显式内连接 INNER 可以省略
SELECT 字段列表 FROM 表名1 INNER JOIN 表明2 ON 条件
SELECT * FROM emp INNER JOIN dept ON emp.'dept_id' = dept.'id';
-- 外连接查询
-- 左外连接 OUTER 可以省略
SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件
# 查询的是 左表中所有的数据 以及其交集部分
-- 右外连接 OUTER 可以省略
SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件
# 查询的是 右表中所有的数据 以及其交集部分
-- SELECT 中嵌套 SELECT
# 案例:查询工资最高的员工的信息
SELECT MAX(salary) FROM emp; -- 查询到最高工资 9000
SELECT * FROM emp WHERE emp.'salary' = 9000;
# 子查询简化案例语句
SELECT * FROM emp WHERE emp.'salary' = (SELECT MAX(salary) FROM emp);
# 查询工资小于平均工资的员工
SELECT * FROM emp WHERE emp.'salary' < (SELECT AVG(salary) FROM emp);
# 多行单列使用:
SELECT id FROM dept WHERE NAME = '财务部' or NAME = '市场部'; -- 查询出 id 为 1 , 2 , 3 ... 多行单列
SELECT * FROM emp WHERE dept_id IN (3,2)
-- 合并
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' or NAME = '市场部';)
# 案例:查询员工入职日期是 2011-11-11 日之后的员工信息和部门信息
SELECT * FROM dept t1, (SELECT * FROM emp WHERE emp.'join_date' > '2011-11-11';) t2
WHERE t1.id = t2.dept_id;
子查询结果不同:
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类:
# 在创建表时添加 NOT NULL 添加后字段不得为空
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) NOT NULL,
<字段名> <字段类型>(最大字节长度));
-- 删除非空约束
ALTER TABLE student MODIFY NAME VARCHAR(20);
-- 不加 NOT NULL 直接用新语句覆盖旧语句
-- 创建表后添加非空约束
ALTER TABLE student MODIFY NAME VARCHAR(20) NOT NULL;
# 在创建表时添加 UNIQUE 添加后字段不得重复
-- 可以存在 NULL 但只能有一条为NULL
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) UNIQUE,
<字段名> <字段类型>(最大字节长度));
-- 删除
ALTER TABLE student MODIFY phone VARCHAR(20);
-- 创建表后添加
ALTER TABLE student MODIFY phone VARCHAR(20) UNIQUE;
# 在创建表时添加 PRIMARY KEY
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) PRIMARY KEY,
<字段名> <字段类型>(最大字节长度));
-- 删除
ALTER TABLE student MODIFY phone VARCHAR(20);
-- 创建表后添加
ALTER TABLE student MODIFY phone VARCHAR(20) PRIMARY KEY;
自增主键:如果某一列为数值类型 使用 auto_increment 可以完成 值 的自动增长
# 在创建表时添加 PRIMARY KEY AUTO_INCREMENT
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) PRIMARY KEY AUTO_INCREMENT,<字段名> <字段类型>(最大字节长度));
# 可以手动插入 正常值
# 自增值根据上衣条记录加1
# 在创建表时添加 FOREIGN KEY
# 外键必须为其他表的主键
CREATE TABLE <表名> (...
CONSTRAINT <外键名称> FOREIGN KEY (<外键列名称>) REFERENCES <主表名称>(<主表列名称>),
<字段名> <字段类型>(最大字节长度)) ON UPDATE CASCADE;
-- 删除外键
ALTER TABLE <表名称> DROP FOREIGN KEY <外键名称>;
-- 添加外键
ALTER TABLE <表名称> ADD CONSTRAINT <外键名称> FOREIGN KEY (<外键列名称>) REFERENCES <主表名称>(<主表列名称>);
-- 级联操作
# 一个数据需要修改主键 如果其他表联动此表作为外键 修改后会发生错误 需要添加级联 添加后修改主键外键会自动更改
-- 修改时添加
ALTER TABLE <表名称> ADD CONSTRAINT <外键名称> FOREIGN KEY (<外键列名称>) REFERENCES <主表名称>(<主表列名称>) ON UPDATE CASCADE;
-- or 创建时添加
# 语法:
-- 级联更新 ON UPDATE CASCADE
-- 级联删除 ON DELETE CASCADE (很危险 一不小心就删记录删除很多)
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
分类:
来源:MySQL 数据类型 | 菜鸟教程 (runoob.com)
MySQL 支持所有标准 SQL 数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。
作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07(自动保存为插入数据时间) | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
# 语法
-- 备份: mysqldump -u用户名 -p密码 需要备份的数据库名称 > 保存路径
-- 还原:
1.登录数据库
2.创建数据库
3.使用数据库 -- 使用创建的数据库
4.执行文件 -- 执行命令: source 文件路径
实例
mysqldump -u root -p test > E:\桌面\Note\data.sql
create database databaseone;
use databaseone;
source E:\data.sql
-- OK!
使用Navicat可进行备份
START TRANSACTION; -- 开启事务
# 事务操作代码
# ...
COMMIT; -- 执行代码没有问题 提交事务
ROLLBACK; -- 出现问题 回滚事务
-- 还原数据库到 开启事务之前的状态
<font color=pink>使用DML 增删改查 默认提交一次事务</font> (默认)
# 修改事务的默认提交方式
-- 查看事务的默认提交方式 SELECT @@autocommit;
-- 1 代表自动提交 0 代表手动提交
# 修改: SET @@autocommit = 0;
# Mysql 默认自动提交
# Oracle 默认手动提交
事务的四大特征
事务隔离的级别
概念∶多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
<font color=pink>存在的问题</font>
隔离级别
注意:隔离级别从小到大安全性越来越高,效率越来越低
# 数据库 隔离级别 语法
# 查询隔离级别
SELECT @@tx_isolation;
# 设置隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
# 脏读:
-- READ UNCOMMITTED 事件中未COMMIT 但是数据库已经更改
# 不可重复读:两次SELECT数据不一致
-- 1.cmd --> net stop mysql 停止mysql服务
-- 2.使用无验证方式启动Mysql服务
# mysqld --skip-grant-tables
-- 3.修改ROOT用户密码
USE mysql;
UPDATE user SET password = PASSWORD('新密码') WHERE user='root';
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。