呕心沥血写了三天3两夜24k字的MySQL详细教程(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 呕心沥血写了三天3两夜24k字的MySQL详细教程(二)

第三章 SQL语句


3.1 SQL的概念


3.1.1 什么是SQL


结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。


3.1.2 SQL作用


通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。 SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

微信图片_20220524131755.png

3.1.3 SQL语句分类


1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等


2. DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert,delete, update等


3. DQL(Data Query Language) 数据查询语言 (掌握)DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以我们的程序员把查询语句的语句称作为DQL语言


4. DCL(Data Control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等


5. TCL(Transaction Control Language) 事务控制语言用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等


3.2SQL通用语法


1. SQL语句可以单行或多行书写,以分号结尾。


2. 可使用空格和缩进来增强语句的可读性。


3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

SELECT * FROM student;

4. 3种注释 单行注释: -- 注释内容 或 # 注释内容(mysql特有) 多行注释: /* 注释 */


3.3DDL语句


3.3.1DDL操作数据库


创建数据库


1. 直接创建数据库 CREATE DATABASE 数据库名;


2. 判断是否存在并创建数据库(了解) CREATE DATABASE IF NOT EXISTS 数据库名;


3. 创建数据库并指定字符集(了解) CREATE DATABASE 数据库名 CHARACTER SET 字符集;4. 具体操作:直接创建数据库db1


//

CREATE DATABASE db1;

微信图片_20220524131804.png

判断是否存在并创建数据库db2

SELECT * FROM student;CREATE DATABASE db1;CREATE DATABASE IF NOT EXISTS db2;



创建数据库并指定字符集为gbk


CREATE DATABASE db2 CHARACTER SET gbk


查看数据库


1. 查看所有的数据库


SHOW databases

;微信图片_20220524131811.png

2. 查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名; 微信图片_20220524131817.png

修改数据库(了解)


修改数据库字符集格式

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

具体操作:

       将db3数据库的字符集改成utf8

CREATE DATABASE db2 CHARACTER SET gbk;ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;

微信图片_20220524131822.png

删除数据库


DROP DATABASE 数据库名;

具体操作:

删除db2数据库

DROP DATABASE db2;

微信图片_20220524131828.png

使用数据库


1. 查看正在使用的数据库

SELECT DATABASE();

2. 使用/切换数据库 USE 数据库名;

具体操作:查看正在使用的数据库

SELECT DATABASE();

使用db1数据库

USE db1;

微信图片_20220524131834.png3.3.2 DDL操作表


 创建表


前提先使用某个数据库


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


建议写成如下格式:


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

);


MySQL数据类型 MySQL中的我们常使用的数据类型如下:  微信图片_20220524134118.png

详细的数据类型如下(不建议详细阅读!)微信图片_20220524134123.png

创建student表包含id,name,birthday字段


////

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

查看表


1. 查看某个数据库中的所有表


SHOW TABLES;


2. 查看表结构


DESC 表名;


3. 查看创建表的SQL语句


SHOW CREATE TABLE 表名;


具体操作:


       查看mysql数据库中的所有表


SHOW TABLES;

微信图片_20220524134130.png查看student表的结构

DESC student;

微信图片_20220524134141.png查看student的创建表SQL语句

SHOW CREATE TABLE student;

微信图片_20220524134148.png

  快速创建一个表结构相同的表


CREATE TABLE 新表名 LIKE 旧表名;

具体操作:

       创建s1表,s1表结构和student表结构相同

CREATE TABLE S1 LIKE STUDENT;

微信图片_20220524134154.png

删除表


1. 直接删除表 DROP TABLE 表名;

2. 判断表是否存在并删除表(了解) DROP TABLE IF EXISTS 表名;

具体操作:

       直接删除表s1表

DROP TABLE s1;

微信图片_20220524134200.png判断表是否存在并删除s1表

DROP TABLE IF EXISTS s1;

微信图片_20220524134206.png 修改表结构


修改表结构使用不是很频繁,只需要知道下,等需要使用的时候再回来查即可


1. 添加表列 ALTER TABLE 表名 ADD 列名 类型;


具体操作:


       为学生表添加一个新的字段remark,类型为varchar(20)


///

ALTER TABLE student ADD remark VARCHAR(20);

微信图片_20220524134211.png2. 修改列类型 ALTER TABLE 表名 MODIFY 列名 新的类型;

具体操作:将student表中的remark字段的改成varchar(100)

ALTER TABLE student MODIFY remark VARCHAR(100);

微信图片_20220524134217.png3. 修改列名 ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;


具体操作:将student表中的remark字段名改成intro,类型varchar(30)


ALTER TABLE student CHANGE remark intro varchar(30);

微信图片_20220524134223.png 4. 删除列 ALTER TABLE 表名 DROP 列名;

具体操作:删除student表中的字段intro

ALTER TABLE student DROP intro;

微信图片_20220524134230.png5. 修改表名 RENAME TABLE 表名 TO 新表名;

具体操作:将学生表student改名成student2

RENAME TABLE student TO student2;

微信图片_20220524134236.png 6. 修改字符集 ALTER TABLE 表名 character set 字符集;

具体操作:将sutden2表的编码修改成gbk

ALTER TABLE student2 character set gbk;

微信图片_20220524134242.png3.4 DML语句


3.4.1插入记录


插入全部字段


插入全部字段


所有的字段名都写出来


INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);


