1.数据库的基本知识
什么是数据库
存储数据的仓库
数据的存储方式
-
数据保存在内存
int[] arr = new int[]{1, 2, 3, 4}; ArrayList<Integer>list = new ArrayList<Integer>(); list.add(1); list.add(2);
new出来的对象存储在堆中.堆是内存中的一小块空间
优点:内存速度快
缺点:断电/程序退出,数据就清除了.内存价格贵 (临时性存储) -
数据保存在普通文件
优点:永久保存
缺点:查找,增加,修改,删除数据比较麻烦,效率低 -
数据保存在数据库
优点:永久保存,通过SQL
语句比较方便的操作数据库
数据库的优点
数据库是按照特定的格式将数据存储在文件中,通过SQL
语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。
常见数据库
Oracle:收费的大型数据库,Oracle(甲骨文)公司的产品。Oracle收购SUN公司,收购MYSQL。
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。
常用数据库:MYSQL,Oracle
在web应用中,使用的最多的就是MySQL数据库,原因如下:
- 开源、免费
- 功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)
小结
- 说出数据库的概念:存储数据的仓库
- 说出常用的数据库:MYSQL, Oracle
2.数据库的安装
目标
能够安装mysql数据库软件
讲解
-
在今天的资料下有Mysql的安装包,找到后双击
-
将我同意的选框勾选上
-
选择自定义安装,点击下一步
-
根据电脑配置选择要安装的MySql版本,然后点击next
如果出现当前界面,则可以配置安装目录,如果出现的不是这个界面请点击Back返回!!!!
如果不是以上界面,那么点击back返回后,点击高级选项,配置安装路径,配置成功后点击下一步!!!
-
当出现绿色对号时表名安装成功,然后点击下一步
-
开始配置mysql,点击下一步
-
配置MySql开发模式以及端口号相关配置,然后点击下一步
-
设置密码账户信息,然后点击next
-
使用默认配置就可以了,然后点击下一步
-
日志配置
-
点击Execute安装
-
全部画上绿色对勾之后,安装成功点击finish->next->finish
-
环境变量,找到MySql的安装目录的bin目录下,将路径复制下来
-
电脑的高级设置中的路径,将复制的路径添加进去
window10如下操作
小结
-
MySQL安装过程的步骤:按照上述一步一步安装即可
-
MySQL端口号是:3306
-
管理员名字:root
-
将mysql的bin目录配置到path环境变量中
3. 命令行客户端连接服务器
目标
- 能够打开和关闭mysql服务
- 能够连接到mysql
讲解
打开和关闭mysql服务
mysql登入连接
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录
登录格式1:用户名+密码
mysql -u用户名 -p密码
例如:
mysql -uroot -proot
后输入密码方式:
mysql -uroot -p
下一行输入密码
登录格式2:主机+用户名+密码
mysql [-h连接的主机ip -P端口3306] -u用户名 -p密码
例如:
mysql -h 192.168.1.251 -P 3306 -u root -proot
退出MySQL:exit或者quit
指定主机连接异常
错误
指定主机IP地址登入出现 1130错误,如下:
解决方法:
-
现在MySQL所在电脑,正常使用用户名+密码方式登入
-
输入以下命令
GRANT ALL PRIVILEGES ON *.* TO 'root'@'需要连接ip' IDENTIFIED BY 'root密码' WITH GRANT OPTION;
如下图
解决后在目标电脑上重新指定IP登入
小结
- 打开和关闭mysql服务?
- 连接到本机的mysql?
mysql -uroot -proot
- 连接到指定主机的mysql?
mysql [-h 连接的主机ip -P端口3306**]** -u 用户名 -p 密码
4. 图形界面Navicat客户端
目标
- 能够掌握Navicat的安装
- 能够使用Navicat连接mysql数据库
讲解
在dos窗口中使用sql语句操作mysql数据库相对来说,太麻烦了,我们在实际开发中不会使用dos窗口来操作的,一定要使用可视化工具来操作mysql数据库,而会有多种可视化工具来操作mysql数据库,比如:Navicat、SQLyog等。我们这里使用Navicat可视化工具。
- 解压和双击
2. 在解压文件中找到以下文件,双击即可运行,建议放到你专门的文件夹中。
- 建立与数据库的连接,如下
小结
- 使用Navicat连接mysql? 在链接界面输入数据账号,密码,端口号
- 如果ip地址是localhost连接不上数据库,可以使用127.0.0.1尝试
5. 卸载
步骤如下
-
找到mysql的安装目录:在mysql的安装目录中。找到my.ini 文件。找到datadir 并且记录路径。
datadir=D:/DeveloperKits/MySQL/MySQL Server 5.6/Data
说明:
- datadir路径是用来保存mysql的数据文件的目录,以后我们向Mysql数据库存储的数据都会存放到这个路径;
- 在安装数据库的时候,要求这个路径的下的data文件夹要和数据库在同一文件夹下,这样在卸载的时候会比较方便,直接删除即可。如果没有安装到同一目录,那么找到该data文件夹进行删除;
-
打开电脑控制面板–>找到程序和功能–>找到Mysql
双击卸载mysql
-
删除mysql的安装目录,删除mysql的数据文件目录datadir.第一步中记录的文件目录。
注意:mysql默认的数据文件目录,在ProgramData这个目录下,并且ProgramData这个目录是隐藏目录,需要设置显示隐藏目录。
删除ProgramData下的mysql的相关目录。
-
打开运行窗口-----》输入regedit----》打开注册表-----》删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
注意:一般情况下执行前3步即可,如果还不能安装,就执行步骤4,运行regedit,试着删除注册表中的数据,或者也可以使用360或者安全管家清理垃圾试试。
6. 服务器与数据库、表、记录的关系
目标
能够理解mysql服务器与数据库、表、记录的关系
讲解
小结
mysql服务器与数据库、表、记录的关系?
mysql服务器中可以有多个数据仓库, 数据仓库中可以有多张表, 一张表中可以有多条记录!
7. SQL语句的分类和语法
目标
- 能够掌握SQL的概念和作用
讲解
什么是SQL
结构化查询语言(Structured Query Language)简称SQL。很多人会把它读成“sequel”,数据库系统导论中一书中提到,更倾向与发音“ess –cue –ell” 。
SQL语句就是对数据库进行操作的一种语言。
通过SQL语句我们可以方便的操作数据库、表、数据。
SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
SQL语句分类
-
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等 -
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update等 -
DQL(Data Query Language) 数据查询语言
对数据库进行数据查询,关键字:select。 -
DCL(Data Control Language)数据控制语言(了解)
是用来设置或更改数据库用户或角色权限的语句,这个比较少用到。
SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾。
-
可使用空格和缩进来增强语句的可读性。
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
SELECT * FROM student;
-
3种注释
单行注释: -- 注释内容 多行注释: /* 注释内容 */ mysql特有的单行注释: #注释内容
小结
- SQL的作用?对数据库进行操作的语句,增删改查
- SQL的分类?
DDL:操作数据和表及字段
DML:对表中的记录进行增删改
DQL:对表中的记录进行查询 - SQL的语法特点?
可以写一行,也可以写成多行,最好是以;结尾
关键字建议大写
可以任意缩进
单行注释: – 开头 # 开头
多行注释: /* */
8. DDL:创建数据库
目标
能够掌握创建数据库的三种语法
讲解
创建数据库
【语法格式】
-
直接创建数据库
CREATE DATABASE 数据库名;
-
判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
-
创建数据库并指定字符集(编码表)
CREATE DATABASE 数据库名 character set 字符集;
【练习】
-
直接创建数据库db1
CREATE DATABASE db1;
-
判断是否存在并创建数据库db2
CREATE DATABASE IF NOT EXISTS db2;
-
创建数据库db3并指定字符集为gbk
CREATE DATABASE db2 CHARACTER SET gbk;
查看数据库
【语法格式】
- 查看所有的数据库
SHOW DATABASES;
- 查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;
小结
- 创建数据库语法:CREATE DATABASE 数据库名;
- 查看有哪些数据库:SHOW DATABASES;
9. DDL:修改和删除数据库
目标
- 能够修改数据库的字符集
- 能够删除数据库
讲解
修改数据库字符集
【语法格式】
ALTER 表示修改
ALTER DATABASE 数据库 [DEFAULT] CHARACTER SET 新的字符集;
defualt 可不写
【练习】
将db3数据库的字符集改成utf8
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
删除数据库
【语法格式】
DROP:表示删除数据库或表
DROP DATABASE 数据库名;
【练习】
删除db2数据库
DROP DATABASE db2;
小结
- 修改数据库的字符集格式?alter database 数据库 character set 新的字符集;
- 删除数据库格式?drop database 数据库名;
10. DDL使用数据库
目标
- 能够掌握切换数据库语法
- 能够查看正在使用的数据库
讲解
【语法格式】
【练习】
-
查看正在使用的数据库
SELECT DATABASE();
-
使用db1数据库
USE db1;
小结
DDL语句操作 | 关键字 |
---|---|
创建 | create database 数据库名; |
修改 | alter database character set 字符集; |
查看 | show databases; |
删除 | drop database 数据库名; |
11. DDL创建表
目标
- 能够掌握SQL创建表
- 能够掌握快速创建一个表结构相同的表
讲解
前提先使用某个数据库(db1)
创建表
【语法格式】
需要用到关键字说明:
CREATE -- 表示创建
TABLE -- 表示表
建表语法
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);
建议写成如下格式:
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
MySQL数据类型
MySQL中的我们常使用的数据类型如下:
详细的数据类型如下(不建议详细阅读!)
【练习】
创建student表包含id,name,birthday字段
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
快速创建一个表结构相同的表
【语法格式】
CREATE TABLE 表名 LIKE 其他表;
【练习】
-
快速创建s1表,s1表结构和student表结构相同
CREATE TABLE s1 LIKE student;
小结
-
创建表语句:CREATE TABLE 表名 (字段名 类型, 字段名 字段类型…);
-
常用数据类型:int, double, varchar, date
-
快速创建表:
12. DDL查看表
目标
- 能够查看某个数据库中的所有表
- 能够查看表结构
讲解
【语法格式】
-
查看某个数据库中的所有表
SHOW TABLES;
-
查看表结构
DESC 表名;
-
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
【练习】
-
查看mysql数据库中的所有表
USE mysql; SHOW TABLES;
-
查看数据库db1中查看student表的结构
DESC student;
-
查看数据库db1中student的创建表SQL语句
USE db1; SHOW CREATE TABLE student;
小结
- 查看某个数据库中的所有表:show tables;
- 查看表结构:desc 表名;
- 查看创建表的SQL语句:show create table 表名;
13. DDL删除表
目标
- 能够掌握删除表语法
讲解
删除表
【语法格式】
-
直接删除表
DROP TABLE 表名;
-
判断表是否存在并删除表
DROP TABLE IF EXISTS 表名;
【练习】
-
直接删除表s1表
DROP TABLE s1;
-
判断表是否存在并删除s1表
DROP TABLE IF EXISTS s1;
小结
- 快速创建一个表结构相同的表:CREATE TABLE 表名 LIKE 其他表;
- 删除表语法:DROP TABLE 表名;
14. DDL修改表结构
目标
能够掌握修改表结构的语法
讲解
修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可
1. 添加表列
【语法格式】
ALTER TABLE 表名 ADD 字段名 类型;
【练习】
为student表添加一个新的字段remark,类型为varchar(20)
ALTER TABLE student ADD remark VARCHAR(20);
2. 修改列类型
【语法格式】
ALTER TABLE 表名 MODIFY 字段名 新的类型;
【练习】
将student表中的remark字段的改成varchar(100)
ALTER TABLE student MODIFY remark VARCHAR(100);
3. 修改列名
【语法格式】
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
【练习】
将student表中的remark字段名改成intro,类型varchar(30)
ALTER TABLE student CHANGE remark intro varchar(30);
4. 删除列
【语法格式】
ALTER TABLE 表名 DROP 字段名;
【练习】
删除student表中的字段intro
ALTER TABLE student DROP intro;
5. 修改表名
【语法格式】
RENAME TABLE 表名 TO 新表名;
【练习】
将学生表student改名成student2
RENAME TABLE student TO student2;
6. 修改字符集
【格式语法】
ALTER TABLE 表名 character set 字符集;
【练习】
将sutden2表的编码修改成gbk
ALTER TABLE student2 character set gbk;
小结
-
所有修改表前面的语法都是相同的?ALTER TABLE 表名
-
添加一列:add 字段名 类型
-
修改类型:modify 字段名 新的类型
-
修改字段名和类型:change 旧字段名 新字段名 类型
-
删除一列:drop 字段名
15. DML插入记录(重点)
目标
能够掌握往表中添加记录
讲解
【准备】
创建student表包含id,name,birthday,sex,address字段。
CREATE TABLE student (
id INT,
name VARCHAR(20),
age int,
sex char(2),
address varchar(50)
);
插入全部字段
【语法格式】
-
所有的字段名都写出来
INSERT -- 表示往表里插入记录 INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
-
不写字段名
INSERT INTO 表名 VALUES (字段值1, 字段值2...);
【练习】
-
所有的字段名都写出来
INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
-
不写字段名
INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
插入部分数据
【语法格式】
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
没有添加数据的字段会使用NULL
关键字说明
INSERT INTO 表名 – 表示往哪张表中添加数据
(字段名1, 字段名2, …) -- 要给哪些字段设置值
VALUES (值1, 值2, …); -- 设置具体的值
【练习】
-
插入部分数据,往学生表中添加 id, name, age, sex数据
INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
插入数据时注意
- 值与字段必须对应,个数相同,类型相同
- 值的数据大小必须在字段的长度范围内
- 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
- 如果要插入空值,可以不写字段,或者插入null
小结
- 向表中添加一条完整记录:
所有的字段都写出来: INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
不写字段名: INSERT INTO 表名 VALUES (值1, 值2, …); - 向表中添加一条记录部分列:必须写字段名,否则不知道添哪个字段.
INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
16. DML更新表记录
目标
能够掌握更新表记录
讲解
【语法格式】
-
不带条件修改数据
UPDATE 表名 SET 字段名=新的值;
-
带条件修改数据
UPDATE 表名 SET 字段名=新的值 WHERE 条件
-
关键字说明
UPDATE: 表示修改记录 SET: 要改哪个字段 WHERE: 设置条件
【练习】
- 不带条件修改数据,将所有的性别改成女
UPDATE student SET sex='女';
- 带条件修改数据,将id号为2的学生性别改成男
UPDATE student SET sex='男' WHERE id=2;
- 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
UPDATE student SET age=26, address='北京' WHERE id=3;
小结
- 不带条件的更新数据库记录:UPDATE TABLE SET 字段名=新的值;
- 带条件:UPDATE TABLE SET 字段名=新的值 WHERE 条件;
17. DML删除表记录
目标
能够掌握删除表记录
讲解
【语法格式】
-
不带条件删除数据
DELETE -- 删除记录 DELETE FROM 表名;
-
带条件删除数据
DELETE FROM 表名 WHERE 条件;
-
truncate删除表记录
TRUNCATE TABLE 表名;
truncate和delete的区别:
- delete是将表中的数据一条一条删除
- truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
*
【练习】
-
带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3;
-
不带条件删除数据,删除表中的所有数据
DELETE FROM student;
小结
- 指定条件删除:DELETE FROM 表名 WHERE 条件;
- 没有条件删除所有的记录:DELETE FROM 表名;
- 删除表结构再创建表:TRUNCATE TABLE 表名;
18. DQL没有条件的简单查询
目标
能够掌握简单查询
讲解
注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。
查询表中所有列数据
1.写出查询每列的名称
【语法格式】
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;
【练习】
查询student中所有信息
SELECT id, NAME ,age, sex, address FROM student;
2.使用*表示所有列
【语法格式】
SELECT * FROM 表名;
【练习】
SELECT * FROM student;
查询表中指定列数据
【语法格式】
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1, 字段名2 FROM 表名;
【练习】
查询student表中的name 和 age 列
SELECT NAME, age FROM student;
别名查询
【语法格式】
-
查询时给列、表指定别名需要使用AS关键字
-
使用别名的好处是方便观看和处理查询到的数据
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
注意:查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
AS关键字可以省略
【练习】
-
查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
SELECT NAME AS 姓名, age AS 年龄 FROM student;
清除重复值
DISTINCT可以在查询字段名之前加上,表示去重
【语法格式】
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
【练习】
查询address列并且结果不出现重复的address
SELECT DISTINCT address 城市 FROM student;
查询结果参与运算
【语法格式】
-
某列数据和固定值运算
SELECT 列名1 FROM 表名; SELECT 列名1 + 固定值 FROM 表名;
-
某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意: 参与运算的必须是数值类型
【练习】
需求:
添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩 , 查询的时候将数学和英语的成绩相加.
实现:
-
修改student表结构,添加数学和英语成绩列
ALTER TABLE student ADD math INT; ALTER TABLE student ADD english INT;
-
给每条记录添加对应的数学和英语成绩
-
查询math + english的和
SELECT math + english FROM student;
结果确实将每条记录的math和english相加,但是效果不好看
-
查询math + english的和使用别名”总成绩”
SELECT math + english 总成绩 FROM student;
-
查询所有列与math + english的和并使用别名”总成绩”
SELECT *, math + english 总成绩 FROM student;
-
查询姓名、年龄,将每个人的数学增加10分
SELECT name, math + 10 FROM student;
小结
- 简单查询格式:SELECT 字段名 FROM 表名;
- 定义别名:SELECT 字段名 AS 别名 FROM 表名;
- 去除重复行:SELECT DISTINCT 字段名 FROM 表名;
- 数值列,可以进行计算,不会影响表中数据
DML语句操作 | 关键字 |
---|---|
添加 | INSERT INTO 表名 (字段名…) VALUES (值…); |
修改 | UPDATE 表名 SET 字段名=新的值 WHERE 条件; |
删除 | DELETE FROM 表名 WHERE 条件; |
查询 | SELETE 字段名 FROM 表名; |
19. 蠕虫复制
目标
了解蠕虫复制
讲解
蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。
【语法格式】
INSERT INTO 表名1 SELECT * FROM 表名2;
【作用】
将表名2
中的数据复制到表名1
中
【练习】
-
创建student2表,student2结构和student表结构一样
-
将student表中中数据插入到student2表中
-
在student2表中测试复制自身数据插入到本表中【多执行几次,观察数据变化】。
-
创建student2表,student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
-
将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;
-
在student2表中测试复制自身数据插入到本表中【多执行几次,观察数据变化】。
INSERT INTO student2 SELECT * FROM student2;
注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;
未选中的列以null补齐
总结
- 能够理解数据库的概念
存储数据的仓库 - 能够安装
MySQL
数据库
一直下一步:解压,复制
配置MYSQL
服务器:下一步 - 能够启动,关闭及登录
MySQL
在服务里面找到MySql
,右键启动/关闭
登录MySQL
:mysql -uroot -proot
- 能够使用
SQL
语句操作数据库
创建数据库:CREATE
DATABASE
数据库名;
查看所有数据库:SHOW
DATABASES
;
删除数据库:DROP
DATABASE
数据库名;
切换数据库:USE
数据库名; - 能够使用
SQL
语句操作表结构
创建表:CREATE
TABLE
表名 (字段名 类型, 字段名 类型, …);
查看所有表:SHOW
TABLES
;
修改表:ALTER
TABLE
表名;
添加一列:ADD
字段名 类型
修改字段类型:MODIFY
字段名 新的类型;
修改字段名:CHANGE
旧字段名 新字段名 新的类型;
删除一列:DROP
字段名;
修改表名:REANME
TABLE
表名TO
新表名
删除表:DROP
TABLE
表名; - 能够使用
SQL
语句进行数据的添加修改和删除的操作
添加数据:INSERT
INTO
表名 (字段名)VALUES
(值);
修改数据:UPDATE
表名SET
字段名=新的值WHERE
条件;
删除数据:DELETE
FROM
表名WHERE
条件; - 能够使用
SQL
语句简单查询数据
SELECT
字段名1, 字段名2, …FROM
表名;