文章目录

  • 启动MySQL 服务
    • 图形化界面启动
    • 命令行启动
    • 控制台登陆MySQL命令
  • 显示和创建数据库
    • 选择数据库
    • 删除数据库
  • 数据表操作
    • 创建表
      • 表名
      • 表定义选项
        • 列的类型定义- 整数类型
        • 列的类型定义- 浮点类型和定点数类型
        • 列的类型定义- 日期和时间类型
        • 列的类型定义- 字符串类型
        • 列的类型定义- TEXT类型
        • 列的类型定义- ENUM和SET类型
        • 列的类型定义- 二进制类型
      • 列的完整性约束
        • 主键约束(PRIMARY KEY)
        • 外键约束(FOREIGN KEY)
        • 非空约束(NOT NULL)
        • 唯一约束(UNIQUE)
        • 自动增加(AUTO_INCREMENT)
        • 默认值(DEFAULT)
      • 调整列的完整性约束
        • 查询
        • 删除
        • 新增
        • 修改
      • 表索引
        • 创建和查看索引
          • 普通索引
          • 唯一索引
          • 全文索引
          • 多列索引
        • 隐藏索引
        • 删除索引
    • 表数据插入
    • 表数据更新(修改)
    • 表数据删除
    • 表数据查询
      • 简单查询
        • 查询所有字段
        • 不重复查询
        • 集合查询(in)
        • BETWEEN AND查询
      • 模糊查询
      • 对查询结果排序
      • 简单分组查询
      • 联合查询

启动MySQL 服务

图形化界面启动

右击“计算机”,在快捷菜单中选择“管理”命令,打开“计算机管理”对话框。也可以执行“开始”|“控制面板”|“管理工具”|“服务”来启动服务。

命令行启动

查看服务命令:net start
关闭服务命令:net stop MySQL80
启动服务命令:net start MySQL80

控制台登陆MySQL命令

mysql -h 127.0.0.1 -uroot -p

显示和创建数据库

mysql> show databases; //显示数据库
mysql>create database database_name; //创建数据库
(注:高亮部分为数据库名称,根据个人设置不同而不同)

选择数据库

mysql>use database_name;

删除数据库

mysql>drop database database_name;

数据表操作

创建表

mysql>create table table_name(create-definition,table-options,partition-options);
mysql>create table <表名> ([表定义选项])[表选项][分区选项];

表名

指定要创建表的名称。表名称可以被指定为 database_name.table_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 database_name。

例如:在学校库里创建班级表:
mysql>create table school.class(class_id int, class_name varchar(128),class_teacher varchar(64));

表定义选项

表创建定义,由列名(column_name)、列的定义(column_definition, 或者叫类型定义)以及可能的空值说明、完整性约束或表索引组成。

列的类型定义- 整数类型

整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表从不同整数类型的字节数、取值范围等方面进行对比。

整数类型后缀属性

  1. 类型名称后面的小括号。指定显示宽度(并不是该类型占用字节数)。如果不显示指定宽度则默认为tinyint(3)、 smallint(5)、 mediumint(8)、 int(11) 和 bigint(20)。一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。
  2. UNSIGNED(无符号)。如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取 0,上限取原值的 2 倍,例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。
  3. AUTO_INCREMENT (自增长)在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT 值一般从 1 开始,每行增加 1。 一个表中最多只能有一个 AUTO_INCREMENT列 。对于任何想要使用 AUTO_INCREMENT 的列,应该定义为 NOT NULL(非空),并定义为 PRIMARY KEY(主键) 或定义为 UNIQUE(唯一 键)。

例如:
mysql> create table class(id integer auto_increment PRIMARY KEY , name varchar(128), teacher varchar(64) ); //创建表class, id 具有自增长属性
mysql> create table class(id integerauto_increment UNIQUE, name varchar(128), teacher varchar(64) ); //创建表class, id 具有自增长属性

列的类型定义- 浮点类型和定点数类型

数据表中用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。下面从这三种类型的字节数、取值范围等方面进行对比,如下表所示。

MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。对于decimal,M是最大位数(精度),范围是1到65。可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0,即(10, 0)。
忠告: 当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型!!!

列的类型定义- 日期和时间类型

日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。下面从这5种日期与时间类型的字节数、取值范围和零值等方面进行对比,如下表所示。

