MySql : 一、基础语法总结(增删改查)

MySql

前言

本篇文章介绍了 MySql 数据库的一些基础用法(增删改查),罗列了常用的SQL语句,并进行分类整理。

目录

一、 SQL 的概念
二、 MySql 服务的启动与登录
三、 DDL 数据定义语言 :操作数据库、表
四、 DML 数据操纵语言 :增删改表中数据
五、 DQL 数据查询语言 :查询表中的记录
六、数据库的备份和还原
七、总结

一、SQL 的概念

1.1 什么是 SQL

Structured Query Language 结构化查询语言.
其实就是定义了操作所有关系型数据库的规则

1.2 SQL 作用

  1. 是一种所有关系型数据库的查询规范,不同的数据库都支持。
  2. 通用的数据库操作语言,可以用在不同的数据库中。
  3. 不同的数据库 SQL 语句有一些区别

1.3 SQL通用语法

  1. SQL 语句可以单行或多行书写,以分号结尾。
  2. 可使用空格和缩进来增强语句的可读性。
  3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
  4. 注释
    • 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
    • 多行注释: /* 注释 */

1.3 SQL 语句分类

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

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

  3. Data Query Language (DQL 数据查询语言)
    用来查询数据库中表的记录(数据)。
    关键字:select, where 等

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

二、MySql 服务的启动与登录

MySQL 服务器启动方式有两种:

  1. 通过服务的方式自动启动
  2. 手动启动的方式

2.1 通过服务的方式自动启动

操作方式:
选中我的电脑 -> 右键,选择管理 -> 点击服务和应用程序->点击服务->在右侧列表找到 MySql

1. 打开管理
2. 找到MySql服务

2.2 手动启动的方式

操作方式:
以管理员身份打开命令行

启动服务:

net start mysql服务名 

停止服务:

 net stop mysql服务名 
命令行启动、停止服务

注意:
在命令行中输入的是 net start mysql80 ,命令最后是 MySql 服务的名字,是在安装时起的。
我的是mysql80,所以命令行输入的服务名就是 mysql80。
MySql 服务的名字可以在服务和应用程序中看到,上面第二张图。

2.3 控制台登录 MySql

MySQL 是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置的密码即可登录

  • 登录格式 1:
mysql -u用户名 -p密码

注意:
u 和 p 后面没有空格

登录方式一
  • 登录格式 2 :
 mysql -h ip地址 -u用户名 -p密码
登录方式二

注意:127.0.0.1 代表本机的 IP 地址

  • 退出 Mysql :
quit 或 exit

三、 DDL 数据定义语言 :操作数据库、表

3.1 操作数据库:CRUD

3.1.1 C(Create) :创建

  • 创建数据库
CREATE DATAVASE 数据库名;
  • 判断数据库是否已经存在,不存在则创建数据库
CREATE DATAVASE IF NOT EXITS  数据库名;
  • 创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;

具体操作如下:

-- 直接创建数据库 db1
create database db1;

-- 判断是否存在,如果不存在则创建数据库 db2
create database if not exists db2;

-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;

3.1.2 R(Retrieve): 查询

  • 查看所有的数据库
show databases;
  • 查看某个数据库的定义信息
show create database 数据库名;
show1.png

3.1.3 U(Update): 修改

  • 修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

3.1.4 D(Delete): 删除

  • 删除数据库
DROP DATABASE 数据库名;
  • 判断数据库存在,存在再删除
DROP DATABASE IF EXISTS 数据库名称;

3.1.5 使用数据库

  • 查看正在使用的数据库
SELECT DATABASE(); 
  • 使用/切换数据库
USE 数据库名;
use.png

3.2 操作表 :CRUD

3.2.1 C(Create):创建

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

例如:

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

常用数据类型

数据类型 描述
int 整数类型
double 小数类型
date 日期,只包含年月日,yyyy-MM-dd
datetime 日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp 时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss 果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
varchar 字符串
  • 复制表
CREATE TABLE 新表名 LIKE 旧表名;

3.2.2 R(Retrieve):查询

  • 查看某个数据库中的所有表
SHOW TABLES;
  • 查看表结构
DESC 表名;
  • 查看创建表的 SQL 语句
SHOW CREATE TABLE 表名;

3.2.3 U(Update):修改

  • 修改表名
ALERT TABLE 表名 RENAME TO 新表名;
  • 添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;
  • 修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;
  • 修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 新的类型;
  • 删除列 DROP
ALTER TABLE 表名 DROP 列名;
  • 修改字符集 character set
ALTER TABLE student CHARACTER SET 字符集;

3.2.4 D(Delete):删除

  • 直接删除表
DROP TABLE 表名;
  • 判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;

四、DML 数据操纵语言 :增删改表中数据

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

4.2 修改表记录

  • 不带条件修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2 ... [where 条件];

注意:
如果不加任何条件,则会将表中所有记录全部修改

4.3 删除表记录

DELETE FROM 表名 [ WHERE 条件 ];

注意:
如果不加条件,则删除表中所有记录

4.4 删除所有记录

有两种方式:

  1. DELETE FROM 表名;
    不推荐使用。有多少条记录就会执行多少次删除操作
  2. TRUNCATE TABLE 表名;
    推荐使用,效率更高。
    先删除表,然后再创建一张相同的表。
  • 使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名;

