MySQL
MySQL
前言
数据库概念
为什么要使用数据库?
MySql简介
数据库操作
关系模型
查看数据库
创建数据库
选择数据库
删除数据库
数据库命名规范
数据表的操作
创建一个班级表
表的创建
列名
列的类型定义
整型类型
(1)类型名后面的小括号
(2)UNSIGNED(无符号)
(3)AUTO_INCREMENT
浮点类型和定点数类型
日期和时间类型
字符串类型
CHAR类型和VARCHAR类型
TEXT类型
字符串类型选择练习
ENUM和SET类型
二进制类型
BINARY和VARBINARY
BIT类型
BLOB类型
其他数据类型
列的完整性约束
设置表字段的主键约束(PRIMARY KEY,PK)
单字段主键
多字节主键
设置表字段的外键约束(FORENIGN KEY,FK)
设置列的非空约束(NOT NULL,NK)
设置表字段唯一约束(UNIQUE,UK)
设置表字段值自动增加(AUTO_INCREMENT)
设置表字段的默认值(DEFAULT)
调整列的完整性约束
修改主键PK、外键FK和 唯一键UK
修改默认值DEFAULT、自增长和非空NK
表索引
索引概述
索引类型
索引存储
索引优点
索引缺点
注意
创建和查看索引
普通索引
查询索引执行情况
唯一索引
全文索引
MySQL8中文分词支持
多列索引
隐藏索引
删除索引
索引的设计原则
表的插入
插入完整数据记录
插入部分数据记录
插入多条数据记录
更新表中的数据记录
更新特定数据记录
更新所有记录
删除表中的数据记录
删除特定数据记录
删除所有数据记录
练习:设计游戏用户信息表
数据查询
简单查询
列出表的所有字段
*符号表示所有字段
查询指定字段数据
DISTINCT查询
IN查询
BETWEEN AND查询
LIKE模糊查找
对排序结果进行排序
简单分组查询
统计分组
联合查询
内连接查询
自链接
等值连接
不等值连接
外连接查询
左外连接
右外连接
合并查询数据记录
子查询
带比较运算符的子查询
带有关键字IN的子查询
带关键字EXISTS的子查询
带关键字ANY的子查询
带关键字ALL的子查询
视图操作
为什么要使用视图
创建视图
更新视图
修改视图
删除视图
触发器
创建触发器
查看触发器
存储过程和函数
创建存储过程
在存储过程中使用变量
定义变量
为变量赋值
光标的使用
声明光标
打开光标
使用光标
流程控制的使用
IF语句
CASE语句
LOOP语句
LEVEA语句
ITERATE语句
REPEAT语句
WHILE语句
流程控制综合运用
查看存储过程
删除存储过程
数据库的存储引擎
什么是存储引擎
MySQL支持的引擎
InnoDB存储引擎
MylSAM存储引擎
选出存储引擎
前言
数据库概念
数据库就是按照数据结构来组织、存储和管理数据,建立在计算存储设备上的仓库。可以看成是电子化的文件柜,也就是存储电子 文件的处所,用户可以对文件中的数据进行进行新增、查询、更新、删除等操作。
为什么要使用数据库?
随着,应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了一个 大问题。
读写文件的并解析出数据需要大量重复代码
从成千上万的数据中快速查询出指定数据需要复杂的逻辑
数据缺乏安全感
如果每个应用程序都各自写自己的读写数据代码,一方面效率低,容易出错,另一方面,每个应用程序访问数据的接口都不同,数据难以复用。
所以
数据库作为一种转门管理数据的软件就出现了。应用程序不需要自己管理数据,而是通过数据库软件提供的接口来读写数据。至于数据本身如何存储到文件,那是数据库软件的事情, 应用程序自己并不关心。
这样一来,编写应用程序的时候,数据读写的功能就被大大地简化了。
MySql简介
MySql作为一种开源的轻量级数据库(关系型数据库),在开源数据库中比较流行,由于小巧安装方便快捷,经常会用于互联网公司, 维护也比较方便。因为开源,使用上比较灵活,mysql还有许多第三方的存储引擎,可以根据自己的需要安装。在功能上mysql可能没有oracle强大,但是对于资源的占用非常少,数据恢复快。在维护上,追求稳定的是性能和易用性。
选择数据库时,既要考虑成本,还要考虑维护的稳定性和便利性, 需要 结合我们的业务,如果提高安全性,海量数据,能承担高昂的成本,可以选择oracle, 一般应用的快速查询,高并发访问,一般情况下都可以选择mysql,另外特殊情况特殊处理。
优势:
开源
成本低
快平台性
容易使用
数据库操作
关系模型
关系数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维表,可以吧他们看作很多Excel表。
例如:
![](https://img-blog.csdnimg.cn/img_convert/ef3c5c88d0077f367afd581afd819941.png)
表的每一行称为记录(Record),记录是一个逻辑上的数据。
表的每一列称为字段(Column),同一个表的每一刚记录都拥有相同的若干字段。
字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串’’。
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
和Excel表有所不同的是,关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。
![](https://img-blog.csdnimg.cn/img_convert/0043072e60f0e318db92e50dcdb84494.png)
每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是“一对多”:
![](https://img-blog.csdnimg.cn/img_convert/a5b509680fd8374682fbcb209ead9505.png)
反过来,如果我们先在学生表中定位了一行记录,例如ID=1的小花,要确定他的班级,只需要根据他的“班级ID”对应的值101找到班级表中ID=101的记录,即六年级一班。所以,学生表和班级表是“多对一”的关系。
如果我们把班级表分拆得细一点,例如,单独创建一个教师表:
![](https://img-blog.csdnimg.cn/img_convert/ed1d8ade1aa43ea66ebcc6071a7eae19.png)
查看数据库
像文件一样,数据库也能进行如下操作。
(windows下不区分大小写**,**Linux下区分大小写。)
注意结尾的分号;(就像写C/C++一样)
创建数据库
查看数据库
选择数据库
删除数据库
在创建数据库之前,可以使用SHOW语句来显示当前已经存在的数据库,如下:
SHOW DATABASES;
因为数据库本身的需要,所以它默认自带了几个库。不要随意删除,否则可能会无法正常运行数据库。
![](https://img-blog.csdnimg.cn/img_convert/cc42cb8570e2f76a1854bc46500dc07e.png)
创建数据库
创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是进行数据库管理的基础。
CREATE DATABASE database_name(数据库的名字);
例如:
![](https://img-blog.csdnimg.cn/img_convert/8d2352753fd1c698046f893b5be8d634.png)
SHOW 数据库
![](https://img-blog.csdnimg.cn/img_convert/3006754152153d167e089a7e69aed193.png)
选择数据库
在对数据库进行操作之前,应该先选择一个数据库。
USE database_name(要记性操作的数据库名字);
要选择已存在的库,否则会报错。
![](https://img-blog.csdnimg.cn/img_convert/5b3ba3753177d5a275d6218abd669007.png)
删除数据库
DROP DATABASE database_name;
要删除已有的数据库, 否则会报错。
![](https://img-blog.csdnimg.cn/img_convert/f45172433350fab33a33f9d171648f85.png)
成功删除提示。
![](https://img-blog.csdnimg.cn/img_convert/665c562aac088b49528daa4e974bb18a.png)
数据库命名规范
可以采用26个英文字母 (不区分大小写) 和0-9的自然数 (一般不需要) 加上下划线 _ 组成,命名简介明确 (Student_Age),多个单词用下划线 ‘_’ 分隔,一个项目一个数据库,多个项目慎用同一个数据库!!!
数据表的操作
表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成,主要用来实现存储数据记录。表的操作包含创建表、查询表、修改表和删除表,这些操作是数据库对象的表管理中最基本也是最重要的操作。
创建一个班级表
ysql> create database school; #创建数据库school
mysql> use school; #选择数据库school
mysql> create table class(class_id int, class_name varchar(128), class_teacher varchar(64)); #创建表class
mysql> insert into class values (101, '六年级一班', '马老师'); #往表中插入101班记录
mysql>insert into class values (102, '六年级二班', '潘老师'); #往表中插入102班记录
mysql>select * from class; #查询表class 中的全部记录
mysql>select * from class where class_id=101; #查询表class 中的全部记录
![](https://img-blog.csdnimg.cn/img_convert/d0bf11fe26f59b4f255f36fb9dc83b75.png)
![](https://img-blog.csdnimg.cn/img_convert/17e8900803dfb30391e3d4948deedecf.png)
补充:mysql中字符串用单引号括起来。
表的创建
CREATE TABLE 表名([表定义选项])[表选项][分区选择];
其中[表定义选项]格式为:
<列名1> <类型1> […] <列名n> <类型n>
CREATE TABLE 命令语法比较多,其主要是由
表创建定义(create-definition)、
表选项(table-options)和
分区选项(partition-options)所组成的。
- CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。
有些数据库可以使用加引号的识别名,例如,‘mydb’.‘mytbl’ 是合法的,但 mysql 是不合法。
表的创建有两种方式:
1.选择选择数据库,然后按照上面方式创建表。
2.不选择先选择数据库,以db_name.tbl_name的方式创建,例如:
create table school.class2(class_id int, class_name varchar(128), class_teacher varchar(64));
<表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition, 或者叫类型定义)以及可能的空值说明、完整性约束或表索引组成。
ysql> use school; #选择数据库school
mysql> create table class4(class_id int PRIMARY KEY, class_namevarchar(128) NOT NULL, class_teacher varchar(64) UNIQUE);#创建表class3
# UNIQUE 唯一限定-不能重复
注意:
默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。
提示:使用 CREATE TABLE 创建表时,必须注意以下信息:
- 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
- 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。
列名
1)采用26字母和0-9的自然数加上下互相 ‘’ 组成,命名简洁明确,多个单词用下划线 ‘’_ 隔开。
2)全部小写命名,尽量避免出现大写
3)字段必须填写描述信息
4)禁止使用数据库关键字
5)字段名称一般采用名词或动宾短语
6)采用字段的名字必须是易于理解,一般不超过三个英文单词
7)在命名表的列时,不要重复表的名称(如:在 user 表中,出现 user_name 字段)
8)字段命名使用完整名称
列的类型定义
整型类型
整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表从不同整数类型的字节数、取值范围等方面进行对比。
![](https://img-blog.csdnimg.cn/img_convert/198410c6617bb2cefd72bbdc2b99b902.png)
整数类型的附带属性:
(1)类型名后面的小括号
指定显示宽度 (并不是该类型占用的字节数)。如果不显式指定宽度,则默认为:
tinyint(3)、 smallint(5)、 mediumint(8)、 int(11) 和 bigint(20)。
一般配合zerofill使用,顾名思义,zerofill就是用‘0’填充的意思,也就是在数字位不够的空间用字符“0”填满。
create table class2(id,int(8) zerofill,name varchar(128),teacher varchar(64));
![](https://img-blog.csdnimg.cn/img_convert/cc940971f925ac845ab7d4ec47a7b53f.png)
超过显示位数则不会补零
![](https://img-blog.csdnimg.cn/img_convert/e6c42510a052fa57cab8b97ea9de48ee.png)
(2)UNSIGNED(无符号)
如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取 0,上限取原值的 2 倍,例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。
create table class2(id int unsigned,name varchar(128),teacher varchar(64));
添加一个zerofill属性。
![](https://img-blog.csdnimg.cn/img_convert/ae7b5b57833be30fc0cea7a8fed5335d.png)
日期和时间类型
日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。下面从这5种日期与时间类型的字节数、取值范围和零值等方面进行对比,如下表所示。
![](https://img-blog.csdnimg.cn/img_convert/67930fb627cc4f2336b5898c71afe783.png)
每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,并将零值插入到数据库中。不同的日期与时间类型均有不同的零值.
插入日期时间时,日期年月日和时间时分秒可以使用 “****: - _ /**** ”中的任意字符来分隔,如果单独插入时间,则会报错!!!
mysql> create table test(e_data date,e_datatime datetime,e_timestamp timestamp,e_time time,e_year year)
mysql> insert into test value('2021-10-25','2021-10-25 9:13:00','2021-10-25 9:13:00','9:13:00','2021');
更多数据库内容点击如下链接获取:
![](https://img-blog.csdnimg.cn/img_convert/37d38d0bfdd6708f02b835bac80f4f04.png)
常用的时间函数:
CURDATE() - 获得当前的DATE, 可直接插入DATE 类型中.
NOW() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中.
TIME() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中.
YEAR() - 获取参数给定时间串中的年份,可直接插入YEAR类型中.
MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 获取参数给定时间串中的月、日、时、分、秒值.
字符串类型
CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:
字符串类型(M)
其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。
CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。
VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。
![](https://img-blog.csdnimg.cn/img_convert/cb4b8cffe3182d124a9d63ebbe487658.png)
mysql> use test; #选择数据库test
mysql> create table char_example(e_char char(5), v_char varchar(5)); #创建数据库表
mysql> insert into char_example values('12345','12345'); #正常插入数据
mysql> insert into char_example values('1 2 ','1 2 '); #char类型会屏蔽后面隐藏的空格,varchar 不会
mysql>select concat('(',e_char, ')'), concat('(',v_char, ')') from char_example ; #让char 后面屏蔽的空格原型毕露
![](https://img-blog.csdnimg.cn/img_convert/64701224712e05de44c29b7b4a18c4df.png)
使用建议:
char一定会使用指定的空间,varchar是根据数据来定空间。
char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算。
如果确定数据一定是占指定长度,那么使用char类型。
如果不确定数据到底有多少,那么使用varchar类型。
如果数据长度超过255个字符而在65535之内,直接使用varchar。
如果字符串尾部要保留空格,必须选择varchar。
TEXT类型
TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:
![](https://img-blog.csdnimg.cn/img_convert/f7b3cf4d18d7928e6eae1a5c4179a21e.png)
注意:
以上各类型无须指定长度!
允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节,那么TEXT 类型可存储65535/2 = 32767个中文字符,而varchar(100)可存储100个中文字符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围。
使用建议:
char长度固定,即每条数据占用等长字节空间,适合用在身份证号码、手机号码等。超过255字节的只能用varchar或者text。
varchar可变长度,可以设置最大长度,适合用在长度可变的属性。
text不设置长度,当不知道属性的最大长度来时,适合用text,能用varchar的地方不用text;
如果都可以选择,按照查询速度,char最快,varchar次之,text最慢。(跟数据库的设计有关,不同的类型有不同的特性。实现不用的功能都是有代价的。)
字符串类型选择练习
创建一个用户信息表,用来存储用户的如下信息:姓名,手机号码,家庭地址,个人简介,性别,年龄,身份证号。数据库表名可定义为userinfo, 同时增加一个列id 用来作为每一条记录的唯一标识,并设为主键,自加!
mysql> create table userinfo (
id int(11) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键’,
name varchar(64) DEFAULT NULL COMMENT ‘姓名’,
mobile char(11) DEFAULT NULL COMMENT ‘手机号码’,
address varchar(128) DEFAULT NULL COMMENT ‘居住地址’,
description text DEFAULT NULL COMMENT ‘个人简介-不知道具体的范围,不常更新用text’,
sex char(1) DEFAULT NULL COMMENT ‘性别 - 男或女’,
age tinyint unsigned DEFAULT 0 COMMENT ‘年龄’,
idno char(18) DEFAULT NULL COMENT ‘身份证号码’
);
![](https://img-blog.csdnimg.cn/img_convert/89e0674147376aec0bee038e80874970.png)
![](https://img-blog.csdnimg.cn/img_convert/a9b449f331b47d02bd53188652ada2fa.png)
列的完整性约束
完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要去,如果不满足完整性约束条件,数据库系统将不再执行用户的操作。下表为完整性约束条件。
![](https://img-blog.csdnimg.cn/img_convert/dc470baeaddb52035b573de381dcf7d6.png)
设置表字段的主键约束(PRIMARY KEY,PK)
主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份,每个人都具有唯一的身份证号。设置表的主键是指在创建表时设置表的某个字段为该表的主键。
主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。主键必须满足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同,并且是非空值。主键可以是单一的字段,也可以是多个字段的组合。
主键是唯一的
单字段主键的语法规则如下:
CREATE TABLE tablename(
propName propType PRIMARY KEY, ......
);
或
CREATE TABLE tablename(
propName propType , ......
PRIMARY KEY(propType)
);
mysql> create database school; #创建数据库school
mysql> use school; #选择数据库school
mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64)); #创建表class
mysql> desc class ; #查询表class 的定义, describe class 效果等同
mysql> show create table class ; #同样可以实现查询表class 的定义
mysql> insert into class VALUES(1,'一班','s1'); #插入成功
mysql> insert into class VALUES(1,'二班','s2'); #因主键约束,插入失败
MySQL支持给主键设置名字
CREATE TABLE tablename(
propName propType , ......
CONSTRAINT pk_name PRIMARY KEY(propType)
);
设置表字段的外键约束(FORENIGN KEY,FK)
外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一个班级和学生关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级编号的字段no,其依赖于班级表的主键,这样字段no就是学生表的外键,通过该字段班级表和学生表建立了关系。
![](https://img-blog.csdnimg.cn/img_convert/3ff2b03b462eda47d80256d50e3191b0.png)
更多数据库内容点击如下链接获取:
表的插入
插入数据记录是常见的数据操作,可以显示向表中增加的新的数据记录。在MySQL中可以通过“INSERT INTO”语句来实现插入数据记录,该SQL语句可以通过如下4种方式使用:
插入完整数据记录、
插入部分数据记录、
插入多条数据记录和
插入JSON结构的数据记录(略)。
插入完整数据记录
插入完整数据记录
NSERT INTO tablename(field1, field2, field3, ..., fieldn) VALUES(value1, value2, value3, ..., valuen);
tablename(xxx)省略
缩写为:
INSERT INTO tablename VALUES(value1, value2, value3, ..., valuen);
ablename表示所要插入完整记录的表名,
参数fieldn表示表中的字段名字,
参数valuen表示所要插入的数值,
并且参数fieldn与参数valuen一一对应。
插入部分数据记录
在插入完整数据记录的基础上指定要添加字段的名称。
INSERT INTO tablename(field1, field2, field3, ..., fieldn) VALUES(value1, value2, value3, ..., valuen);
注意: 如果域没有设定默认值,也没有设定为自增长,则插入记录时必须插入值。
插入多条数据记录
INSERT INTO tablename(field1, field2, field3, ..., fieldn)
VALUES(value11, value12, value13, ..., value1n),
(value21, value22, value23, ..., value2n),
... ....
(valuen1, valuen2, valuen3, ..., valuenn);
每条要插入的数据都要按着tablename(x,)所指定的插入数据个数。
更新表中的数据记录
(更新就是修改)
更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值。在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:
更新特定数据记录、更新所有数据记录、更新JSON结构的数据记录。
更新特定数据记录
UPDATE tablename SET field1 = value1, field2 = value2, field3 = value3, ..., fieldn = valuen) WHERE CONDITION;
上述语句中:
参数tablename表示所要更新数据记录的表名,
参数field表示表中所要更新数值的字段名字,
参数valuen表示更新后的数值,
参数CONDITION指定更新满足条件的特定数据记录。
删除表中的数据记录
删除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录。在MySQL中可以通过DELETE语句来删除数据记录,该SQL语句可以通过以下几种方式使用:删除特定数据记录、删除所有数据记录。
删除特定数据记录
DELETE FROM tablename WHERE CONDITION;
在上述语句中,参数tablename表示所要删除数据记录的表名,参数CONDITION指定删除满足条件的特定数据记录。
删除所有数据记录
DELETE FROM tablename WHERE CONDITION;
或
DELETE FROM tablename;
在上述语句中,为了删除所有的数据记录,
参数CONDITION需要满足表tablename中所有数据记录,如id>0;
或者无关键字WHERE语句。
数据查询
查询数据是指从数据库中获取所需要的数据。
如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要的操作。
用户可以根据自己对数据的需求,使用不同的查询方式,获得不同的数据。
简单查询
在MySQL中可以通过SQL语句来实现基本数据查询,SQL语句可以通过如下多种使用:
查询所有字段数据
查询指定字段数据
避免重复数据查询
对结果进行排序和分组等查询。、
SELECT语句来查询数据,根据查询条件的不同,数据库系统会找到不同的数据,通过SELECT语句可以很方便地获取所需的信息。
SELECT field1 field2 … fieldn
FROM tablename
[WHERE CONDITION1]
[GROUP BY fieldm [HAVING CONDITION2]]
[ORDER BY fieldn [ASC|DESC]];
filed1~fieldn参数表示需要查询的字段名;
tablename参数表示表的名称;
CONDITION1参数表示查询条件;
fieldm参数表示按该字段中的数据进行分组;
CONDITION2参数表示满足该表达式的数据才能输出;
fieldn参数指按该字段中数据进行排序。
排序方式由ASC和DESC两个参数指出;
ASC参数表示按升序的顺序进行排序,是默认参数;
DESC参数表示按降序的顺序进行排序。
*(号可以代替所有的字段)
列出表的所有字段
SELECT field1,field2,…,fieldn FROM tablename;
IN查询
关键字IN可以实现判断字段的数值是否在指定集合中,该关键字的具体语句形式如下:
SELECT field1,field2,…,fieldn FROM tablename WHERE filedn IN(value1,value2,value3,…,valuen);
参数fieldn表示名称为tablename的表中的字段名,
参数valuen表示集合中的值,通过关键字IN来判断字段fieldm的值是否在集合(value1,value2,value3,…,valuen)中,如果字段fieldm的值在集合中,就满足查询条件,该记录会被查询出来,否则不会被查询出来。
select* from class where name in ('1班');
![](https://img-blog.csdnimg.cn/img_convert/196f8ce1225f0a9ff3745cbf2334901a.png)
BETWEEN AND查询
当我们需要查询指定范围内的数据(如: id 从0 到 100)的时候,MySQL提供了关键字BETWEEN AND,用来实现判断字段的数值是否在指定范围内的条件查询。该关键字的具体语法形式如下:
SELECT field1,field2,…,fieldn FROM tablename WHERE fieldm BETWEEN minvalue AND maxvalue
参数fieldn表示名称为tablename的表中的字段名,通过关键字BETWEEN和AND来设置字段field的取值范围,如果字段field的值在所指定的范围内,那么满足查询条件,该记录会被查询出来,否则不会被查询出来。
BETWEEN minvalue AND maxvalue,表示的是一个范围间的判断过程,只针对数字类型。
符合范围内的数据查询
通过关键字BETWEEN 和 AND设置查询范围。
代码示例:
select * from class where chinese between 80 and 90 ; #查询成绩表中语文成绩在80 和 90 之间的学员记录
不符合范围的数据记录查询
通过关键字NOT来实现反向查询
SELECT name,chinese
FROM grade WHERE Chinese NOT BETWEEN 85 AND 90;
等价于
select name,chinese from grade where chinese <85 or chinese >90;
LIKE模糊查找
当我们只想用字符串中间的一部分特征查找含有特征字串的信息时,MySQL提供了关键字LIKE来实现模糊查询,需要使用通配符,具体语法形式如下:
SELECT field1,field2,…,fieldn FROM tablename WHERE fieldm LIKE value;
参数tablename表示表名,
参数fieldn表示表中的字段名字,通过关键字LIKE来判断字段field的值是否与value字符串匹配,如果相匹配,则满足查询条件,该记录就会被查询出来;否则就不会被查询出来。
MySQL中,字符串必须加上单引号(’’)和双引号(″″)。由于关键字LIKE可以实现模糊查询,因此该关键字后面的字符串参数除了可以使用完整的字符串外,还可以包含通配符。
![](https://img-blog.csdnimg.cn/img_convert/b762fb76cf68001b1cbbca71f3da3b60.png)
![](https://img-blog.csdnimg.cn/img_convert/4730bed85bd690cfbf8f21a36b08033c.png)
更多数据库内容点击如下链接获取: