❤️爆肝四万字的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(压缩包) 安装配置

  1. 解压
  2. 配置环境变量,只需要配置path中,mysql的bin目录下即可。
  3. 在解压的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 //第一次登录需要跳过密码验证,代码作用。
  1. 启动管理员模式下的CMD,并将路径切换至MySQL下的bin目录,然后输入mysqld -install(安装mysql,这一步就是将MySQL安装到服务中)。

如果这里安装出现下面情况:


安装包你卸载了服务没删除,sc query mysql查看一下,sc delete mysql删除一下服务就可以了。

  1. 在输入mysqld --initialize-insecure --user=mysql ,进行初始化数据库,初始化后,我们前面在my.ini设置的data就会出现在目录中,data中包括一些初始后的mysql数据库。
  2. 启动MySQL,net start mysql(启动mysql服务),然后用命令mysql -u root -p(注意-p后面不要加空格,因为p是代表密码,空格算是密码一部分) 进入mysql管理页面。
  3. 进入mysql,第一件事情就是修改密码:update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;
  4. 输入 flush privileges; 刷新权限。
  5. 修改 my.ini 文件删除最后一句skip-grant-tables,可以使用#注释掉。
  6. 重启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定义的。
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为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 知识体系命令全集 建议收藏 ❤️

爆肝3万字,CSDN最硬核Mysql知识体系命令全集 ❤️速查手册,建议收藏 ❤️

❤️❤️爆肝3万字整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)--已码一万字❤️❤️