插入日期时间时,日期年月日和时间时分秒可以使用 “: - _ / ”中的任意字符来分隔,如果单独插入时间,则会报错!!!
常用的时间函数:
CURDATE() - 获得当前的DATE, 可直接插入DATE 类型中。
NOW() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中。
TIME() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中。
YEAR() - 获取参数给定时间串中的年份,可直接插入YEAR类型中。
MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 获取参数给定时间串中的月、日、时、分、秒值。

例如:
mysql>create table date_example (e_date date, e_datetime datetime, e_timestamp
timestamp, e_time time, e_year year); //创建表dt_example
mysql>insert into date_example values(‘2020-5-9’, ‘2020-5-9 15:01:00’, ‘2020-05-09 15:01:00’, ‘15:56:01’, 2011);
mysql>insert into date_example values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()) );//使用时间函数表示

列的类型定义- 字符串类型

CHAR(M)
VARCHAR(M)

其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。

1. CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。
2. VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。

列的类型定义- TEXT类型


特别注意:

  1. 以上各类型无须指定长度!
  2. 允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节, 那么TEXT 类型可存储 65535/2 = 32767 个中文字符,而varchar(100)可存储100个中文字 符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围。

列的类型定义- ENUM和SET类型

ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围以列表的形式指定,其基本形式如下:

属性名 ENUM(‘值1’, ‘值2’, …, ‘值n’)
例如:
mysql> create table enum_example (e_enum enum(‘男’,‘女’,‘选择保密’) ); #创建表
mysql> insert into enum_example values(‘男’);

其中,“属性名”参数指字段的名称,“值n”参数表示列表中的第n个值。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。列表中的每个值独有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。默认编号从1开始!
如果ENUM类型加上了NOT NULL属性,其默认值为取值列表的第一个元素。如果不加NOT NULL属性,ENUM类型将允许插入NULL,而且NULL为默认值。

SET类型在创建表时,SET类型的取值范围就以列表的形式指定了,其基本形式如下:

属性名 SET(‘值1’, ‘值2’, …, ‘值n’)
例如:
mysql> create table set_example (interest set(‘足球’,‘追剧’,‘篮球’,‘撩妹’) ); #创建表
mysql> insert into set_example values( ‘足球,撩妹’ );

其中,属性名参数指字段的名称,“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是由64个元素构成的组合。

列的类型定义- 二进制类型

二进制数据和文本数据在mysql 中的最大区别在于:
二进制类型存储原始的二进制数据(如图片,视频,exe文件等)。文本类型(TEXT)用来存储字符字符串(如由英文字符、中文字符或其它语言字符组成的字符串)。
二进制类型没有字符集,并且排序和比较基于列值字节的数值。而TEXT类型有字符集,并且根据字符集的校对规则对值进行排序和比较。
二进制类型是存储二进制数据的数据类型,包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。二进制类型之间的对比如下表所示。
BINARY(M)类型和VARBINARY(M)类型都是在创建表时指定最大长度。其中,“字符串类型”参数指定数据类型为BINARY类型还是VARBINARY类型;M参数指定该二进制数的最大字节长度为M。这与CHAR类型和VARCHAR类型相似。例如,BINARY(10)就是指数据类型为BINARY类型,其最大长度为10。
1. BINARY(M)类型的长度是固定的,在创建表时就指定了,不足最大长度的空间由″\0″补全。例如,BINARY(50)就是指定BINARY类型的长度为50。
2. VARBINARY(M)类型的长度是可变的,在创建表时指定了最大的长度,其长度可以在0到最大长度之间,在这个最大值范围内使用多少就分配多少。
3. BIT(M)类型
BIT类型在创建表时指定最大长度,其中,“M”指定该二进制数的最大存储长度为M,M的最大值为64。例如,BIT(4)就是指数据类型为BIT类型,长度为4。若字段的类型BIT(4)存储的数据是0~15,因为变成二进制之后15的值为1111,则其长度为4。如果插入的值为16,其二进制数为10000,长度为5,超过了最大长度,因此大于16的数是不能插入BIT(4)类型字段中的。
操作要点:
插入数据时,使用 b’位串’的方式插入相应值!
查询时,可以使用 bin() 、oct() 、hex() 函数讲字段的值转成相应的二进制、八进制和十六进制.

例如:
mysql> create table bit_example (b bit(8) ); //创建表
mysql> insert into bit_example values( b’10110111’ ); //插入记录,可以是二进制位
mysql> insert into bit_example values( ‘a’ ); //插入记录,可以是字符,但不能超出字节长度

