- 数据库的基本操作
1.1创建和查看数据库
创建数据库就是在数据库系统中划分一块存储数据的空间。
在MySQL中,创建数据库的基本语法格式如下:
CREATE DATABASE 数据库名称;
“CREATE DATABASE”是固定的SQL语句,专门用于创建数据库。“数据库名称”需要自定义,在定义时要保证其唯一性。
例如,要创建一个名称为school的数据库,其SQL语句如下:
CREATE DATABASE school;
执行上述语句后,可以通过SQL语句查看所有数据库,查看数据库的SQL语句如下:
SHOW DATABASES;
执行查看SQL语句后,显示结果如图:

1.2删除数据库
删除数据库是将数据库系统中已经存在的数据库删除。成功删除数据库后,数据库中的所有数据都将被清除,原来分配的空间也将被回收。
在MySQL中,删除数据库的基本语法格式如下:
DROP DATABASE 数据库名称;
“DROP DATABASE”是删除数据库的SQL语句,“数据库名称”是要删除的数据库名称。
注意:如果需要删除的数据库不存在,则删除会失败。
例如,要删除名称为school的数据库,其SQL语句如下:
DROP DATABASE school;
2.表的基本操作
2.1创建数据表
数据库创建成功后,就需要创建数据表。创建数据表指在已经存在的数据库中建立新表。
注意:在操作数据表之前,应该使用“USE数据库名称”语句指定操作的是哪个数据库,否则会抛出No database selected错误。
创建数据库的基本语法格式如下:
CREATE TABLE 表名
(
字段名1,数据类型[完整性约束条件],
字段名2,数据类型[完整性约束条件],
.
.
.
字段名n,数据类型[完整性约束条件]
);
“表名”值创建的数据表名称,“字段名”指数据表的列名,“数据类型”指表中字段的类型,“完整性约束条件”指字段的某些特殊约束条件。
在使用MySQL数据库存储数据时,不同的数据类型决定了MySQL存储数据的方式。MySQL数据库提供了多种数据类型,常用的数据类型如下:
数据类型 | 类型说明 |
INT | 表示存储整数数值,占用4个字节,有符号取值范围在-2147483648~2147483648 |
FLOAT | 表示存储小数,占用4个字节,有符号取值范围在-3.402823466E+38~-1.175494351E-38 |
DATE | 表示存储日期,日期格式为YYYY-MM-DD |
TIMESTAMP | 表示存储日期和时间,日期格式为YYYY-MM-DD HH:MM:SS |
CHAR | 表示固定长度的字符串 |
VARCHAR | 表示可变长度的字符串 |
设置表的完整性约束条件是为了防止数据表中插入错误的数据。在MySQL中,定义了一些维护数据库完整性的规则:
约束条件 | 说明 |
PRIMARY KEY | 主键约束,用于唯一标识对应的记录 |
FOREIGN KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
AUTO_INCREMENT | 自动生成唯一的ID,默认情况下,从1开始自增 |
上表中列举出的约束条件都是针对表的字段进行的限制,从而保证数据表中数据的正确性和唯一性。
下面以在school数据库中创建一个用于存储学生信息的student表为例,演示建表SQL语句的使用。
所需创建的student表结构如表所示:
字段名称 | 数据类型 | 备注说明 |
id | INT(10) | 学生编号 |
name | VARCHAR(20) | 学生姓名 |
age | INT(10) | 学生年龄 |
创建数据表的SQL语句如下:
CREATE DATABASE school;
USE school;
CREATE TABLE student
(
id INT(10) PRIMARY KEY,
name VARCHAR(20) NOT NULL,
score FLOAT
);
为了验证数据表是否创建成功,可以使用“SHOW TABLES”语句进行查看。
2.2查看数据表
在MySQL中,使用DESCRIBE语句可以查看表的字段,其中包括字段名,字段类型等信息。
DESCRIBE语句的基本用法如下:
DESCRIBE 表名;
或
DESC 表名;
使用DESCRIBE语句查看student表,其SQL语句如下:
DESCRIBE student;
执行结果如下:

Null:表示该列是否可以存储NULL值
Key:表示该列是否已经编制索引
Default:表示该列是否有默认值
Extra:表示获取到与给定列相关的附加信息
2.3修改数据表
在MySQL中,修改表名的基本语法格式如下:
ALTER TABLE 旧表名 RENAME [TO] 新表名;
在上述格式中,“旧表名”指修改前的表名,“新表名”指修改后的表名,关键字“TO”是可选的,其在SQL语句中是否出现不会影响语句的执行。
下面将数据库school中的student表名改为t_student表,其SQL语句如下:
ALTER TABLE student RENAME TO t_student;
2.4删除数据表
在MySQL中,使用DROP TABLE语句可以删除没有被其他表关联的数据表,其基本的预防格式如下:
DROP TABLE 表名;
“表名”指要删除的数据表。
例如,要删除数据表t_student,其SQL语句如下:
DROP TABLE t_student;
3.数据的基本操作
3.1添加数据
在MySQL中,使用INSERT语句向表中添加数据。向表中添加新纪录时,可以在INSERT语句中列出表的所有字段名,其语法格式如下:
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
“字段名1,字段名2,...”表示数据表中的字段名称,此外必须列出所有字段的名称;“值1,值2,...”表示每个字段的值,每个值的顺序必须和对应的字段名匹配、
例如,要向t_student表中添加一条新数据,其SQL语句如下:
INSERT INTO t_student(id, name, score) VALUES(1, '张三', 60.5);
当上述SQL语句执行成功后,会在t_student表中添加一条数据。
要向t_student表中插入多条新数据,其SQL语句如下:
INSERT INTO t_student(score, name, id)
VALUES(60.5, '张三', 1),
(50.0, '周毅', 2),
(71.5, '李丹丹', 3),
(75.5, '郭艾伦', 4),
(52.5, '白冰', 5),
(35.0, '张小艺', 6),
(95.0, '刘莉', 7),
(100.0, '王悦', 8),
(82.5, '阮佩', 9);
注意:使用INSERT语句添加记录时,表名后的字段顺序可以与其在表中定义的顺序不一致,它们只需要与VALUES中值的顺序一致即可。
3.2更新数据
更新数据是指对表中存在的记录进行修改,这是数据库常见的操作。
MySQL中使用UPDATE语句更新表中的记录,其基本的语法格式如下:
UPDATE 表名 SET 字段名1=值1[,字段名2=值2,...][WHERE条件表达式];
“字段名1”和“字段名2”用于指定要更新的字段名称,“值1”和“值2”用于表示字段更新的新数据。WHERE条件表达式是可选的,用于指定更新数据需要满足的条件。
以更新t_student表中id字段值为1的记录为例,将id=1的记录中的score字段值更改为60.8,其SQL语句如下:
UPDATE t_student SET score=60.8 WHERE id=1;
上述SQL语句执行成功后,会将id=1的数据进行更新。
3.3删除数据
删除数据是指对表中存在的记录进行删除,这是数据库的常见操作。
MySQL中使用DELETE语句删除表中的记录,其语法格式如下:
DELETE FROM 表名 [WHERE条件表达式];
“表名”用于指定要执行删除操作的表,“WHERE条件表达式”为可选参数,用于指定删除的条件,满足条件的记录会被删除。
例如,要删除t_student表中id字段值为1的记录的SQL语句如下:
DELETE FROM t_student WHERE id=1;
4.单表查询
MySQL从数据表中查询数据的基本数据是SELECT语句。在SELECT语句中,可以根据自己对数据的需求,使用不同的查询条件,SELECT语句的基本语法格式如下:
SELECT [DISTINCT] * |{字段名1,字段名2,字段名3,...}
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 记录数];
SELECT [DISTINCT] * |{字段名1,字段名2,字段名3,...}:“字段名1,字段名2,字段名3,...”表示从表中查询的制定字段,星号(*)通配符表示表中所有字段,两者为互斥关系,任选其一。“DISTINCT”是可选参数,用于提出查询结果中重复的数据
FROM 表名:表示从指定的表中查询数据
WHERE 条件表达式1:WHERE是可选参数,用于指定查询条件
GROUP BY 字段名 [HAVING 条件表达式2]:GROUP BY是可选参数,用于将查询结果按照指定字段进行分组。HAVING也是可选参数,用于对分组后的结果进行过滤
ORDER BY 字段名 [ASC|DESC]:ORDER BY是可选参数,用于将查询结果按照指定字段进行排序。排序方式由参数ASC或DESC控制,其中ASC表示按升序进行排列,DESC表示按降序进行排列。如果不指定参数,默认为升序排列
LIMIT [OFFSET] 记录数:LIMIT是可选参数,用于现在查询结果的数量。LIMIT后面可以跟两个参数,第一个参数OFFET表示偏移量,如果偏移量为0,则从查询结果的第一条记录开始,如果偏移量为1,则从查询结果的第二条记录开始,以此类推。OFFSET为可选值,如果不指定其默认值为0.第二个参数记录数表示返回查询记录的调试。
4.1查询所有字段
在SELECT语句中,可以通过列出所有字段名查询表中的所有数据,其语法格式如下:
SELECT 字段名1,字段名2,... FROM 表名;
“字段名1,字段名2”表示查询的字段名,这里需要列出表中所有的字段名。
处理使用列出所有字段名的方式以外,MySQL中还可以使用星号(*)通配符代替所有的字段名,其语法格式如下:
SELECT * FROM 表名;
查询t_student表中所有字段的SQL语句如下:
SELECT id,name,score FROM t_student;
或
SELECT * FROM t_student;
执行结果如下:

注意:虽然使用星号(*)通配符的方式比较简单,并且同样可以查出表中的所有字段数据,但其执行结果只能按照字段在表中定义的顺序显示。
4.2带关系运算符的查询
在查询操作中,最常见的操作就是使用WHERE子句的指定查询条件对数据进行过滤,其语法格式如下:
SELECT 字段名1,字段名2,... FROM 表名 WHERE 条件表达式;
“条件表达式”是SELECT语句的查询条件。在MySQL中,可以使用关系运算符连接操作数作为条件表达式的查询条件,其常用的关系运算符有大于(>)、小于(<)、等于(=)、不等于(!=或<>)、小于等于(<=)和大于等于(>=)。
以查询t_student表中id为3的学生信息为例,其SQL语句如下:
SELECT * FROM t_student WHERE id=3;
执行结果如下:

4.3带BETWEEN AND关键字的查询
BETWEEN AND用于判断某个字段的值是否在指定的范围内,如果字段的值在指定范围内,则满足条件,该字段所在的记录将被查询出来,反之则不会被查询出来。其语法格式如下:
SELECT * | {字段名1,字段名2,...}
FROM 表名
WHERE 字段名 [NOT] BETWEEN 值1 AND 值2
“值1”表示范围条件内的起始值,“值2”表示范围条件的结果值。NOT是可选参数,使用NOT表示查询指定范围之外的记录,在通常情况下值1小于值2,否则查询不出任何结果。
以查询t_student表中id值为3~6的学生信息为例,其查询SQL语句如下:
SELECT * FROM t_student WHERE id BETWEEN 3 AND 6;
执行结果如下:

4.4带LIKE关键字的查询
虽然使用关系运算符=可以查询出相应条件的数据,但这要求所查询的数据信息必须准确。那么,当不能准确记住所要查询字段的信息,只是记住了几个字时,可以采用MySQL中提供的一种带LIKE关键字的查询,即模糊查询。
使用LIKE关键字的SELECT语句的语法格式如下:
SELECT * | {字段名1,字段名2,...}
FROM 表名
WHERE 字段名 [NOT] LIKE '匹配字符串';
NOT是可选参数,使用NOT表示查询与指导字符串不匹配的记录。“匹配字符串”指定用于匹配的字符串,其值可以是一个普通字符串,也可以是包含百分号(%)的通配字符串。百分号成为通配符,在通配字符串中有特殊含义,它会匹配任意长度的字符串,包括空字符串。例如,字符串c%会匹配以字符c开始,任意长度的字符串,如ct、cut、current。
以查询t_student表中name字段值中包含“张”的学生信息为例,其查询SQL语句如下:
SELECT * FROM t_student WHERE name LIKE "%张%";
执行结果如下:

注意:百分号通配符可以出现在通配字符串的任意位置。
4.5带AND关键字的多条件查询
在使用SELECT语句查询数据时,有时为了使结果更加精确,可以使用多个查询条件。在MySQL中,提供了一个AND关键字,使用AND关键字可以连接两个或多个查询条件,只有满足所有条件的记录才会被返回。其语法格式如下:
SELECT * | {字段名1,字段名2,...}
FROM 表名
WHERE 条件表达式1 AND 条件表达式2 [...AND 条件表达式n];
在WHERE关键字的后面有多个条件表达式,每两个条件表达式之间用AND关键字分割。
以查询t_student表中id字段值小于5,并且score字段值为71.5的学生信息为例,其SQL语句如下:
SELECT * FROM t_student WHERE id<5 AND score=71.5;
执行结果如下:

4.6带OR关键字的多条件查询
在使用SELECT语句查询数据时,也可以使用OR关键字连接多个查询条件。与AND关键字不同,在使用OR关键字时,只要记录满足任意一个条件就会被查询出来。其语法格式如下:
SELECT * | {字段名1,字段名2,...}
FROM 表名
WHERE 条件表达式1 OR 条件表达式2 [...OR 条件表达式n];
在WHERE关键字的后面有多个条件表达式,每两个条件表达式之间用OR关键字分割。
以查询t_student表中id字段值小于5或score字段值为95的学生信息为例。其SQL语句如下:
SELECT * FROM t_student WHERE id<5 OR score=95;
执行结果如下:

4.7聚合函数
在实际开发中,经常需要对某些数据进行统计,例如统计某个字段的最大值、最小值、平均值,为此,MySQL中提供了聚合函数实现这些功能,常用的聚合函数如下表:
函数名称 | 作用 |
COUNT() | 返回某列的行数 |
SUM() | 返回某列值的和 |
AVG() | 返回某列的平均值 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
例如,查询t_student表中一共有几条数据,可以使用如下SQL语句:
SELECT COUNT(*) FROM t_student;
执行结果如下:

如果要求出t_student表中score字段的总和,可以使用如下SQL语句:
SELECT SUM(score) FROM t_student;
执行结果如下:

4.8对查询结果进行排序
从表中查询出来的数据可能是无序的,或者其排列顺序不是用户期望的。为了使执行结果满足用户的要求,可以使用ORDER BY对执行结果进行排序,其语法格式如下:
SELECT 字段名1,字段名2,...
FROM 表名
ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC]...;
指定的字段名1和字段名2等是对执行结果排序的依据。参数ASC表示按照升序进行排序,DESC表示按照降序进行排序。在默认情况下,按照ASC方式进行排序。
使用参数DESC按照id字段降序方式排列t_student表中数据的SQL语句如下:
SELECT * FROM t_student ORDER BY id DESC;
执行结果如下:

4.9LIMIT分页查询
在查询数据时,可能会一次性返回很多条记录,如果这些记录全部在一个页面中显示,那么用户将很难快速找到需要的数据。为此,MySQL提供了一个关键字LIMIT,使用它可以指定执行结果从哪一条记录开始以及一共查询多少条信息,其使用语法格式如下:
SELECT 字段名1,字段名2,...
FROM 表名
LIMIT [OFFSET,] 记录数;
LIMIT后面可以跟两个参数,第一个参数OFFET表示偏移量,如果偏移量为0,则从查询结果的第一条记录开始,如果偏移量为1,则从查询结果的第二条记录开始,以此类推。OFFSET为可选值,如果不指定其默认值为0.第二个参数记录数表示返回查询记录的调试。
以查询t_student表中前4条记录为例,其SQL语句如下:
SELECT * FROM t_student LIMIT 4;
执行结果如下:

如果要查询t_student表中id字段从第5位到第8位的学生信息,可以通过如下SQL语句查询:
SELECT * FROM t_student ORDER BY id LIMIT 4,4;
执行结果如下:
