前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Mysql】耗时7200秒整理的mysql笔记!常用API汇总!包教包会!

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

原创
作者头像
LonelySnowman
发布2022-12-05 22:55:14
1.3K0
发布2022-12-05 22:55:14
举报
文章被收录于专栏:码农生活码农生活

Mysql全套笔记

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

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

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

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

1.安装Mysql

1.创建初始化文件

a. 找到MySql解压好的文件夹的根目录,在根目录下创建文件 my.ini(后缀为.ini)

b. 修改为如下配置

(注意:下列命令是初始化文件中的初始化命令,需要根据自己情况修改的只有mysql的安装路径以及数据的存放路径)

代码语言:text
复制
[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 并得到初始密码

代码语言:txt
复制
	在bin目录下,输入:<font color=red>mysqld --initialize --console </font>命令进行mysql初始化,并得到初始密码(需要记录初始密码,后续会用到)

3.安装 MySQL

代码语言:txt
复制
	输入<font color=red>mysqld --install mysql</font>命令进行mysql服务的安装,出现successfully字样,则代表安装成功!

4.启动 MySQL 服务

代码语言:txt
复制
	使用<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

代码语言:sql
复制
# 示例
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 结构化查询语言

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

代码语言:txt
复制
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.数据库

<font color=orange>使用 create database 数据库名 character set utf8; 创建数据库并设置数据库的字符编码</font>

创建

  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.用户

<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

查询

代码语言:sql
复制
-- 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

代码语言:sql
复制
# 给与一个用户 所有表 所有数据库的全部权限
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.语法
代码语言:sql
复制
select # 字段列表
from # 表名列表
where # 条件列表
group by # 分组字段
having # 分组之后的条件
order by # 排序
limit # 分页限定
2.基础查询
代码语言:sql
复制
-- 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.条件查询
代码语言:sql
复制
# 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.排序查询
代码语言:sql
复制
-- 语法 order by 子句
	# order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
-- 排序方式 有多个排序条件 第一个排序条件一致时 才会判断第二个条件
	# ASC:升序
	# DESC:降序
5.聚合函数
代码语言:sql
复制
-- 聚合函数:将一列数据作为整体进行计算
(计算时默认排除 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.分组查询
代码语言:sql
复制
# 语法: 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.分页查询
代码语言:SQL
复制
# 语法: 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.多表查询
代码语言:sql
复制
SELECT * FROM table1, table2;
-- 笛卡尔积 A B
	# 有两个集合 A 和 B 取这两个集合的所有组成情况
	# 要完成多表查询 需要消除无用数据

-- 消除无用数据方法
	# 内连接查询
    # 外连接查询 
    # 子查询
内连接
代码语言:sql
复制
-- 内连接
	# 从哪些表中查询数据
	# 查询条件是什么
	# 查询哪些字段
	

-- 隐式内连接 使用 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';
外连接
代码语言:sql
复制
-- 外连接查询

-- 左外连接 OUTER 可以省略
SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件
# 查询的是 左表中所有的数据 以及其交集部分


-- 右外连接 OUTER 可以省略
SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件
# 查询的是 右表中所有的数据 以及其交集部分
子查询
代码语言:sql
复制
-- 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.非空约束

代码语言:sql
复制
# 在创建表时添加 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.唯一约束

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

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

3.主键约束

  • 含义:非空且唯一
  • 注意:一张表只能有一个字段为主键
  • 主键就是表中记录的唯一标识
代码语言:sql
复制
# 在创建表时添加 PRIMARY KEY
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) PRIMARY KEY,
                   <字段名> <字段类型>(最大字节长度));
                   
-- 删除
ALTER TABLE student MODIFY phone VARCHAR(20);

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

自增主键:如果某一列为数值类型 使用 auto_increment 可以完成 值 的自动增长

代码语言:sql
复制
# 在创建表时添加 PRIMARY KEY AUTO_INCREMENT
CREATE TABLE <表名> (<字段名> <字段类型>(最大字节长度) PRIMARY KEY AUTO_INCREMENT,<字段名> <字段类型>(最大字节长度));
# 可以手动插入 正常值
# 自增值根据上衣条记录加1

4.外键约束

代码语言:sql
复制
# 在创建表时添加 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. 多表之间的关系
  2. 一对一:人和身份证,一个身份证只能对应一个人
  3. 一对多(多对一):一个部门有多个员工,一个员工只能对应一个部门
  4. 多对多:学生和课程,一个学生可以选择多门课程,一个课程也可以被很多学生选择
  • 一对多:
    • 多的表里面 添加一的外键
  • 多对多:
    • 利用中间表 进行 多外键与多外键的对应
  1. 数据库设计的范式

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

关系数据库有六种范式:第一范式(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.命令行

代码语言:sql
复制
# 语法
	-- 备份: mysqldump -u用户名 -p密码 需要备份的数据库名称 > 保存路径
	-- 还原:
		1.登录数据库
		2.创建数据库
		3.使用数据库 -- 使用创建的数据库
		4.执行文件 -- 执行命令: source 文件路径

实例

代码语言:text
复制
mysqldump -u root -p test > E:\桌面\Note\data.sql
代码语言:sql
复制
create database databaseone;
use databaseone;
source E:\data.sql
-- OK!

2.图形化工具

使用Navicat可进行备份

7.事务

代码语言:sql
复制
START TRANSACTION; -- 开启事务

# 事务操作代码
# ...

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

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

<font color=pink>使用DML 增删改查 默认提交一次事务</font> (默认)

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

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

事务的四大特征

  1. 原子性:
    • 是不可分割的最小操作单位,要么同时成功,要么同时失败
  2. 持久性:
    • 当事务提交或回滚后,数据库会持久化的保存数据
  3. 隔离性:
    • 多个事务之间 相互影响
  4. 一致性:
    • 事务操作前后 数据总量不变

事务隔离的级别

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

<font color=pink>存在的问题</font>

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

隔离级别

  1. read uncommitted:读未提交
    • 产生的问题:脏读,不可重复读,幻读
  2. read committed:读已提交
    • 产生的问题:不可重复读,幻读
  3. repeatable read:可重复读
    • 产生的问题:幻读
  4. serializable:串行化
    • 可以解决所有问题 (类似JAVA多线程加锁)

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

代码语言:sql
复制
# 数据库 隔离级别 语法
# 查询隔离级别
SELECT @@tx_isolation;
# 设置隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;

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

8.忘记ROOT密码

代码语言:sql
复制
-- 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mysql全套笔记
    • 1.安装Mysql
      • 1.创建初始化文件
      • 2.使用cmd初始化MySql并安装
      • 3.配置环境变量
    • 2.SQL语句
      • 前言
      • 1.数据库
      • 2.用户
      • 3.表
      • 4.表数据
      • 5.SELECT
    • 3.约束
      • 1.非空约束
      • 2.唯一约束
      • 3.主键约束
      • 4.外键约束
    • 4.数据库的设计
      • 5.Mysql数据类型
        • 数值类型
        • 日期和时间类型
        • 字符串类型
      • 6.数据库的备份与还原
        • 1.命令行
        • 2.图形化工具
      • 7.事务
        • 8.忘记ROOT密码
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档