4. BLOB类型

以上各类型无须指定长度!允许的长度是指实际存储的字节数,不用考虑字符编码。

列的完整性约束

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户的操作。MySQL中基本的完整性约束条件如表3-11所示。下表是完整性约束条件:

主键约束(PRIMARY KEY)

主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份,每个人都具有唯一的身份证号。设置表的主键是指在创建表时设置表的某个字段为该表的主键。
主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。主键必须满足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同,并且是非空值。主键可以是单一的字段,也可以是多个字段的组合。
CONSTRAINT关键字可以为主键添加一个别名。

主键的语法如下:创建表school,设置id字段为主键约束
方式1:
mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64));
mysql> insert into class values(1,‘孙悟空’,‘菩提祖师’); //插入成功
mysql> insert into class VALUES(1,‘猪八戒’,‘唐僧’); //因主键约束,插入失败
方式2:
mysql> create table class(id int , name varchar(128), teacher varchar(64),CONSTRAINT id_pk PRIMARY KEY(id));
方式3:
mysql> create table class(id int , name varchar(128), teacher varchar(64),CONSTRAINT id_pk PRIMARY KEY(id,name)); //设置联合主键

外键约束(FOREIGN KEY)

外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一个班级和学生关系,即每个班级有多个学生。首先应该有两个表:班级表和学生表,然后学生表有一个表示班级编号的字段no,其依赖于班级表的主键,这样字段no就是学生表的外键,通过该字段班级表和学生表建立了关系。
在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为空(NULL)。

例如:
mysql>create table class(id int primary key,class_name varchar(128),class_teacher varchar(128)); //创建班级表,并将班级id设为主键
mysql> create table student(id int primary key auto_increment,name varchar(128) not null,class_id int,sex enum(‘男’,‘女’),foreign key(class_id) references class(id));//创建学生表,并将班级id设为外键
mysql> insert into class(1,‘阴曹地府’,‘地藏王菩萨’);
mysql> insert into student(name,class_id,sex) values (‘牛头’,1,‘男’); //正确
mysql> insert into student(name,class_id,sex) values (‘马面’,2,‘男’); //错误,没有相关主键

非空约束(NOT NULL)

当数据库表中的某个字段上的内容不希望设置为NULL时,可以使用NOT NULL约束进行设置。非空约束在创建数据库表时为某些字段上加上“NOT NULL”约束条件,保证所有记录中的该字段都有值。如果在用户插入的记录中该字段为空值,那么数据库管理系统会报错。

例如:
mysql> create table class(id int, name varchar(128) NOT NULL, teacher varchar(64));
mysql> desc class ; //查询表class 的定义, describe class 效果等同
mysql> show create table class ; //同样可以实现查询表class 的定义

唯一约束(UNIQUE)

当数据库表中某个字段上的内容不允许重复时,可以使用UNIQUE约束进行设置。唯一约束在创建数据库时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。如果在用户插入的记录中该字段上的值与其他记录中该字段上的值重复,那么数据库管理系统会报错。
注意: unique 约束允许受约束的字段出现多个空值 NULL, 不算重复

例如:
mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64));

自动增加(AUTO_INCREMENT)

AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID。在具体设置AUTO_INCREMENT约束时,==一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型。由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成主键。==默认情况下,增加的值从1开始增加,每增加一条记录,记录中该字段的值就会在前一条记录(或已存在的最大值(包括曾经存在的))的基础上加1。

例如:
create table class(id int PRIMARY KEY AUTO_INCREMENT, name varchar(128) UNIQUE, teacher varchar(64)); //设置为主键并自增

注意: mysql8 中,AUTO_INCREMENT 必须设为键(主键、外键和唯一键均可)! 否则会报错!

默认值(DEFAULT)

当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。为了达到这种效果,可通过SQL语句关键字DEFAULT来设置。
注意: 如果没有设置,则默认为空。

调整列的完整性约束

查询

mysql>show keys from table_name;
mysql>desc table_name;

删除

删除主键:mysql>alter table table_name drop primary key;
外键或唯一键:mysql>alter table table_name drop index 约束名;

注意:删除主键之前需要将自增等先进行删除。

新增

mysql>alter table [table_name] add constraint [constraint_name] [unique key| primary key|foreign key] ([column_name])
例如:
alter table student add constraint primary key(id); //为学生表id字段添加主键

修改

主键、外键和唯一键:按照上述步骤 先执行 删除 然后再 新增 即可!
默认值DEFAULT、自增长和非空:alter table 表名 modify 列名 类定义;
例如:
mysql>alter table class modifyteacher varchar(64) DEFAULT ‘齐天大圣’ NOT NULL ; #设置默认值和非空
mysql> alter table class modify teacher varchar(64) ; #取消默认值和非空

表索引

索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录,是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。
通过索引,查询数据时可以不必读完记录的所有信息,而只是查询索引列,否则数据库系统将读取每条记录的所有信息进行匹配。例如,索引相当于新华字典的音序表,如果要查“过”字,如果不适用音序,就需要从字典的第一页开始翻几百页;如果提取拼音出来,构成音序表,就只需要从10多页的音序表中直接查找,这样就可以大大节省时间。因此,使用索引可以在很大程度上提高数据库的查询速度,有效地提高了数据库系统的性能。

创建和查看索引

普通索引

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。

CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
INDEX | KEY
[indexname] (propnamen [(length)] [ ASC | DESC ] ) );
其中,参数INDEX和KEY是用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;参数indexname是索引名字,可省略;参数propnamen是索引对应的字段的名称,该字段必须为前面定义好的字段;参数length是可选参数,其指索引的长度,必须是字符串类型才可以使用;参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,如果不指定,则为升序。

例如:
方式1:在创建表时创建索引
mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), INDEX index_no(id DESC));//创建表class, 并建立为id 字段索引
方式2:在已存在的表中创建索引
mysql> create index index_id on class(id ASC); #在class表上追加升序索引
方式3:
mysql> alter table clss add index index_id(id ASC);

唯一索引

唯一索引,就是在创建索引时,限制索引的字段值必须是唯一的。通过该类型的索引可以比普通索引更快速地查询某条记录。

ATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
UNIQUE INDEX | KEY [indexname] (propnamen [(length)] [ ASC | DESC ] ) );

全文索引

全文索引主要对字符串类型建立基于分词的索引,主要是基于CHAR、VARCHAR和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。
全文索引以词为基础的,MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。
MySQL从3.23.23版本开始支持全文索引,MySQL5.6以前只能在存储引擎为MyISAM的数据表上创建全文索引,5.6之后InnoDB开始支持全文索引(5.7之后支持中文全文索引) 。在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,就以区分大小写的搜索方式执行。

CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
FULLTEXT INDEX | KEY
[indexname] (propnamen [(length)] ) );

MySQL8 中文分词支持
配置文件my.ini(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:
[mysqld]
ngram_token_size=2

多列索引

CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
INDEX | KEY [indexname] (propname1 [(length)] [ ASC | DESC ],
Propname2 [(length)] [ ASC | DESC ],
… …
Propnamen [(length)] [ ASC | DESC ])
);

注意:和普通索引定义基本相同,不同之处就是增加了多个索引列。

隐藏索引

MySQL 8开始支持隐藏索引。隐藏索引提供了更人性化的数据库操作。
隐藏索引,顾名思义,让索引暂时不可见,不会被优化器使用。默认情况下索引是可见的。隐藏索引可以用来测试索引的性能。验证索引的必要性时不需要删除索引,可以先将索引隐藏,如果优化器性能无影响就可以真正地删除索引。

ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #取消隐藏

删除索引

DROP INDEX indexname ON tablename;

表数据插入

插入数据记录是常见的数据操作,可以显示向表中增加的新的数据记录。在MySQL中可以通过“INSERT INTO”语句来实现插入数据记录,该SQL语句可以通过如下4种方式使用:插入完整数据记录、插入部分数据记录、插入多条数据记录和插入JSON结构的数据记录(暂且不讲)。

插入完整数据记录:
INSERT INTO tablename VALUES(value1, value2,…,valuen);
插入部分数据记录:
INSERT INTO tablename(field1, field2, …, fieldn)VALUES(value1, value2, …, valuen);
注意: 如果域没有设定默认值,也没有设定为自增长,则插入记录时必须插入值
插入多条数据记录:
INSERT INTO tablename(field1, field2, …, fieldn) VALUES(value11, value12, …, value1n),(value21, value22, …, value2n),… …,1, valuen2, valuen3, …, valuenn);

表数据更新(修改)

更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值。在MySQL中可以通过UPDATE语句来实现更新数据记录。

UPDATE tablename SET field1 = value1, field2 = value2, …, fieldn = valuen) WHERE CONDITION;

上述语句中,参数tablename表示所要更新数据记录的表名,参数field表示表中所要更新数值的字段名字,参数valuen表示更新后的数值,参数CONDITION指定更新满足条件的特定数据记录

例如:将class表中的teacher字段‘孙悟空‘修改为玉皇大帝’。
mysql>update class set teacher = ‘玉皇大帝’ where teacher = ‘孙悟空’;
#通过teacher 字段匹配更新记录
mysql> update class set teacher = ‘玉皇大帝’ where id = 2;
#通过id 字段匹配更新记录

表数据删除

除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录。在MySQL中可以通过DELETE语句来删除数据记录。

DELETE FROM tablename WHERE CONDITION;

在上述语句中,参数tablename表示所要删除数据记录的表名,参数CONDITION指定删除满足条件的特定数据记录。

例如:
mysql> delete from class where teacher = ‘玉皇大帝’; #通过teacher字段删除记录
mysql> delete from class ; #直接删除所有记录
mysql> delete from class where id > 0; #通过id 字段删除匹配的所有记录

表数据查询

查询数据是指从数据库中获取所需要的数据。如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式,获得不同的数据。

简单查询

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参数表示按降序的顺序进行排序。

例如:
mysql> insert into class values(1,‘孙悟空’,‘唐僧’);
mysql> insert into class values(2,‘猪八戒’,‘唐僧’);
mysql> insert into class values(3,‘沙僧’,‘唐僧’);
mysql> select * from class order by id desc; //按照降序进行查询

查询所有字段

SELECT field1,field2,…,fieldn FROM tablename;
SELECT * FROM tablename;

以上两种方式都可以实现。

不重复查询

SELECT DISTINCT field1,field2,…,fieldn FROM tablename;

在上述语句中,关键字DISTINCT去除重复的数据。

集合查询(in)

有的时候,当我们需要查询的目标记录限定在某个集合中的时候,在MySQL中可以使用关键字IN来实现,关键字IN可以实现判断字段的数值是否在指定集合中,该关键字的具体语句形式如下:

SELECT field1,field2,…,fieldn
FROM tablename WHERE filedm IN(value1,value2,value3,…,valuen);

注:参数fieldn表示名称为tablename的表中的字段名,参数valuen表示集合中的值,通过关键字IN来判断字段fieldm的值是否在集合(value1,value2,value3,…,valuen)中,如果字段fieldm的值在集合中,就满足查询条件,该记录会被查询出来,否则不会被查询出来。

例如:
mysql> insert into class(id, name, teacher) values(1, ‘孙悟空’, ‘唐僧’),(2,‘猪八戒’, ‘唐僧’),(3, ‘沙僧’, ‘唐僧’),(4,‘红孩儿’, ‘观音菩萨’); # 插入多条记录
mysql> select * from class where teacher in (‘Martin’,‘唐僧’) ; #查询class表中的teacher 域是唐僧的记录

注意:使用NOT IN可以反向查询非集合中的数据。集合查询的注意: 集合中慎用 NULL
在具体使用关键字IN时,查询的集合中如果存在NULL,则不会影响查询,NULL 存不存在的效果都一样;但如果使用关键字NOT IN,查询的集合中如果存在NULL,则不会查询到任何的结果。

BETWEEN AND查询

SELECT field1,field2,…,fieldn
FROM tablename WHERE fieldm BETWEEN minvalue AND maxvalue

在上述语句中,参数fieldn表示名称为tablename的表中的字段名,通过关键字BETWEEN和AND来设置字段field的取值范围,如果字段field的值在所指定的范围内,那么满足查询条件,该记录会被查询出来,否则不会被查询出来。
BETWEEN minvalue AND maxvalue,表示的是一个范围间的判断过程,只针对数字类型。

例如:
select * from class where id between 1 and 2; //查询class表中id在1和2之间的信息

注意:通过关键字NOT设置反向查询非查询范围的条件

SELECT * FROM class WHERE id NOT BETWEEN 1 AND 2;

模糊查询

当我们只想用字符串中间的一部分特征查找含有特征字串的信息时,MySQL提供了关键字LIKE来实现模糊查询,需要使用通配符,具体语法形式如下:

SELECT field1,field2,…,fieldn FROM tablename WHERE fieldm LIKE value;