不写字段名 INSERT INTO 表名 VALUES (值1, 值2, 值3…);


                       插入部分字段

插入部分数据


INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); 没有添加数据的字段会使用NULL


1. 关键字说明


INSERT INTO 表名 – 表示往哪张表中添加数据(字段名1, 字段名2, …) ‐‐ 要给哪些字段设置值VALUES (值1, 值2, …); ‐‐ 设置具体的值


2. 注意


值与字段必须对应,个数相同,


类型相同值的数据大小必须在字段的长度范围内


除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)


如果要插入空值,可以不写字段,或者插入null


3. 具体操作:插入部分数据,往学生表中添加 id, name, age, sex数据


INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');

微信图片_20220524134250.png

向表中插入所有字段

所有的字段名都写出来

INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');

微信图片_20220524134258.png

不写字段名

INSERT INTO student VALUES (3, '王五', 18, '男', '北京');

微信图片_20220524134305.png

 DOS命令窗口操数据库乱码


当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败

微信图片_20220524134311.png 错误原因:因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码 微信图片_20220524134316.png

查看 MySQL 内部设置的编码 show variables like 'character%'; 微信图片_20220524134331.png

解决方案:修改client、connection、results的编码为GBK,保证和DOS命令行编码保持一致


1. 单独设置



///

set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;


2. 快捷设置


set names gbk;

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


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

微信图片_20220524134337.png

蠕虫复制


什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中 语法格式:INSERT INTO表名1 SELECT * FROM 表名2; 作用:将表名2中的数据复制到表名1中set character_set_client=gbk; set character_set_connection=gbk;set character_set_results=gbk;set names gbk;


具体操作:创建student2表,student2结构和student表结构一样


CREATE TABLE student2 LIKE student;


将student表中的数据添加到student2表中


INSERT INTO student2 SELECT * FROM student;


注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式 INSERT INTOstudent2(NAME, age) SELECT NAME, age FROM student;微信图片_20220524134344.png

  3.4.2更新表记录


1. 不带条件修改数据 UPDATE 表名 SET 字段名=值;


2. 带条件修改数据 UPDATE 表名 SET 字段名=值 WHERE 字段名=值;


3. 关键字说明


UPDATE: 修改数据


SET: 修改哪些字段


WHERE: 指定条件


4. 具体操作:


       不带条件修改数据,将所有的性别改成女


UPDATE student SET sex='女';

微信图片_20220524134353.png带条件修改数据,将id号为2的学生性别改成男


//

UPDATE student SET sex='男' WHERE id=2;

微信图片_20220524141113.png

一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京

UPDATE student SET age=26, address='北京' WHERE id=3;

微信图片_20220524141120.png 3.4.3删除表记录


1. 不带条件删除数据 DELETE FROM 表名;


2. 带条件删除数据 DELETE FROM 表名 WHERE 字段名=值;


3. truncate删除表记录 TRUNCATE TABLE 表名;


truncate和delete的区别:


delete是将表中的数据一条一条删除


truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样  

4. 具体操作:

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

DELETE FROM student WHERE id=3;微信图片_20220524141126.png微信图片_20220524141131.png

