数据库
首页 > 数据库> > 超硬核学习手册系列1——深入浅出MySQL的知识点,学习收藏必备

超硬核学习手册系列1——深入浅出MySQL的知识点,学习收藏必备

作者:互联网

我正在参与CSDN《新程序员》有奖征文
茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!

愿你在未来的日子,保持热爱,奔赴山海!

文章目录

1. 数据库的基本知识

1.1 为什么要学习数据库

首先,我们要知道我们保存的数据的方式有几种呢?

  1. 数据保存在内存

    保存在内存的方式有:集合和数组的方式。

    int[] arr = new int[]{1, 2, 3, 4};
    
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出来的对象存储在堆中,堆是内存中的一小块空间。

    优点:内存速度快。
    缺点:断电/程序退出,数据就清除了,不能保证永久保存数据。

  2. 数据保存在普通文件
    优点:永久保存
    缺点:查找,增加,修改,删除数据比较麻烦,效率低

    给大家看看我珍藏多年的照片文件。

  3. 数据保存在数据库
    优点:

    • 永久保存,实现数据持久化。

    • 使用完整的管理系统统一管理,易于查询,通过SQL语句比较方便的操作数据库,数据库是对大量的信息进行管理的高效的解决方案

可以看到,使用数据库的好处:

1.2 数据库的概念

  1. DB:数据库,存储数据的仓库。它保存了一系列有组织的数据。
  2. DBMS:数据库管理系统,又称为数据库软件(产品)。数据库是通过 DBMS创建和操作的容器,用于管理DB中的数据 。
  3. SQL:结构化查询语言,专门用来与数据库通信的语言即用于和DBMS通信的语言。

1.3 数据库存储数据的特点

  1. 数据库存储方式是将数据放到表中,表再放到库中。

  2. 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性

  3. 表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中类的设计。

  4. 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似Java中的属性

  5. 表中的数据是按行存储的,每一行类似于Java中的对象。

1.4 常见的数据库

1.5 数据库的卸载与安装

MySQL安装地址

1.5.1 MySQL目录结构

目录结构大概了解下,知道有什么就行啦:

│-- bin:mysql相关的可执行文件*.exe
     │-- MySQLInstanceConfig.exe mysql的配置程序
│-- data: mysql自带的数据库文件(不用关注)
│-- include: c语言的头文件(不用关注)
│-- lib: 存放mysql使用到的dll动态库(相当于jar包,不用关注)
│-- my.ini mysql的配置文件,配置了mysql的相关信息

1.5.2 MySQL服务的启动和停止

MySQL服务的启动和停止有两种方式:

1.5.3 登录MySQL服务器和退出

MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,我们在使用安装时设置了密码,这个账号和密码就是超级用户管理员,直接登录就行。

1.6 服务器与数据库、表、记录的关系

2. MySQL基本语法

2.1 SQL语句的分类和语法

1. SQL是什么

(Structured Query Language) 结构化查询语言,简称SQL。专门用来与数据库通信的语言。

2. 作用

3. 分类

其中较为重点的是:DMLDQL。就是增删改查。

4. 规范

  1. MySQL数据库的SQL语句不区分大小写,但建议关键字大写,表名、列名小写 。
  2. SQL语句可以单行或多行书写,以分号结尾,即每条命令最好用分号结尾
  3. 每条命令根据需要,可以进行缩进或换行来增强可读性。
  4. 注释:
    • SQL特有的单行注释:#注释文字
    • 单行注释:-- 注释文字
    • 多行注释:/* 注释文字 */

3. DCL语言的学习

主要对用户的权限的操作。主要了解即可。

我们默认使用的MySQL安装的时候带着的超级管理员用户:root用户,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。

1. 创建用户

2. 授权用户

用户创建之后,不像root超级管理员,它基本没什么权限!需要给用户授权。

3. 撤销授权

4. 查看权限

5. 删除用户

6. 修改密码

需要在未登陆MySQL的情况下操作。而且需要知道原来的密码情况下。

4. DDL语言的学习

库和表的管理。

1. 库的管理

1.1 创建数据库

既然我们MySQL都有了对吧,那不就得创建一个属于我们自己的数据库,那怎么创建呢?这里创建的关键字为:CREATE

CREATE DATABASE 数据库名;

这个可以直接创建数据库,但是如果不确定数据库存不存在,存在还有必要创建吗,而且再创建也会报错,那这个时候就需要一个关键词:IF NOT EXISTS判断是否不存在。

CREATE DATABASE IF NOT EXISTS 数据库名;

在创建的过程中,我们也可以指定一个字符集给这个数据库,默认字符集为UTF-8

CREATE DATABASE 数据名 DEFAULT CHARACTER SET 字符集;

直接演示下:

