JavaTutorial

本节课的主要内容

通过mysql学习和练习SQL的基本增删查改语句

1. 数据库

随着应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了大问题。

数据库作为一种专门管理数据的软件就出现了。

1.1 关系数据库

我们要学习的数据库叫做关系数据库,假如从数学理论的角度来说,还蛮复杂。

大家在《离散数学》的后面,会学习到关系的定义,那时候就能更好的理解什么是关系了。

我这里就按照我自己的理解来讲述什么是关系数据库了。

关系数据库,就是在数据库中,数据是通过一张张表格来管理和存储的。

比如我们可以打开数据库 information_schema,里面就通过表格存储大量的数据,这就是一个关系数据库之后存储

1.1.1 通过SQL脚本创建数据库和表

现在我们来通过导入sql脚本来创建一个数据库和表

1.1.2 关系数据库中的两个概念

1.2 什么是SQL语言

这是youtubu上一个5分钟左右的视频,先帮助大家对SQL语言有一个直观的认识。

1.3 SQL语言基础功能:增、删、改、查

1.3.1 增

添加单条记录

当我们需要向数据库表中插入一条新记录时,就必须使用INSERT语句。

INSERT语句的基本语法是:

INSERT INTO <表名> (字段1, 字段2, ...) VALUES (1, 2, ...);

比如我们现在往数据库中的heros表格中插入:108将的最后一名的信息,

108|天狗星|段景住|金毛犬|160|100|盗取玉狮子马

插入语句可以是:

INSERT INTO `heros`(`heroID`, `stars`, `name`, `nickname`, `height`, `weight`, `age`, `gender`, `detail`) VALUES (108, '天狗星', '段景住', '金毛犬', 160, 110, 50, TRUE, '盗取玉狮子马');

然后我们可以通过

SELECT * FROM `heros`;

来查看刚才的那一条记录是否已经被添加到数据库中。

练习:

现在往表格中添加下面几条记录:

heroID stars name nickname height weight age gender detail
59 地彗星 扈三娘 一丈青 170 110 28 FALSE 单捉王英
101 地阴星 顾大嫂 母大虫 160 100 35 FALSE 劫牢落草
103 地壮星 孙二娘 母夜叉 165 100 35 FALSE 三山聚义

增加多条记录

语法:

INSERT INTO <表名> (字段1, 字段2, ...)VALUES 
(1.1, 1.2, ...),
(2.1, 2.2, ...),
(3.1, 3.1, ...);

比如我要添加排名20,21,22的好汉

INSERT INTO `heros`(`heroID`, `stars`, `name`, `nickname`, `height`, `weight`, `age`, `gender`, `detail`) VALUES
(20, '天空星', '索超', '急先锋', 170, 130, 40, TRUE, '大战杨志'),
(21, '天异星', '刘唐', '赤发鬼', 175, 130, 40, TRUE, '七星聚义'),
(22, '天杀星', '李逵', '黑旋风', 170, 200, 35, TRUE, '江州劫法场');

练习

现在往表格中添加下面几条记录:

heroID stars name nickname height weight age gender detail
23 天微星 史进 九纹龙 175 130 28 TRUE 大闹史家庄
24 天究星 穆弘 没遮拦 170 100 35 TRUE 结识宋江
25 地壮星 雷横 插翅虎 175 150 40 TRUE 恶斗刘唐

1.3.2 删

DELETE语句的基本语法是:

DELETE FROM <表名> WHERE ...;

删除单条记录

比如我们现在删除宋江的数据:

DELETE FROM `heros` WHERE `name` = '宋江';

删除卢俊义的数据:

DELETE FROM `heros` WHERE `heroID` = 2;

删除多条记录

比如我们删除身高为170的所有人

DELETE FROM `heros` WHERE `height` = 170;

删除整个表

DELETE FROM `heros`;

练习

删除第108名,段景住,金毛犬,

1.3.3 改

UPDATE语句的基本语法是:

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;

更改单条记录

比如我们现在更改宋江,把它的年纪改为50虽

UPDATE `heros` SET `age` = 50 WHERE `heroID` = 1;

或者

UPDATE `heros` SET `age` = 50 WHERE `name` = '宋江';

练习

(4, ‘天闲星’, ‘公孙胜’, ‘入云龙’, 178, 150, 35, TRUE, ‘智取生辰纲’)

改为

(4, ‘天闲星’, ‘公孙胜’, ‘入云龙’, 180, 140, 37, TRUE, ‘七星聚义’)

更改多条记录

比如我们把heroID 从10到13号的英雄的身高都改为180、

UPDATE `heros` SET `height` = 180 WHERE `heroID` >= 10 AND `heroID` <= 13;

更改所有的表中记录

UPDATE语句可以没有WHERE条件,例如:

UPDATE `heros` SET `age` = 40;

这时,整个表的所有记录都会被更新。所以,在执行UPDATE语句时要非常小心,

最好先用SELECT语句来测试WHERE条件是否筛选出了期望的记录集,然后再用UPDATE更新。

1.3.4 查

基础查询

要查询数据库表的数据,我们使用如下的SQL语句:

SELECT * FROM <表名>

条件查询

比如我们想查询身高超过180的梁山好汉的记录

SELECT * FROM `heros` WHERE `height` > 180;

练习:

请查出年龄大于30岁,小于40岁的梁山好汉的记录

投影查询

有的时候我们不需要全部列的记录,只希望知道某几列的记录,就可以通过投影查询

比如我们想查询身高超过180的梁山好汉的姓名和绰号

SELECT `name`, `nickname` FROM `heros` WHERE `height` > 180;

练习

查出所有是女性的梁山好汉的姓名

1.3.5 排序

我们使用SELECT查询时,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。

例如把梁山好汉按照身高从低到高进行排序:(默认是从低到高)

SELECT * FROM `heros` ORDER BY `height`;

如果从高到底进行排序,我们可以加上DESC表示“倒序”:

SELECT * FROM `heros` ORDER BY `height` DESC;

练习

按照梁山好汉的姓名和年龄两列,并按照年龄从大到小排序