【Mysql】耗时7200秒整理的mysql笔记!常用API汇总!包教包会!

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: ⭐Hi~ o( ̄▽ ̄)ブ大家好我是雪人,今天分享出我的Mysql整理笔记!⭐耗时7200秒整理的资料直接拿走!⭐适合新手入门与API查阅观看!⭐本文包含以下内容:Mysql安装,SQL语句分类汇总,约束,mysql数据类型,事务,忘记ROOT密码等…

Mysql全套笔记

⭐Hi~ o(  ̄▽ ̄)ブ大家好我是雪人,今天分享出我的Mysql整理笔记!

⭐耗时7200秒整理的资料直接拿走!

⭐适合新手入门与API查阅观看!

⭐本文包含以下内容:Mysql安装,SQL语句分类汇总,约束,mysql数据类型,事务,忘记ROOT密码等...

1.安装Mysql

1.创建初始化文件

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

2.使用cmd初始化MySql并安装

1.进入 mysql的bin目录

2.初始化 MySQL 并得到初始密码

​ 在bin目录下,输入:mysqld --initialize --console 命令进行mysql初始化,并得到初始密码(需要记录初始密码,后续会用到)

3.安装 MySQL

​ 输入mysqld --install mysql命令进行mysql服务的安装,出现successfully字样,则代表安装成功!

4.启动 MySQL 服务

​ 使用net start mysql命令启动mysql服务,显示服务启动成功则表示成功。(使用net stop mysql可以关闭mysql服务)

5.连接 MySQL

mysql -u root -p 输入此指令连接 MySQL

-h 可以指定域名

mysql -h localhost -u root -p

# 示例
mysql -u(root) -p(密码)
mysql -h(IP) -u(root) -p(密码)
mysql --host=(IP) --user=(root) --password=(密码)

3.配置环境变量

说明:配置环境变量的目的是为了能在任何位置下都能正常启动并使用mysql!

1. 创建MYSQL_HOME变量----

找到-我的电脑-,右键打开属性,找到-高级系统设置-,找到-高级-选项中的-环境变量-,在-系统变量-中点击新建,变量名建议使用MYSQL_HOME,变量值就是最初mysql的安装路径,之后点击确定即可

2. 在Path中添加新值----

a. 添加%MYSQL_HOME%;

b. 添加%MYSQL_HOME%\bin;

注意:在添加时,Path变量值的展示方式可能不同,有的是展开式展示,如下图:

2.SQL语句

Structured Query Language 结构化查询语言

定义了操作所有关系型数据库的规则 (每一种数据库语法存在些许差异<方言>)

1. SQL语句可以单行或多行书写,以分号结尾。
2.可使用空格和缩进来增强语句的可读性。
3. MysQL数据库的sQL语句不区分大小写,关键字建议使用大写。
4. 3种注释
    -- 注释内容
    # 注释内容
    /*注释内容*/

前言

SQL分类

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等

1.数据库

使用 create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码

创建

  1. 创建数据库: CREATE DATABASE <数据库名>
  2. 创建数据库(如果不存在创建): CREATE DATABASE IF NOT EXISTS <数据库名>
  3. 创建时设置字符集:CREATE DATABASE <数据库名> CHARACTER SET <字符集名>

删除

  1. 删除数据库: DROP DATABASE <数据库名>
  2. 删除数据库(如果存在删除): DROP DATABASE IF NOT EXISTS <数据库名>

查询

  1. 查看当前使用的数据库: SELECT DATABASE()
  2. 显示存在的数据库: SHOW DATABASES
  3. 查询某个数组库的字符集(创建语句):SHOW CREATE DATABASE <数据库名>

修改

  1. 修改数据库的字符集:ALTER DATABASE <数据库名> CHARACTER SET <字符集名>

使用

  1. 操作数据库: USE <数据库名称>

2.用户

本地IP: localhost / 127.0.0.1

英语小字典:

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中的函数 对密码进行加密  

创建

  1. CREATE USER '<用户名>'@'<用户使用IP>' IDENTIFIED BY '<密码>'