CREATE DATABASE stu;

CREATE DATABASE IF NOT EXISTS stu;

CREATE DATABASE stu2 CHARACTER SET gbk;

1.2 查看数据库

既然创建了数据库,那我们该如何去查看呢?这里查看的关键字为:SHOW

1.3 修改和删除数据库
1.4 使用数据库
1.5 小结
DDL语句操作数据库关键字
创建CREATE DATABASE 数据库名;
修改ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
查看SHOW DATABASES;
删除DROP DTABASE 数据库名;

2. 表的管理

注意事项:每次要使用表前,都要先使用某个数据库,确定你在那个数据库中!

2.1 创建表

我们在创建数据库后,就相当于创建了一个文件夹,那我们就需要创建一个可以来保存的数据的文件对吧,那接下来我们先来创建表。创建的关键词:CREATE

CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2);

是不是觉得这样写觉得不好看,上面有提到SQL规范中,可以适当的缩进或换行来增加可读性:

CREATE TABLE 表名 (
    字段名1 字段类型1,
    字段名2 字段类型2
);

而且如果我们无法判断这个表是否存在,我们也可以用IF NOT EXISTS这个关键词来判断是否不存在。

CREATE TABLE IF NOT EXISTS 表名 (字段名1 字段类型1, 字段名2 字段类型2);

那这其中的字段名是我们起的名字,那这个字段类型有什么类型呢:

演示一下创建表格吧:

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

后面我直接用SQLyog这个软件演示吧,毕竟这个DOS命令敲起来没有这个图像客户端方便。

如果没有安装SQLyog的,可以去上面我在安装MySQL里面有教大家,一般如果全跟着完成的话,就有了。如果你还想要DOS命令来训练,当然我不反对。嘿嘿!加油。

2.2 查看表

既然我们创建了表,那就看看我们创建了什么表对吧。查看的关键词:SHOWDESC

  1. 查看我们正在使用的数据库中的所有表:

    SHOW TABLES;
    
  2. 查看表结构即可以看到我们创建表时候的数据类型和字段:

    DESC 表名;
    
  3. 查看创建表的SQL语句:

    SHOW CREATE TABLE 表名;
    

    演示如下:

    SHOW TABLES;
    
    DESC student;
    
    SHOW CREATE TABLE student;
    

    比较方便的我还是用DOS命令演示更为简单。

2.3 复制表

复制表,不复制数据内容,相当于把表结构复制过去。

CREATE TABLE 表名 LIKE 其他表;

演示下:

CREATE TABLE s1 LIKE student;

SHOW TABLES;

DESC s1 ;

2.4 删除表

直接删除表

DROP TABLE 表名;

如果无法判断表名是否存在,就可以使用IF EXISTS这个关键词来判断是否存在。

DROP TABLE IF EXISTS 表名;

演示一下:

SHOW TABLES;

DROP TABLE s1;

SHOW TABLES;

DROP TABLE s1;

DROP TABLE IF EXISTS s1;

2.5 修改表

一般来说,我们创建了表,就不怎么需要修改了,但是需求总是会有。修改的关键词:ALTER。而修改的语句一般都是ALTER TABLE 表名 xxx

  1. 添加表一列,添加关键词ADD

    ALTER TABLE 表名 ADD 字段名 字段类型;
    

    演示,在student表中增加一个age,类型为int的一列。

    ALTER TABLE student ADD age INT;
    
    DESC student;
    

  2. 修改字段类型,添加关键词MODIFY

    ALTER TABLE 表名 MODIFY 字段名 新类型;
    

    演示一下,把student表中的name字段的改成varchar(10)。

    ALTER TABLE student MODIFY name VARCHAR(10);
    
    DESC student;
    

  3. 修改字段名,关键词:CHANGE

    ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
    

    演示一下,把student表中的name字段的改成sName,类型为varchar(20)。

    ALTER TABLE student CHANGE NAME sName VARCHAR(20);
    
    DESC student;
    

  4. 删除字段,删除的关键词:DROP

    ALTER TABLE 表名 DROP 字段名;
    

    演示下,删除student表中的字段age。

    ALTER TABLE student DROP age;
    
    DESC student;
    

  5. 修改表名,即重命名表名,关键词:RENAME

    RENAME TABLE 表名 TO 新表名;
    

    演示一下,将student表改名成student2表。

    RENAME TABLE student TO student2;
    
    SHOW TABLES;
    

  6. 修改表的字符集,没有设置字符集,默认为utf8。

    ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;
    

    演示一下,将student2表的编码修改成gbk>。

    ALTER TABLE student2 DEFAULT CHARACTER SET gbk;
    
