❤️爆肝四万字的MySQL总结全面整理+详细解释❤️
Posted IT_Holmes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️爆肝四万字的MySQL总结全面整理+详细解释❤️相关的知识,希望对你有一定的参考价值。
1. 初识mysql
程序员岗位必备技能:MySQL
数据库(DB,DataBase)
作用:存储数据,管理数据。
1.2 数据库分类
关系型数据库(SQL):就像Excel表格一样,它是有行有列的。
- Mysql, Oracle, Sql Server, DB2, SQLite
- 通过表和表之间,行和列之间的关系进行数据的存储。
非关系型数据库(Not Only SQL , NoSQL):{ key : value }
- Redis, MonDB
- 非关系型数据库是以对象存储,通过对象自身的属性来决定。
DBMS(数据库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据。维护和获取数据。
- MySQL是一个关系型数据库管理系统。
1.3 MySQL 简介
MySQL是一个关系型数据库管理系统。
- 前世:瑞典MySQL AB公司
- 今生:属于Oracle旗下产品
MySQL是最好的RDBMS(Relational Database Management System ,关系数据库管理系统)应用软件之一。
MySQL是开源的数据库软件。
体积小,速度快,总体拥有成本低。
现在MySQL通常适用于中小型网站,也包括大型网站(MySQL之所以能做大型网站,是因为有个东西叫做集群)。
1.4 MySQL 安装
安装建议:
- 官网下载:https://dev.mysql.com/downloads/mysql/
- 尽量不要使用 exe 进行安装,它会走注册表,卸载的时候很麻烦。
- 尽可能使用压缩包安装。
1.5 MySQL(压缩包) 安装配置
- 解压
- 配置环境变量,只需要配置path中,mysql的bin目录下即可。
- 在解压的MySQL目录下,新建MySQL配置文件 my.ini 。
my.ini配置信息如下:
[mysqld]
basedir=E:\\mysql\\mysql-8.0.26-winx64\\ //需要注意最后必须有 \\ 符号!
datadir=E:\\mysql\\mysql-8.0.26-winx64\\data\\
port=3306 //端口
skip-grant-tables //第一次登录需要跳过密码验证,代码作用。
- 启动管理员模式下的CMD,并将路径切换至MySQL下的bin目录,然后输入mysqld -install(安装mysql,这一步就是将MySQL安装到服务中)。
如果这里安装出现下面情况:
安装包你卸载了服务没删除,sc query mysql查看一下,sc delete mysql删除一下服务就可以了。
- 在输入mysqld --initialize-insecure --user=mysql ,进行初始化数据库,初始化后,我们前面在my.ini设置的data就会出现在目录中,data中包括一些初始后的mysql数据库。
- 启动MySQL,net start mysql(启动mysql服务),然后用命令mysql -u root -p(注意-p后面不要加空格,因为p是代表密码,空格算是密码一部分) 进入mysql管理页面。
- 进入mysql,第一件事情就是修改密码:update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;
- 输入 flush privileges; 刷新权限。
- 修改 my.ini 文件删除最后一句skip-grant-tables,可以使用#注释掉。
- 重启mysql即可正常使用,net stop mysql , net start mysql
1.6 SQLyog使用的 注意事项
连接数据库:(这里我连接云端的,一般的都在本地就好)
创建数据库时:字符集和数据库排序选择方面(推荐)
我们可以先查看一下数据库版本:
select version() //查看数据库版本
每一个sqlyog的执行操作,本质就是对应了一个sql,可以在软件的历史记录中查看
创建表: school -》table(表) -》右键创建表
查看表格,添加数据:student -》 open table(打开表) 直接修改数据就好。
这里还是要注意,这些sqlyog的操作,我们都可以在History(历史)中看到。
1.7 连接数据库 和 一些基本命令
命令行连接:
1. mysql -uroot -p --连接数据库。
2. update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’; – 该语法的解释如下图:3. flush privileges; – 刷新权限
- 在Mysql中,所有的语句使用 ; 结尾!
1. show databases; --查看所有的数据库。
2. mysql> use mysql(数据库名) --切换数据库。
3. show tables; – 查看数据库中所有的表。
4. describe 表名; --显示数据库中表的所有信息。
5. create database 数据库名; --创建一个数据库。
6. exit; --退出连接。
7. mysql的注释:-- (sql语言本来的注释)单行注释,在sqlyog里面可以用#号注释(#注释本意上还是 – 注释)
8. mysql多行注释:/* */ 。
- 三种程序猿。
2. 操作数据库
总体步骤:操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
mysql的关键字不区分大小写!
2.1 操作数据库
1. 创建数据库
create database [if not exists] 数据库名;
-- if not exists 在这意思就是如果不存在,就创建该数据库。
注意:[ ]内部的都是可选的。
2. 删除数据库
drop database [if exists] 数据库名;
-- if exists 在这意思就是如果存在,就删除该数据库。
3. 使用数据库
use `数据库名`; -- 切换数据库
如果定义的表明或者字段名是一个特殊的字符,我们在使用时,可以使用 ` `(tab键上面的那个符号)来修饰。如下:
4. 查看数据库
show databases; -- 查看所有数据库
2.2 数据库的数据类型(列类型)
数值:
- tingint – 十分小的数据,它只是占了1个字节。
- smallint – 较小的数据,它占了2个字节。
- mediumint – 中等大小的数据 ,它占了3个字节。
- int – 标准的整数,占了4个字节。
- big – 较大的数据 ,它占8个字节。
- float – 浮点数,单精度,它占4个字节。
- double – 浮点数,双精度 ,它占8个字节。
- decimal – 字符串形式的浮点数 (金融计算的时候通常使用它)
注意:常用的需要记住的int,float,double,decimal。
字符串
- char – 字符串固定大小的范围:0~255(Ascii码)
- varchar – 可变长字符串范围:0~65535 (常用的String),例如:常用的变量 String保存。
- tinytext – 微型文本 范围:2^8 - 1 ,例如:小型博客文章
- text – 文本串 范围:2^16 - 1 。(保存大文本)
时间日期
- date – YYYY-MM-DD 日期格式
- time – HH:mm:ss 时间格式
- datatime – YYYY-MM-DD HH:mm:ss ,将上面两个格式加起来,它是最常用的。
- timestamp – 时间戳,(1970.1.1,到现在的毫秒数。)时间戳也是最常用的。
- year – 年份表示
null
- 没有值,未知
- 注意,不要使用NULL进行运算。(如果用NULL进行运算,结果始终为NULL)
2.3 数据库的字段属性
Unsigned
- 无符号的整数。
- 声明了该列不能声明为负数。
zerofill
- 0填充的。
- 意思就是不足的位数,使用0来填充。
自增:(auto incr?)
- 通常理解为自增,意思就是自动在上一条记录的基础上+1(默认)。
- 通常用来设计唯一的主键~index,必须是整数类型。
- 可以自定义设置主键自增的起始值和步长。
非空,NULL ,Not Null
- 假设设置为 not null(非空) ,如果不给它赋值就会报错!
- NULL, 如果不填写值,默认就是null。
默认:(default)
- 设置默认的值。
- 意思就是如果不指定该列的值,则会有默认的值取代。
另外几个字段:
2.4 创建数据库表(命令行)
创建语句格式要记住:
-- 注意点,使用英文(),表的名称和字段尽量使用``括起来。
-- AUTO_INCREMENT自增。
-- COMMENT注释最好每行都添加。
-- DEFAULT NULL意思就是默认是NULL。
-- PRIMARY KEY 主键,一般一个表只有一个唯一的主键
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`) -- 可以设置在上面的id中,但是为了更明显可以直接单独定义出来。
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- ENGINE=INNODB DEFAULT CHARSET=utf8 是来表的类型和字符集设置
格式:
CREATE TABLE [IF NOT EXISTS] `表名` (
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
......
`字段名` 列类型 [属性] [索引] [注释],
)[表的类型] [字符集设置] [注释]
常用表的命令:
像这些show create database/table ,都是反向操作获取创建表的命令行。
SHOW CREATE DATABASE school; -- 查看创建数据库的语句
SHOW CREATE TABLE student; -- 查看student数据表的定义语句
DESC student -- 显示表的结构
2.5 数据表的类型
engine = INNODB; -- 默认使用。
engine = MYISAM; -- 早些年使用的。
-- 在创建表的时候,这些是配合engine定义的。
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍的myisam |
常规使用操作
MYISAM和INNODB的优缺点:
- MYISAM – 节约空间,速度较快。
- INNODB – 安全性高,事务的处理,多表多用户操作。
所有的数据库文件,在物理空间存在的位置,都在我们创建mysql的data中。一个文件夹就对应一个数据库,因此存储的本质上还是文件的存储!
MySQL引擎在物理文件上的区别:
- InnoDB ,在数据库表中只有一个*.frm文件。
- MYISAM 对应文件:
*.frm – 表结构的定义文件。
*.MYD – 数据文件(data)。
*.MYI – 索引文件(index)。
设置数据库表的字符集编码
CHARSET=utf8
- 不设置的话,回事mysql默认的字符集编码~Latin1(不支持中文的!!!),因此要定义为utf8。
- 当然,我们可以设置这个默认编码,就是在my.ini中配置默认的编码:character-set-server=uft8 。
character-set-server=uft8
2.6 修改和删除 表
修改表
-
修改表名: ALTER TABLE
旧表名
RENAME AS新表名
; -
增加表的字段: ALTER TABLE
表名
ADD 字段名 [INT(11)] [列属性]; -
修改表的字段(重命名,修改约束):
– 修改约束方式:ALTER TABLE表名
MODIFY 字段 [要修改的列属性(类型等)];
– 重命名方式:ALTER TABLE表名
CHANGE 旧字段 新字段 [要修改的列的属性(类型等)]; -
删除表的字段:ALTER TABLE
表名
DROP 字段;
-- 修改表名: ALTER TABLE `旧表名` RENAME AS `新表名`;
ALTER TABLE `teacher` RENAME AS `teacher1`;
-- 增加表的字段: ALTER TABLE `表名` ADD 字段名 [INT(11)] [列属性];
ALTER TABLE `teacher1` ADD age INT(11);
-- 修改表的字段(重命名,修改约束):
-- ALTER TABLE `表名` MODIFY 字段 [要修改的列属性(类型等)]; -- 修改约束方式
-- ALTER TABLE `表名` CHANGE 旧字段 新字段 [要修改的列的属性(类型等)]; -- 重命名方式
ALTER TABLE `teacher1` MODIFY age VARCHAR(11); -- 修改约束方式
ALTER TABLE `teacher1` CHANGE age age1 INT(11); -- 重命名方式
-- 删除表的字段
ALTER TABLE teacher1 DROP age
下面是change和modify的区别:
删除表
- DROP TABLE [IF EXISTS]
表名
;
-- 删除表(如果表存在再删除)
DROP TABLE IF EXISTS teacher1;
所有的创建和删除操作尽量加上判断(if exists 或者 if not exists),以免报错。
3. MySQL 数据管理
3.1 外键约束(不推荐!)
方式一:在创建表的时候,增加约束(代码操作)
几个单词需要记一下:
- constraint 约束 , foreign key 外键 ,references 引用。
-- 创建grade表
CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生表的gradeid字段,要去引用年级表的gradeid
-- 1. 定义外键key。
-- 2. 给外键添加约束(执行引用)。
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) `student`NOT NULL COMMENT '学生的年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
注意:删除外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表。否则报错如下:
方式二:创建表成功后,添加外键约束
格式:
- alter table
表
add constraint约束名
foreign key (作为外键的列
) references那个表
(哪个字段
)
-- 创建grade表
CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建student表
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建表的时候没有外键关系:
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`gradeid`)
注意:
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!因为,引用过多删除表的时候很难删除!因此,我们不建议使用(避免数据库过多造成的困扰,这里了解即可~) 。
3.2 DML语言
数据库意义:数据存储,数据管理。
DML语言:数据操作语言。
- insert into
- update
表名
set字段
=‘value’ - delete from
3.3 insert into 添加
格式:
- 插入语句(添加):
INSERT INTO表明
([字段名1,字段名2 ,…]) VALUES (‘值1’,‘值2’,…) , (‘值1’,‘值2’,…) , …;
-- 插入语句(添加)
-- insert into `表明` ([字段名1,字段名2 ,...]) values ('值1','值2',...);
INSERT INTO `grade` (`gradename`) VALUES('高三三班')
如果不写表的字段,它就会一一匹配。容易报错:does’t match (不匹配)。
3.4 update 表名
set 字段
=‘value’ 修改
格式:
- update
表名
set字段1
=‘new_value1’,字段2
=‘new_value2’ , … where 条件
-- 格式:update `表名` set `字段`='new_value' where 条件
UPDATE `student` SET `name`='匿名' WHERE id = 1;
-- 如果不设置where条件,就会默认修改全部
UPDATE `student` SET `name`='匿名';
-- 修改多个属性(字段值),逗号隔开
UPDATE `student` SET `name`='张三',`email`='123456@qq.com' WHERE id >= 2;
where 运算符 ,常用的案例,如下表格:
注意:
- new_value,不一定是一个具体的值,也可以是个变量,函数调用等。如下:
-- CURRENT_TIME 获得当前时间
UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='张三' AND `sex`='男'
3.5 delete from删除 ,truncate 清空
delete语法:
- delete from
表名
where 条件;
注意!!!一定添加条件,不添加条件就是全部删除。
-- 删除student表的全部数据,不过通过这种方式全部删除数据,我们不推荐!我们使用truncate来清空数据。
DELETE FROM `student`
-- 删除id为1的数据
DELETE FROM `student` WHERE id = 1;
- truncate,作用:完全清空一个数据库表,表的结构和索引约束不会变!
-- 清空表的数据
TRUNCATE `student`
delete from 表名
和 truncate 表名
的区别
相同点:
- 都能删除数据,都不会删除表结构。
不同点:
- truncate – 重新设置,自增列,计时器会归零。
- truncate – 不会影响事务。
例如:delete from 表名
删除所有数据后,就不会对自动递增重新设置。
4. DQL查询数据
4.1 DQL(Data Query Language:数据查询语言)
- 所有的查询操作都用它 select 。
- 简单的查询,复杂的查询它都能做到。
- 在数据库中,它是最重要的,使用频率最高的。
4.2 指定查询字段
select 字段
from 表名
和 别名
-- 查询全部 select * from `表名`
-- select `字段` from `表名`
SELECT `id`,`name` FROM student
-- 别名:as ,可以字段起别名,也可以给表名起别名
SELECT `id` AS 学号,`name` AS 学生名字 FROM student AS 学生
数据结构课设之家谱管理系统暴肝四万字,看完你也可以
❤️爆肝万字整理的综合架构web服务之nginx详解❤️,附建议收藏
Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入全面详细,收藏备用)
❤️爆肝3万字,最硬核丨Mysql 知识体系命令全集 建议收藏 ❤️