MySQL基本语法详解 | 青训营

145 阅读6分钟

MySQL

1、数据库相关概念

数据库:存储数据的仓库,数据是有组织地进行存储。DataBase,简称DB

数据库管理系统:管理数据库的大型软件。DataBase Management System,DBMS。可以根据这个软件创建数据库,并且进行增删改查等操作。如MySQL。

SQL:Structured Query Language,SQL,结构化查询语言;操作关系型数据库的编程语言;定义操作所有关系型数据库的统一标准。

常见的关系型数据库管理系统:Oracle,mysql,SQL server,PostgreSQL,DB2,SQLite,MariaDB

2、MySQL基本命令

注册mysql服务:mysqld -install

启动mysql服务:net start mysql ,自动启动

停止mysql服务:net stop mysql

计算机上安装好mysql了,那么本台计算机即MySQL服务器

登录MySQL:mysql -uroot -p123456 这里是连接本机的,可能会需要连接别的主机

​ 登录参数mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1即本机) -P端口号(默认3306)

屏幕截图 2023-08-04 214810.png

退出mysql:exit,或quit

卸载:net stop mysql停掉服务-mysql -remove mysql-删除mysql目录及相关环境变量

3、MySQL数据模型

关系型数据库:是建立在关系模型基础上的数据库,即是由多张能互相连接的二维表组成的数据库。

数据库以文件夹形式存储,一个数据库可以存放多个表,一个表中可以存放多条数据

4、SQL

4.1 简介

结构化查询语言,一门操作关系型数据库的编程语言

定义所有关系型数据库的统一标准

存在方言

4.2 通用语法

  • SQL语句可以单行或者多行书写,以分号结尾
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  • 注释:多行/* */;单行 -- 注释内容 或 #注释内容()MySQL特有

show databases;-- 查询所有数据库名称

4.3 SQL分类

  • DDL Data Definition Language 数据定义语言,用来定义数据库对象:数据库、表、列等。
  • DML Data Manipulation Language 数据操作语言,用来对数据库中表的数据进行增删改。
  • DQL Data Query Language 数据查询语言,用来查询数据库中表的记录(数据)。
  • DCL Data Control Language 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。

屏幕截图 2023-08-04 220722.png

4.4 DDL

4.4.1 操作数据库

① 查询 SHOW DATABASES

information_schema:记录MySQL中有哪些库,有哪些表;以视图的形式存储表,并不存在物理实体

mysql: 存储数据库核心信息,如权限、安全

performance_schema :性能相关信息

sys :系统相关信息

ibm:我自己的数据库

屏幕截图 2023-08-04 220935.png

② 创建 CREATE DATABASE [NAME]; 不能创建相同名字的数据库

判断:CREATE DATABASE IF NOT EXISTS [NAME];

③ 删除 DROP DATABASE [NAME] 判断:DROP DATABASE IF EXISTS [NAME];

④ 使用 USE [NAME];

⑤ 查看 SELECT DATABASE() 查看当前使用的数据库

4.4.2 操作表

  • 查询

    查询当前数据库下所有表名称SHOW TABLES

    查询某一表的结构DESC 表名称 DESC是description的缩写

屏幕截图 2023-08-04 222118.png

屏幕截图 2023-08-04 222221.png

  • 创建

    CREATE TABLE 表名(
    	字段名1 数据类型1,
      	字段名2 数据类型2,
      	字段名3 数据类型3,
      	字段名4 数据类型4 	# 最后一行不能有逗号
    ); #分号
    

  • 修改

    修改表名ALTER TABLE 表名 RENAME TO 新的表名;

    添加一列ALTER TABLE 表名 ADD 列名 数据类型;

    修改数据类型ALTER TABLE 表名 MODIFY 列名 新数据类型;

    修改列名和数据类型ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

    删除列ALTER TABLE 表名 DROP 列名;

  • 删除

    DROP TABLE 表名

    DROP TABLE IF EXISTS 表名

4.5 数据类型

大体上分为3类:数值、日期、字符串。。。。

age int

score double(总长度,小数点后保留的位数),double一般要指定精度。如(5,2)0-100分,2位小数

birthday date,只有年月日

name char(最大字符个数),定长字符串,空格补齐,存储性能更高;但浪费空间;能确定字符个数用char

name varchar(最大字符个数),变长字符串,没有空格补齐,根据长度存储数据;存储性能更低

创建案例:

create student(
	id int,
  	name varchar(10),
  	gender char(1),
  	birth date,
  	score double(5,2),
  	mailaddress varchar(64),
  	phone varchar(15),
  	status int	//状态较少,因此改int用tinyint类型
);

4.6 图形化客户端工具

Navicat,官网www.navicat.com.cn

打开Navicat是一个客户端,需要与mysql服务相连接