在上述语句中,参数tablename表示表名,参数fieldn表示表中的字段名字,通过关键字LIKE来判断字段field的值是否与value字符串匹配,如果相匹配,则满足查询条件,该记录就会被查询出来;否则就不会被查询出来。
在MySQL中,字符串必须加上单引号(’’)和双引号(″″)。由于关键字LIKE可以实现模糊查询,因此该关键字后面的字符串参数除了可以使用完整的字符串外,还可以包含通配符。LIKE关键字支持的通配符如表所示。

例如:
SELECT * FROM class WHERE teacher LIKE ‘%唐%’;

对查询结果排序

在MySQL中,从表中查询出的数据可能是无序的,或者其排列顺序不是用户所期望的顺序,为了使查询结果的顺序满足用户的要求,可以使用关键字ORDER BY对记录进行排序,其语法形式如下:

SELECT field1, field2, field3, …, fieldn FROM tablename ORDER BY fieldm [ASC|DESC]

在上述语句中,参数tablename表示所要进行排序的表名,参数fieldn表示表中的字段名字,参数fieldm表示按照该字段进行排序;ASC表示按升序进行排序;DESC表示按降序进行排序。默认的情况下按ASC进行排序。
注意:如果存在一条记录字段的值为空值(NULL),那么按升序排序时,含空值的记录将最先显示,可以理解为空值是该字段的最小值;按降序排列时,字段为空值的记录将最后显示。

简单分组查询

MySQL软件提供了5个统计函数来帮助用户统计数据,可以使用户很方便地对记录进行统计数、计算和、计算平均数、计算最大值和最小值,而不需要查询所有数据。
在具体使用统计函数时,都是针对表中所有记录数或指定特定条件(WHERE子句)的数据记录进行统计计算。在现实应用中,经常会先把所有数据记录进行分组,再对这些分组后的数据记录进行统计计算。
MySQL通过SQL语句GROUP BY来实现,分组数据查询语法如下:

SELECT function()[,filed ]FROM tablename WHERE CONDITION GROUP BY field;

在上述语句中,参数field表示某字段名,通过该字段对名称为tablename的表的数据记录进行分组。
注意:在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则分组没有任何意义。
五个统计函数简介:
1.统计数量
COUNT(*):该种方式可以实现对表中记录进行统计,不管表字段中包含的是NULL值还是非NULL值。
COUNT(field):该种方式可以实现对指定字段的记录进行统计,在具体统计时将忽略NULL值。
2. 统计计算平均值
该函数只有一种使用方式。
AVG(field):使用方式:该种方式可以实现对指定字段的平均值进行计算,在具体统计时将忽略NULL值。
3. 统计计算求和
该函数只有一种使用方式。
SUM(field):使用方式:该种方式可以实现计算指定字段值之和,在具体统计时将忽略NULL值。
4. 统计最大值
该函数只有一种使用方式。
MAX(field):使用方式:该种方式可以实现计算指定字段值中的最大值,在具体统计时将忽略NULL值。
5. 统计最小值
该函数只有一种使用方式。
MIN(field):使用方式:该种方式可以实现计算指定字段值中的最小值,在具体统计时将忽略NULL值。

例如:
mysql> create database school; #创建数据库school
mysql> use school; #选择数据库school
mysql> create table grade(id int UNIQUE AUTO_INCREMENT, name varchar(128) NOT NULL, math tinyint unsigned, chinese tinyint unsigned, english tinyint unsigned, class_id int NOT NULL); #创建成绩表 grade
mysql> insert into grade values(1, ‘甲’, 80, 87, 91, 1),(2,‘乙’, 72, 64, 89,2),(3, ‘丙’, 54, 69, 87,2),(4,‘丁’, 78, 79, 89, 1); #插入多条记录
mysql> select class_id, sum(math) from grade group by class_id; #对两个班级的数学成绩进行统计
mysql> select class_id, avg(math), avg(chinese), avg(english) from grade group by class_id; #统计平均分,会忽略掉NULL 记录

联合查询