不带条件删除数据,删除表中的所有数据

DELETE FROM student;

 微信图片_20220524141138.png

3.5DQL


查询不会对数据库中的数据进行修改.只是一种显示数据的方式 准备数据

CREATE TABLE student3 (
        id int, name varchar(20),
        age int, sex varchar(5),
        address varchar(100),
        math int, english int
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);



 3.5.1简单查询


  查询表所有数据


1. 使用*表示所有列 SELECT * FROM 表名; 具体操作:


SELECT * FROM student3;

微信图片_20220524141147.png2. 写出查询每列的名称 SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名; 具体操作:


//

SELECT id, NAME ,age, sex, address, math, english FROM student3;

微信图片_20220524141153.png  查询指定列


查询指定列的数据,多个列之间以逗号分隔 SELECT 字段名1, 字段名2... FROM 表名;


具体操作: 查询student3表中的id , name , age , sex , address 列


SELECT id, NAME ,age, sex, address FROM student3;

微信图片_20220524141200.png  

别名查询


1. 查询时给列、表指定别名需要使用AS关键字


2. 使用别名的好处是方便观看和处理查询到的数据 SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;


SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;


注意:


查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处 AS关键字可以省略


3. 具体操作:查询sudent3表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”


SELECT NAME AS 姓名,age 年龄 FROM student3;

微信图片_20220524141209.png

查询sudent3表中name和age列,student3表别名为s

SELECT NAME, age FROM student3 AS s;

微信图片_20220524141218.png

查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处


清除重复值


为了演示重复值,我们再插入一条记录,


INSERT INTO student3 (id,NAME,age) VALUES(9,'马云',12);


1. 查询指定列并且结果不出现重复数据 SELECT DISTINCT 字段名 FROM 表名;


2. 具体操作:


查询name列并且结果不出现重复name  微信图片_20220524141225.png

查询name,age列并且结果不出现重复name和age


//

SELECT DISTINCT NAME, age FROM student3;

微信图片_20220524141231.png

测试完成之后 , 把刚刚插入的记录删除DELETE FROM student3 WHERE id = 9;


查询结果参与运算


1. 某列数据和固定值运算 SELECT 列名1 + 固定值 FROM 表名;


2. 某列数据和其他列数据参与运算 SELECT 列名1 + 列名2 FROM 表名;


注意: 参与运算的必须是数值类型


3. 具体例子:查询每个人的总成绩


SELECT NAME, math + english FROM student3;

微信图片_20220524141237.png

结果确实将每条记录的math和english相加,有两个小问题


1.效果不好看


2.柳青的成绩为null我们来把这两个问题解决下


查询math + english的和使用别名”总成绩”


SELECT NAME, math + english 总成绩 FROM student3


微信图片_20220524141244.png

查询所有列与math + english的和并使用别名”总成绩”


//

SELECT *, math + IFNULL(english,0) 总成绩 FROM student3;

微信图片_20220524141301.png查询姓名、年龄,将每个人的年龄增加10岁

SELECT NAME, age + 10 FROM student3;

微信图片_20220524141310.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
147 3
|
21天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
35 0
【入门级教程】MySQL:从零开始的数据库之旅
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
3月前
|
SQL 关系型数据库 MySQL
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。
|
3月前
|
关系型数据库 MySQL 网络安全
MySQL主从复制详细教程
配置MySQL的主从复制是一个细致的过程,需要仔细遵循上述步骤进行。一旦配置完成并运行正常,主从复制将大大提高数据库的可用性和读写性能。在操作过程中,务必保持谨慎,确保数据的一致性和安全性。
349 0
|
4月前
|
关系型数据库 MySQL Linux
Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(报错已解决)
Docker安装mysql详细教程, mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory) 已解决
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
286 3
|
4月前
|
存储 关系型数据库 MySQL
MySQL小白教程(进阶篇):数据管理与高级查询
MySQL小白教程(进阶篇):数据管理与高级查询
|
4月前
|
SQL 关系型数据库 MySQL
MySQL小白教程(进阶篇):深入理解SQL与数据管理
MySQL小白教程(进阶篇):深入理解SQL与数据管理
|
4月前
|
存储 关系型数据库 MySQL
MySQL小白教程:从入门到查询高手
MySQL小白教程:从入门到查询高手