-- 创建后默认只有登录权限

删除

  1. 删除用户: DROP USER '<用户名>'@'<用户使用IP>'

修改

  1. 修改密码(方法一):UPDATE USER SET PASSWORD = PASSWORD('<新密码>') WHERE USER = '<用户名>'
  2. 修改密码(方法二):SET PASSWORD FOR '<用户名>'@'<用户使用IP>' = PASSWORD('<修改后的密码>')
  3. 修改密码(方法三):ALTER USER '<用户名>'@'<用户使用IP>' IDENTIFIED BY '<修改后的密码>' (直接对user表操作)

授权

  1. 授权给用户: GRANT <权限名> ON <数据库名>.<表名> TO '<用户名>'@'<用户使用IP>'
  2. 撤销用户特权:PEVOKE <权限名> ON <数据库名>.<表名> FROM '<用户名>'@'<用户使用IP>'
  3. 查询权限:SHOW GRANTS FOR '<用户名>'@'<用户使用IP>'

-- 权限示例: SELECT DELETE UPDATE

# 给与一个用户 所有表 所有数据库的全部权限
GRANT ALL ON *.* TO 'root'@'rootPassword';

3.表

创建

  1. 创建表: CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度),

    ​ <字段名> <字段类型>(最大字节长度))

删除

  1. 删除表:DROP TABLE <表名>
  2. 删除表(如果表存在):DROP TABLE IF EXISTS <表名>
  3. 删除列: ALTER TABLE <表名> DROP COLUMN <列名>

查询

  1. 查看表:SHOW TABLES
  2. 查看表的结构:DESC <表名>
  3. 查看创建表的 SQL 语句:SHOW CREATE TABLE <表名>
  4. 显示数据表 属性/索引: SHOW COLUMNS/INDEX FROM <表名>

修改

  1. 修改表: ALTER TABLE <表名> CHANGE COLUMN <列名> <修改后列名> <列类型> NOT NULL
  2. 修改表名:ALTER TABLE <表名> RENAME TO <新的表名>
  3. 修改表的字符集:ALTER TABLE <表名> CHARACTER SET <字符集名>
  4. 修改列名称及数据类型:ALTER TABLE <表名> CHANGE <列名> <新列名> <新数据类型>
  5. 修改列数据类型:ALTER TABLE <表名> MODIFY <列名> <新数据类型>
  6. 添加一列:ALTER TABLE <表名> add <列名> <数据类型>

其他参数

()内 列参数

  1. 主键: PRIMATY KEY
  2. 外键: FOREIGN KEY
  3. 自增 (只有主键才可设置否则报错): AUTO_INCREMENT
  4. 非空: NOT NULL

()外 表参数:

  1. 选择存储引擎: engine = innodb / engine = myisam (两种都是mysql的数据库的存储引擎的类型,一个支持事物等数据库的高级功能,一个不支持。两个各有用处,各有优劣 <详情可百度>)
  2. 选择数据库默认编码: DEFAULT CHARSET = utf8/gbk
  3. 设置自增键初始值: AUTO_INCREMENT = <你需要的初始值>

4.表数据

添加

  1. 根据列名添加值:INSERT INTO <表名>(列名,列名) VALUES(值,值)
  2. 根据列顺序添加值:INSERT INTO <表名> VALUES(值,值,值,值,null)

删除

条件示例: id = 3 id > 3

  1. 根据条件删除数据(无条件为删除全部数据):DELETE FROM <表名> WHERE <条件>
  2. 删除表中全部数据(直接删除表 再创建一样的空表):TRUNCATE TABLE <表名> -- 此方法删除全部数据效率高

修改

  1. 根据列名修改数据(无条件为修改全部数据):UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... WHERE <条件>

5.SELECT

1.语法

select # 字段列表
from # 表名列表
where # 条件列表
group by # 分组字段
having # 分组之后的条件
order by # 排序
limit # 分页限定

2.基础查询