2.6 小结
DDL语句操作表关键字
创建CREATE TABLE 表名;
修改ALTER TABLE 表名 xxx;
查看SHOW TABLES;
删除DROP TABLE 表名;

5. DML语言的学习

主要对表中的数据进行增删改。

先创建一个beauty表,其中包含了id,name,sex,birthday,phone字段。

CREATE TABLE beauty(
	id INT, 
	NAME VARCHAR(20),
	sex CHAR(2),
	birthday DATE,
	phone VARCHAR(15)
);

这样就先把表创建了,接下来的操作都是对这里面操作。

下面的学习,都对表进行操作更新,现在还没有到学习查询语句,这里先教大家一句查看表中的所有数据:

SELECT * FROM beauty;

1. 插入数据

插入方法有两种,我们一个一个学习:

插入关键词:INSERT INTO

1.1 第一种插入方式
  1. 插入全部字段

    • 所有的字段名都写出来:

      INSERT INTO 表名 (字段名1, 字段名2, 字段名3, ...) VALUES (值1, 值2, 值3, ...);
      
    • 如果按照原来的顺序添加字段值的话,可以不写字段名,直接添加数据:

      INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);
      
  2. 插入部分数据

    只需要指定要插入数据的字段,而且可以随意调换位置,但是字段值得对应列的类型,如果没有添加数据的字段则会使用NULL:

    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);
    
  3. 上面的SQL语句一一演示下:

    • 写所有的字段名。

      INSERT INTO beauty (id, NAME, sex, birthday, phone) 
      VALUES(1, "唐艺昕", '女', "1987-10-9", "1899888823");
      
      SELECT * FROM beauty;
      

    • 而且这里插入值的类型必须要与列的类型一致或兼容。

      INSERT INTO beauty (id, NAME, sex, birthday, phone) 
      VALUES(2, 唐艺昕, 女, "1987-10-9", 1899888823);
      

    • 不写字段名。并且可以为NULL值的列可以插入NULL。

      INSERT INTO beauty VALUES
      (2, "迪丽热巴", '女', "1992-6-3", "1899888824"),
      (3, "古力娜扎", '女', "1992-5-2", NULL);
      
      SELECT * FROM beauty;
      

    • 插入部分数据。如果没有插入数据的字段,则会显示为默认值,没有设置默认值,则为NULL。

      INSERT INTO beauty (id, NAME, sex) 
      VALUES(4, "杨幂", '女');
      
      SELECT * FROM beauty;
      

  4. 特点

    • 字段类型和值类型一致或兼容,而且一对一的对应,个数相同,类型相同。
    • 可以不写一些字段名,添加的时候默认为NULL,除非有设置默认值。
1.2 第二种插入方式

相对第一种,语法更为简单点。

  1. 语法:

    INSERT INTO 表名 set 字段=值, 字段2=值2,...;
    
  2. 应用:

    重新添加一条数据:

    INSERT INTO beauty 
    SET id=5, NAME='诸葛大力', sex='女', birthday='1995-05-23';
    
    SELECT * FROM beauty;
    

1.3 两种方式的比较
  1. 方式一支持多行插入,而方式二不支持。

    INSERT INTO beauty VALUES
    (6, '娄艺潇', '女', '1988-12-27', '16689540123'),
    (7, '陈美嘉', '女', '1985-11-21', '16689540123'),
    (8, '刘萌萌', '女', '1990-10-16', '16689540123');
    
    SELECT * FROM beauty;
    

  2. 方式一支持子查询(后面详细讲解),而方式二不支持。

    INSERT INTO beauty (id, NAME , sex ,birthday) 
    SELECT  9, '赵雯', '女', '1987-10-28';
    
    SELECT * FROM beauty;
    

所以方式一的插入方法使用较多。

1.4 在DOS命令窗口操作数据乱码问题

我们现在都是在SQLyog软件进行操作数据,它本身字符集和MySQL服务器的字符集对应了,所以不会出现乱码。但是当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败。

具体出现的原因:

那如何解决呢:

  1. 在DOS命令行下输入:set names gbk;就是让现在服务器使用gbk编码。

    注意:以上方式为临时方案,退出DOS命令行就失效了,需要每次都配置。

  2. 修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了,所以并不推荐。

2. 修改更新数据