4.5 truncate 和 delete 的区别:

truncate 相当于删除表的结构,再创建一张表

五、 DQL 数据查询语言 : 查询表中的记录

查询语法:

   select
        字段列表
    from
        表名列表
    where
        条件列表
    group by
        分组字段
    having
        分组之后的条件
    order by
        排序
    limit
        分页限定

5.1 基础查询

  • 查询表所有行和列的数据
SELECT * FROM 表名;
  • 查询指定列
SELECT 字段名1 [AS 别名], 字段名2 [AS 别名]... FROM 表名 [AS 表别名];

例如:

select t1.name as 姓名, t1.age as 年龄 from student as t1
  • 查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
  • 某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;
  • 某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;

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

5.2 条件查询

为什么要条件查询?
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件,对记录进行过滤

  • 条件查询的语法
SELECT 字段名 FROM 表名 WHERE 条件;

运算符

运算符 说明
>、<、<=、>=、=、<> <>在 SQL 中表示不等于,在 mysql 中也可以使用!=,没有==
BETWEEN...AND 在一个范围之内,如:between 100 and 200相当于条件在 100 到 200 之间,包头又包尾
IN(集合) 集合表示多个值,使用逗号分隔
LIKE '张%' 模糊查询 % -> 匹配任意多个字符串 _ -> 匹配一个字符
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL

逻辑运算符

运算符 说明
and 或 && 与,SQL 中建议使用前者,后者并不通用
or 或
not 或 !

例如:

-- 查询年龄大于20岁
SELECT * FROM student WHERE age > 20;

-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;

-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);

-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';

-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';

-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';

5.3 排序查询

语法:

 ORDER BY 排序字段1 [排序方式1] , 排序字段2 [排序方式2]...

排序方式:

  • ASC:升序,默认的。
  • DESC:降序

例如:

--查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
SELECT * FROM student ORDER BY age DESC, math ASC;

注意 :
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推

5.4 聚合函数

将一列数据作为一个整体,进行纵向的计算。
聚合函数会忽略空值 NULL

语法:

SELECT 聚合函数(列名) FROM 表名
函数名 含义
count(列名) 统计这一列有多少条记录
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
sum(列名) 求这一列总和
avg(列名) 求这一列的平均值

例如:

--查询数学成绩总分
SELECT SUM(math) 总分 FROM student;

-- 查询数学成绩平均分
SELECT AVG(math) 平均分 FROM student;

由于聚合函数对 NULL 的记录不会统计,如果需要把 NULL 也统计进去,可以使用 IFNULL(列名,默认值)

SELECT IFNULL(math,0) FROM student;

5.5 分组查询

语法:

GROUP BY 分组字段 [HAVING 条件];

GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
分组的目的就是为了统计,一般分组会跟聚合函数一起使用

注意:
当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

例如:

-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math), COUNT(id)  FROM student GROUP BY sex;

--  按照性别分组。分别查询男、女同学的平均分,人数 
    要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math), COUNT(id) FROM student  WHERE math>70 GROUP BY sex ;


--  按照性别分组。分别查询男、女同学的平均分,人数 
    要求:分数低于70分的人,不参与分组。分组之后,人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

注意:最后一个查询语句,第二个条件人数要大于2个人,用的是关键字 HAVING

where 和 having 的区别?

  • where 在分组之前进行限定,如果不满足条件,则不参与分组。
    having在分组之后进行限定,如果不满足结果,则不会被查询出来
  • where 后不可以跟聚合函数,having可以进行聚合函数的判断。

5.6 分页查询

语法:

LIMIT 开始的索引,每页查询的条数

公式:
开始的索引 = (当前的页码 - 1) * 每页显示的条数

例如:

-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。
SELECT * FROM student LIMIT 2,6;

六、数据库的备份和还原

这里只介绍命令行方式,图形化界面的备份和还原请自行解决。

6.1 备份操作

格式:

mysqldump  -u用户名  -p密码  数据库名称 > 文件的路径

注意:-u 和 用户名之间没有空格,-p也一样

--备份数据库test到D盘
mysqldump -uroot -p123456 test > d:/test.sql

执行完后,会在D盘生成一个test.sql文件

6.2 还原操作

格式:

use 数据库名称;
source 文件的路径

接着上一步的操作,我们模仿还原一下数据:

-- 1. 登录MySql
mysql -uroot -p123456;

-- 2.选中数据库test
use test;
show tables;

-- 3. 删除数据库test中的表,模仿数据丢失
drop table student;

-- 4. 使用 SOURCE 命令还原数据
source d:/test.sql;

-- 5. 查看还原结果
show tables; 
select * from student;

七、总结

这篇文章主要对 MySql 的基础语法进行了整理归类,既对基础知识进行巩固,又可在遗忘时进行回顾。

下篇文章将会介绍数据库中约束以及表之间关系的相关知识。

注:由于本人水平有限,所以难免会有理解偏差或者使用不正确的问题。如果小伙伴们有更好的理解或者发现有什么问题,欢迎留言批评指正~

你可能感兴趣的:(MySql : 一、基础语法总结(增删改查))