MYSQL数据库使用手册相关推荐

  1. 查询linux安装了什么数据库,Linux系统中安装MySQL数据库操作手册

    Linux系统中MySQL数据库安装手册 一.安装概述: 在Linux操作系统中安装MySQL数据库是一个我们必须要掌握的一门技术,也决定了你以后找工作的薪资待遇,所以你知道它的厉害了吧!学会安装只是 ...

  2. @mysql数据库面试手册

    面试手册 1.你接触过哪几种数据库软件,各自的优缺点是什么? 2.MySQL binlog的几种日志格式有什么区别? 3.MySQL的存储引擎有哪几种? 4.MySQL主从复制原理是什么? 5.MyS ...

  3. mysql数据库操作手册

      1 存储过程的写法 以下是一个带有入参的存储过程模板, #删除方案-存储过程 CREATE PROCEDURE procPersonAppointRecallPlanByPlanUuidDelet ...

  4. java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...

  5. mysql rds云数据库_云数据库 RDS MySQL快速入门手册

    云数据库 RDS MySQL是一款基于成熟云计算技术提供的高性能数据库服务,具有入门版.基础版.通用版.进阶版这四种,但最近有朋友表示,说自己并不会使用云数据库 RDS MySQL,为了帮助大家更好设 ...

  6. linux12 -MYSQL数据库 --> 19数据库面试必备手册

    文章目录 数据库面试 1.基础 2.扩展 3.重点 4.重中之重 5.索引 6.事务 7.锁 8.面试手册 9.参考答案 10.全站面试 数据库面试 1.基础 1.关系型和非关系型 # 关系型:mys ...

  7. mysql r创建用户名_MySQL_mysql database manual(mysql数据库手册),2.1登入到mysql控制台[用户名为r - phpStudy...

    mysql database manual(mysql数据库手册) 2.1登入到mysql控制台[用户名为root,密码缺省为空] 切换到mysql的bin目录cd d:/wamp/mysql/bin ...

  8. 第二十三章 MySQL数据库 手册2 SQL语句

    第二十三章 MySQL数据库 手册2 SQL语句 实验二:用SQL语句,管理数据库 `危险命令,delete 后不加 where 条件代表删除所有数据 delete.` `更加危险的删除命令trunc ...

  9. mysql数据库建仓范式_存mysql个数

    MySQL学习笔记之数据类型详解 注:以下内容针对MySQL5.0及以上版本 MySQL的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文是我结合网上看到的一些blog加上<高性能 ...

  10. mysql数据库备份方案_MySQL平台数据库备份方案详细说明

    在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表已破坏,用 ...

最新文章

  1. RANet : 分辨率自适应网络效果和性能的best trade-off | CVPR 2020
  2. 基于STC8H1K28的双轴机械臂驱动模块:步进电机42HS348E,BH32角度传感器
  3. iptables防火墙设置实例
  4. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第六章——自编解析与答案
  5. 数组名的地址,和数组名取地址的讨论
  6. linux 系统将某目录下的可执行文件添加环境变量,jenkins创建shell长链接却找不到
  7. Oracle存储过程及函数的练习题
  8. linux uucp 改为 root,ubuntu 10.04 /etc目录下找不到vsftpd.user_list和vsfepd.ftpusers两个文件?...
  9. 利用rsyslog 对Linux用户进行审计
  10. freemaker if 多个条件_小函数,大用处!巧用AND函数,避开IF函数嵌套
  11. Day83.尚好房 — 用户管理— Hplus(UI框架)、Layer(弹出层框架)、增删改查、分页组件 :分页查询
  12. html音乐播放器怎么有黑边框,播放不能满屏有黑边怎么办,怎么剪切视频黑边,剪切黑边...
  13. C#如何调用阿里云短信接口
  14. Mysql COUNT()条件计数
  15. [ipsec][crypto] 什么是AEAD加密算法中的AAD 及aad length
  16. pageX与offsetX的区别
  17. 学习笔记9--深度前馈网络
  18. 【高效程序员系列】2、别做机器人------让工作自动化
  19. Rervese.kr题解 Assassin菜逼之路
  20. 传智播客Java基础入门,浅谈JAVA开发规范与开发细节(上

热门文章

  1. SQL创建触发器以及触发器的使用实例+详解
  2. 电脑后台,电脑后台程序太多如何清理 - 卡饭网
  3. FullCalendar - 开源的多功能 JavaScript 日历插件
  4. Silverlight 4 帮助文件例子的连接
  5. vijos一元三次方程求解
  6. 2021年最新DNF脚本框架
  7. GHOST XP SP2 遐想网络 纯净驱动版 3.1
  8. 测试 SEP 14 MP1 新功能 Duplicate Hardware ID 自动修复
  9. 计算机文化基础知识点第十一版,计算机文化基础知识点总结(经典版) 考试专用.doc...
  10. Java程序员必备!java商城项目难点