修改表的关键词:UPDATEA

  1. 我们可以不带条件修改数据,这种相当于把所有这个字段名都修改了。

    UPDATE 表名 SET 字段名=字段值;
    
  2. 也可以带条件修改数据,这种相当于只是在WHERE后条件找到的行修改其字段名。

    UPDATE 表名 SET 字段名=字段值 WHERE 条件;
    

    总结语法可以这么写:

    UPDATE 表名 SET 字段名=字段值 【WHERE 条件】; 【】其中的代表可写可不写。 
    
  3. 具体操作演示一下:

    • 不带条件修改数据,将所有的性别改成男。当然女神们怎么可能是男的呢?后面我就修改回来啦。

      UPDATE beauty SET sex = '男';
      
      SELECT * FROM beauty;
      
      UPDATE beauty SET sex = '女';
      

    • 带条件修改数据,将id号为5的女神姓名改为成果。其实诸葛大力真名就是成果。

      UPDATE beauty SET NAME = '成果' WHERE id = 5;
      
      SELECT * FROM beauty;
      

    • 一次修改多个列,把id号为5的女神姓名改为诸葛大力,并且phone改为155673412312

      UPDATE beauty SET NAME = '诸葛大力', phone = '155673412312' WHERE id = 5;
      
      SELECT * FROM beauty;
      

3. 删除表中数据

删除也有两种方式:

3.1 第一种删除方式
  1. 带WHERE筛选条件删除数据,删除掉满足条件的数据。

    DELETE FROM 表名 WHERE 条件;
    
  2. 不带WHERE筛选条件删除数据,直接相当于删除表中所有数据。嘿嘿删表删库跑路,真的刺激。

    DELETE FROM 表名;
    
  3. 具体演示下:

    • 带条件删除数据,删除id为9的记录

      DELETE FROM beauty WHERE id = 9;
      
      SELECT * FROM beauty;
      

    • 可以删除多条的记录吗:

      DELETE FROM beauty WHERE id = 8, id = 7;
      
      这样肯定不行的,会报错:
      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' id = 7' at line 1
      
      所以可以这样做:
      DELETE FROM beauty WHERE id IN (7, 8);
      
      SELECT * FROM beauty;
      

    • 不带条件删除数据,删除表中的所有数据,这里的表我是有备份的,可以看我操作即可,等后面学到备份再来删除不香吗,或者你还想,然后再添加进去即可。

      DELETE FROM beauty;
      
      SELECT * FROM beauty;
      

3.2 第二种删除方式

相对第一种而言,它更加的暴力,只能全部删除掉数据了。是不是很暴力。

  1. 语法:

    TRUNCATE TABLE 表名;
    
  2. 应用:

    TRUNCATE TABLE beauty;
    
    SELECT * FROM beauty;
    

3.3 两种方式大PK

4. 小结

DML语句操作表关键字
插入第一种:INSERT INTO 表名 (字段1, 字段2…) values(字段值1, 字段值2…);
第二种:INSERT INTO 表名 SET 字段1 = 字段值1,字段2 = 字段值2;
修改UPDATE 表名 SET 字段1= 字段值1, 字段2 = 字段值2… 【WHERE 筛选条件】;
删除第一种:DELETE FROM 表名 【WHERE 筛选条件】;
第二种:TRUNCATE TABLE 表名;

6. 完结

相信各位看官看到这里都会MySQL有了一定了解吧,当然还没有涉及到的,由于篇幅限制,查询篇我放在了下一篇中啦。查询对我们还是挺重要,对于初级程序员来说,使用最多就是查询语句了。

而我们在实际应用,MySQL还是占非常大的一个主流,我们今天了解一个MySQL的基础系列,对以后的一些高级应用,调优都是有一定的帮助。并且面试中比较常问的面试题中都有MySQL的身影,所以MySQL的学习也是必不可少滴!

我们还是小小的总结下吧:

DCL: 主要对用户的权限的操作
创建用户: CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
授权用户: GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
撤销授权: REVOKE 权限1, 权限2... ON 数据库名.表名 FROM '用户名'@'主机名';
查看权限: SHOW GRANTS FOR '用户名'@'主机名';
删除用户: DROP USER '用户名'@'主机名';

DDL:库和表的管理。
创建数据库: CREATE DATABASE 数据库名;
创建表: CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2);
修改数据库: ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
修改表: ALTER TABLE 表名 一些操作;
删除数据库: DROP DATABASE 数据库名;
删除表: DROP TABLE 表名;

DML:主要对表中的数据进行增删改。
插入数据: INSERT INTO 表名 (字段名1, 字段名2, 字段名3, ...) VALUES (值1, 值2, 值3, ...);
修改数据: UPDATE 表名 SET 字段名=字段值;
删除数据: DELETE FROM 表名;

当然啦,更多语句命令的一些细节,希望大家可以仔细学习!

学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!

感谢各位看到这里!愿你韶华不负,青春无悔!

注: 如果文章有任何错误和建议,请各位大佬尽情留言!如果这篇文章对你也有所帮助,希望可爱亲切的您给个三连关注下,非常感谢啦!

标签:知识点,beauty,数据库,MySQL,字段名,表名,TABLE,硬核
来源: https://blog.csdn.net/weixin_45766180/article/details/118458278