选择左上角“连接”,选择“MySQL”,

写SQL语句:点击上方的查询,选择“新建查询”,就可以写SQL语句了

4.7 DML-对数据进行增删改

① 添加

  • 指定列 INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);

  • 全部列,省略列名列表,但不建议省略INSERT INTO 表名 VALUES(值1,值2,...);

  • 批量,VALUES部分多写几个

    INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...);

    INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

② 修改

  • UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件]; 不加条件的话则所有数据都修改

③ 删除

  • DELETE FROM 表名 [WHERE 条件]; 不加条件的话则所有数据都删除

4.8 DQL-对数据查询

  • 语法

    SELECT 
    	字段列表
    FROM
    	表名列表
    WHERE
    	条件列表
    GROUP BY
    	分组字段
    HAVING
    	分组后条件
    ORDER BY
    	排序字段
    LIMIT
    	分页限定
    

① 基础查询

  • 查询多个字段

    SELECT 字段名,字段名,... FROM 表名;

    SELECT * FROM 表名; 查询所有列数据;但不要使用

  • 去除重复记录

    SELECT DISTINCT 字段名 FROM 表名; DISTINCT关键字

  • 起别名

    SELECT 字段名 AS 别名,字段名 AS 别名,... FROM 表名; AS也可以省略

② 条件查询 WHERE

  • SELECT 字段列表 FROM 表名 WHERE 条件列表;

屏幕截图 2023-08-06 135931.png

SELECT * FROM STU WHERE age>20;
SELECT * FROM STU WHERE age>=20;
SELECT * FROM STU WHERE age>=20 && age<=30;# 不建议使用&&
SELECT * FROM STU WHERE age>=20 AND age<=30;# 建议用AND
SELECT * FROM STU WHERE age BETWEEN 20 AND 30;
SELECT * FROM STU WHERE age=18;# 不能使用==
SELECT * FROM STU WHERE age!=18;
SELECT * FROM STU WHERE age=18 OR age=20 OR age=22;#可以用|| 但不推荐
SELECT * FROM STU WHERE age in (18,20,22); #集合
# null值比较不能使用= != ,要使用is is not
SELECT * FROM STU WHERE age is NULL;
SELECT * FROM STU WHERE age is not NULL;
  • 模糊查询

    关键字:LIKE

    通配符:_单个任意字符,%任意多个字符

SELECT * FROM STU WHERE name LIKE '马%';
SELECT * FROM STU WHERE name LIKE '_花%';# 第二个字是花
SELECT * FROM STU WHERE name LIKE '%德%';# 包含“德”这个字

③ 排序查询 ORDER BY

  • 语法SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1[排序方式1],排序字段名2[排序方式2]...;
  • 排序方式:ASC升序排列(默认值);DESC(降序排列)
  • 有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序
SELECT * FROM STU ORDER BY age ASC;
SELECT * FROM STU ORDER BY math DESC english asc;#数学成绩一样,再按英语升序排列

④ 分组查询 GROUP BY

  • 聚合函数

    概念:将一列数据作为一个整体,进行纵向计算

    分类:

    ​ count(列名),统计数量,统计的列名不能为null,即不统计为null的;写主键或*

    ​ max(列名),最大值

    ​ min(列名),最小值

    ​ sum(列名),求和

    ​ avg(列名),平均值

    语法:SELECT 聚合函数名(列名) FROM 表名;

    null值不参与所有聚合函数的计算

  • 分组查询

    语法:SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];

    分组之后,查询的字段为聚合函数分组字段,查询其他字段无意义

SELECT sex,avg(math) FROM stu GROUP BY sex;# 男女分别数学平均分
SELECT sex,avg(math),count(*) FROM stu GROUP BY sex;# 男女分别数学平均分,各自人数
SELECT sex,avg(math),count(*) FROM stu WHERE math>70 GROUP BY sex;# 分数低于70,不参与分组
SELECT sex,avg(math),count(*) FROM stu WHERE math>70 GROUP BY sex HAVING count(*) >2;# 分数低于70,不参与分组,分组人数>2

​ WHERE和HAVING 的区别:执行时机不同;where不能对聚合函数进行判断,having可以

​ 执行顺序:WHERE>聚合函数>HAVING

⑤ 分页查询 LIMIT

  • 语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
  • 起始索引从0开始,起始索引=(当前页码-1)*每页显示的条数
  • LIMIT 是MySQL的方言;Oracle使用rownumber...
# 从0开始查询,查询3条数据
SELECT * FROM stu LIMIT 03;
# 每页显示3条数据,查询第一页,012
SELECT * FROM stu LIMIT 03;
# 每页显示3条数据,查询第二页,345
SELECT * FROM stu LIMIT 33;
# 每页显示3条数据,查询第三页,678
SELECT * FROM stu LIMIT 63;