-- 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 可以以空格替代
  1. 查询全部数据:SELECT * FROM <表名>
  2. 查询部分列数据:SELECT <字段列表名1>,<字段列表名2>... FROM <表名>

3.条件查询

# 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 '%马%';

4.排序查询

-- 语法 order by 子句
    # order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
-- 排序方式 有多个排序条件 第一个排序条件一致时 才会判断第二个条件
    # ASC:升序
    # DESC:降序

5.聚合函数

-- 聚合函数:将一列数据作为整体进行计算
(计算时默认排除 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;

6.分组查询

# 语法: 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;

7.分页查询

# 语法: 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页

8.多表查询

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;

子查询结果不同:

  • 单行单列

    • 可以作为单个值 使用运算符进行判断 > < >= <= <>
  • 单行多列
  • 多行多列

    • 可以当作一个 虚拟的表 进行表的查询
  • 多行单列

    • 可以使用关键字 IN 进行判断

3.约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性

分类

  1. 主键约束:primary key
  2. 非空主键:not null
  3. 唯一约束:unique
  4. 外键约束:foreign key

1.非空约束

# 在创建表时添加 NOT NULL 添加后字段不得为空
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) NOT NULL,
                   <字段名> <字段类型>(最大字节长度));
                   
-- 删除非空约束
ALTER TABLE student MODIFY NAME VARCHAR(20);
-- 不加 NOT NULL 直接用新语句覆盖旧语句

-- 创建表后添加非空约束
ALTER TABLE student MODIFY NAME VARCHAR(20) NOT NULL;

2.唯一约束

# 在创建表时添加 UNIQUE 添加后字段不得重复
    -- 可以存在 NULL 但只能有一条为NULL
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) UNIQUE,
                   <字段名> <字段类型>(最大字节长度));
                   
-- 删除
ALTER TABLE student MODIFY phone VARCHAR(20);

-- 创建表后添加
ALTER TABLE student MODIFY phone VARCHAR(20) UNIQUE;

3.主键约束

  • 含义:非空且唯一
  • 注意:一张表只能有一个字段为主键
  • 主键就是表中记录的唯一标识
# 在创建表时添加 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

4.外键约束

# 在创建表时添加 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 (很危险 一不小心就删记录删除很多)

4.数据库的设计

  1. 多表之间的关系

    1. 一对一:人和身份证,一个身份证只能对应一个人
    2. 一对多(多对一):一个部门有多个员工,一个员工只能对应一个部门
    3. 多对多:学生和课程,一个学生可以选择多门课程,一个课程也可以被很多学生选择
    • 一对多:

      • 多的表里面 添加一的外键
    • 多对多:

      • 利用中间表 进行 多外键与多外键的对应
  2. 数据库设计的范式

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

分类:

  1. 第一范式:每一列都是不可分割的原子数据项

    1. 列不可继续拆分
  2. 第二范式:在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

    1. 函数依赖:A-->B 如果通过A属性(属性组)的值可以确定唯一B属性的值B依赖于A
    2. 完全函数依赖:A-->B 如果A为属性组,则B属性值得确定需要依赖于A属性组中所有的属性值
    3. 部分依赖函数:A-->B 如果A为属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可
    4. 传递函数依赖:A-->B,B -->C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称c传递面数依赖于A
    5. 码∶如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性值)为该表的码

      • 主属性:码属性组中的所有属性
      • 非主属性:除过码属性组的属性
  3. 第三范式:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

5.Mysql数据类型

来源: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 类型,可存储的最大长度不同,可根据实际情况选择。

6.数据库的备份与还原

1.命令行

# 语法
    -- 备份: 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!

2.图形化工具

使用Navicat可进行备份

7.事务

START TRANSACTION; -- 开启事务

# 事务操作代码
# ...

COMMIT; -- 执行代码没有问题 提交事务

ROLLBACK; -- 出现问题 回滚事务
-- 还原数据库到 开启事务之前的状态

使用DML 增删改查 默认提交一次事务 (默认)

# 修改事务的默认提交方式
    -- 查看事务的默认提交方式 SELECT @@autocommit;
    -- 1 代表自动提交  0 代表手动提交
# 修改: SET @@autocommit = 0;

# Mysql 默认自动提交
# Oracle 默认手动提交

事务的四大特征

  1. 原子性:

    • 是不可分割的最小操作单位,要么同时成功,要么同时失败
  2. 持久性:

    • 当事务提交或回滚后,数据库会持久化的保存数据
  3. 隔离性:

    • 多个事务之间 相互影响
  4. 一致性:

    • 事务操作前后 数据总量不变

事务隔离的级别

概念∶多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

存在的问题

  1. 脏读:一个事务,读取到另一个事务中没有提交的数据
  2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
  3. 幻读:一个事务操作(DAL)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改

隔离级别

  1. read uncommitted:读未提交

    • 产生的问题:脏读,不可重复读,幻读
  2. read committed:读已提交

    • 产生的问题:不可重复读,幻读
  3. repeatable read:可重复读

    • 产生的问题:幻读
  4. serializable:串行化

    • 可以解决所有问题 (类似JAVA多线程加锁)

注意:隔离级别从小到大安全性越来越高,效率越来越低

# 数据库 隔离级别 语法
# 查询隔离级别
SELECT @@tx_isolation;
# 设置隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
# 脏读:
    -- READ UNCOMMITTED  事件中未COMMIT 但是数据库已经更改
# 不可重复读:两次SELECT数据不一致

8.忘记ROOT密码

-- 1.cmd --> net stop mysql 停止mysql服务

-- 2.使用无验证方式启动Mysql服务
# mysqld --skip-grant-tables

-- 3.修改ROOT用户密码
USE mysql;
UPDATE user SET password = PASSWORD('新密码') WHERE user='root';
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
前端开发 小程序 API
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
|
1月前
|
关系型数据库 MySQL 数据库连接
关于MySQL-ODBC的zip包安装方法
关于MySQL-ODBC的zip包安装方法
|
2月前
|
关系型数据库 MySQL 数据库
MYSQL解压版安装笔记
MYSQL解压版安装笔记
80 0
|
2月前
|
SQL 关系型数据库 MySQL
(B站动力节点老杜MySQL教程)MySQL课堂笔记-day01.txt
(B站动力节点老杜MySQL教程)MySQL课堂笔记-day01.txt
|
1月前
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
97 1
|
1天前
|
关系型数据库 MySQL 中间件
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-02 死锁和死锁检测
【4月更文挑战第19天】在高并发环境下,死锁发生在多个线程间循环等待资源时,导致无限期等待。MySQL中,死锁可通过`innodb_lock_wait_timeout`参数设置超时或`innodb_deadlock_detect`开启死锁检测来解决。默认的50s超时可能不适用于在线服务,而频繁检测会消耗大量CPU。应对热点行更新引发的性能问题,可以暂时关闭死锁检测(风险是产生大量超时),控制并发度,或通过分散记录减少锁冲突,例如将数据分拆到多行以降低死锁概率。
13 1
|
11天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
13 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
13天前
|
存储 SQL 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-02
【4月更文挑战第7天】数据库通过视图实现事务隔离,不同隔离级别如读未提交、读已提交、可重复读和串行化采用不同策略。以可重复读为例,MySQL使用多版本并发控制(MVCC),每个事务有其独立的视图。回滚日志在无更早视图时被删除。长事务可能导致大量存储占用,应避免。事务启动可显式用`begin`或设置`autocommit=0`,但后者可能意外开启长事务。建议使用`autocommit=1`并显式管理事务,若需减少交互,可使用`commit work and chain`。
28 5
|
15天前
|
SQL 存储 关系型数据库
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-2
【4月更文挑战第5天】两阶段提交是为确保`redo log`和`binlog`逻辑一致,避免数据不一致。若先写`redo log`, crash后数据可能丢失,导致恢复后状态错误;若先写`binlog`,crash则可能导致重复事务,影响数据库一致性。一天一备相较于一周一备,能缩短“最长恢复时间”,但需权衡额外的存储成本。
16 1
|
30天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
92 3