保存数据的仓库。它体现我们电脑中,就是一个软件或者文件系统。然后把数据都保存这些特殊的文件中,并且需要使用固定的语言(SQL语言/语句)去操作文件中的数据。
需求:开发一个学生选课系统,学生系统中含有学生信息、老师信息、课程信息。需要将关系和数据进行保存,保存到哪里合适呢?
数据保存在内存
Student s = new Student("张三",18,"上海");
Teacher t = new Teacher("锁哥",19,"上海");
Course c = new Course("语文",90);
new出来的对象存储在堆中.堆是内存中的一小块空间
优点:存储速度快
缺点:断电/程序退出,数据就清除了
数据使用IO流技术保存在硬盘的普通文件中
优点:永久保存
缺点:IO流的查找,增加,修改,删除数据比较麻烦。同时使用IO流技术需要频繁调用系统资源和将系统资源还给系统,这样操作效率比较低
数据保存在数据库
优点:永久保存,通过SQL语句比较方便的操作数据库。是方式一和方式二的结合。可以解决上述两种方式的缺点。
数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。
我们开发应用程序的时候,程序中的所有数据,最后都需要保存到专业软件中。这些专业的保存数据的软件我们称为数据库。我们学习数据库,并不是学习如何去开发一个数据库软件,我们学习的是如何使用数据库以及数据库中的数据记录的操作。而数据库软件是由第三方公司研发。
Oracle:它是Oracle公司的大型关系型数据库。系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、安全可靠的。但是它是收费的。
MYSQL:早期由瑞典一个叫MySQL AB公司开发的,后期被sun公司收购,再后期被Oracle收购。体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:Sybase公司的。 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
常用数据库:Java开发应用程序主要使用的数据库:MySQL(5.6)、Oracle、DB2。
在web应用中,使用的最多的就是MySQL数据库,原因如下:
在开发软件的时候,软件中的数据之间必然会有一定的关系存在。比如商品和客户之间的关系,一个客户是可以买多种商品,而一种商品是可以被多个客户来购买的。
需要把这些数据保存在数据库中,同时也要维护数据之间的关系,这时就可以直接使用上述的那些数据库。而上述的所有数据库都属于关系型数据库。
关系型数据:设计数据库的时候,需要使用E-R实体关系图来描述。
E-R 是两个单词的首字母,E表示Entity 实体 R表示Relationship 关系。
实体:可以理解成我们Java程序中的一个对象。比如商品,客户等都是一个实体对象。在E-R图中使用 矩形(长方形) 表示。
属性:实体对象中是含有属性的,比如商品名、价格等。针对一个实体中的属性,我们称为这个实体的数据,在E-R图中使用椭圆表示。
关系:实体和实体之间的关系:在E-R图中使用菱形表示。
需求: 使用E-R图描述 客户、商品、订单之间的关系。
能够安装mysql数据库软件
安装过程:
1.在今天的资料下有Mysql的安装包,找到如下所示文件后双击
mysql-installer-community-5.6.22.0.msi
2.双击之后会出现如下图所示界面,询问是否同意,将我同意的选框勾选上,然后点击next,如下:
3.选择自定义安装,点击下一步
4.根据电脑配置选择要安装的MySql版本,然后点击next
5.如果出现当前界面,则可以配置安装目录,如果出现的不是这个界面请点击Back返回
6.点击back返回后,点击高级选项,配置安装路径,配置成功后点击下一步
说明:安装路径最好不要有中文和空格以及特殊符号。
注意:一定要保证Install Directory和data Directory保存的路径一致,这样才可以保证卸载MySql的时候会很方便。
7.当出现绿色对号时表名安装成功,然后点击下一步
8.开始配置mysql,点击下一步
9.配置MySql开发模式以及端口号相关配置,然后点击下一步
说明:MySql默认端口是3306.这里不要修改,我们访问数据库的时候输入端口号3306即可。
10.设置密码账户信息,然后点击next
12.日志配置
14.全部画上绿色对勾之后,安装成功点击finish->next->finish
15.配置环境变量,找到MySql的安装目录的bin目录下,将路径复制下来
16.打开电脑的高级设置中的 path 路径,将复制的路径添加进去
1、打开和关闭mysql服务.
2、连接mysql
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录
登录格式1:mysql -u用户名 -p密码
例如:
mysql -uroot -p1234
在打开的dos窗口中输入mysql -uroot -p命令:
mysql -u root -p
下一行输入密码
登录格式2:
mysql [-h 连接的主机ip -P端口3306**]** -u 用户名 -p 密码
例如:
mysql -h 192.168.1.251 -P 3306 -u root -p 1234
如果连接的是本机:可以省略 -h -P 主机IP和端口。这样就可以登录mysql数据库了。
在dos窗口中使用sql语句操作mysql数据库相对来说,太麻烦了,我们在实际开发中不会使用dos窗口来操作的,一定要使用可视化工具来操作mysql数据库,而会有多种可视化工具来操作mysql数据库,比如:Navicat、SQLyog等。我们这里使用Navicat可视化工具。
双击 安装软件一路下一步安装(注意要记住自己的安装路径!!!)
安装完成后 双击注册机
4.找到Nacicat下的启动软件
6.然后点击关闭即可。
7.如果是第一次使用,会弹出一个提示框,开机检查更新,我们不需要更新。
8.关闭之后,点击软件左上角的连接按钮,选中MySql:
9.使用Navicat登录数据库
1、找到mysql的安装目录:在mysql的安装目录中。找到my.ini 文件。
找到datadir 并且记录路径。
datadir="D:/MySoft/MySql2/data/Data/"
说明:
1)datadir路径是用来保存mysql的数据文件的目录,以后我们向Mysql数据库存储的数据都会存放到这个路径;
2)在安装数据库的时候,要求这个路径的下的data文件夹要和数据库在同一文件夹下,这样在卸载的时候会比较方便,直接删除即可。如果没有安装到同一目录,那么找到该data文件夹进行删除;
2、在电脑左下角window图标处-----》右键----》选择控制面板;
3、找到程序和功能;
4、找到Mysql---->卸载mysql
5、删除mysql的安装目录,删除mysql的数据文件目录datadir.第一步中记录的文件目录。
注意:mysql默认的数据文件目录,在ProgramData这个目录下,并且ProgramData这个目录是隐藏目录,需要设置显示隐藏目录。
删除ProgramData下的mysql的相关目录。
6、打开运行窗口-----》输入regedit----》打开注册表-----》删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
注意:一般情况下执行前5步即可,如果还不能安装,就执行步骤6,运行regedit,试着删除注册表中的数据,或者也可以使用360或者安全管家清理垃圾试试。
能够理解mysql服务器与数据库、表、记录的关系
说明:
1、一个数据库软件可以安装多个数据仓库,数据仓库可以简称为数据库,在数据库中创建数据表来保存数据。
2、数据库的一行称为记录,可以理解成java实例化后的一个对象。
3、数据库的一列称为字段,理解成java类中的属性。
4、一个数据仓库中是可以有多张表的。
未来关于数据库我们学习的目标:
1)对数据库进行增删改查(CRUD);(主要对整个数据库进行操作,比如删除一个数据库和增加一个数据库)。create(增) read(查) update(改) delete(删)
2)对数据表结构进行增删改查(CRUD);(主要对整张表,比如删除一张表和增加一张表)。
3)对表中的数据进行增删改查(CRUD);(主要对表中的具体数据,比如删除一个表中的一行记录和增加一行数据)。
注意:关于对数据库表的操作,查询是开发中最难的,也是最重要的;
一个数据库软件,可以管理多个数据仓库(数据库)。
一个数据仓库可以管理多张数据表。
每个数据表中可以存储多行数据记录。
提示:每创建一个数据仓库,会在mysql的数据文件目录(data)中多一个文件夹。
Structured Query Language结构化查询语言。SQL语句不依赖于任何平台,对所有的数据库是通用的。学会了SQL语句的使用,可以在任何的数据库使用,但都有特有内容。SQL语句功能强大、简单易学、使用方便。
SQL语句是一个非过程性的语言,每一条SQL执行完都会有一个具体的结果出现。多条语句之间没有影响。
过程性语言:例如java。
int a = 10;
int b = 20;
int sum = a +b;
SQL语句主要是操作数据库,数据表,数据表中的数据记录。
SQL是用来存取关系数据库的语言,具有定义、操纵、控制和查询关系型数据库的四方面功能。所以针对四方面功能,我们将SQL进行了分类。
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create drop alter truncate(清空数据记录) show等
DML(Data Manipulation Language)数据操作语言★★★
在数据库表中更新,增加和删除记录。如 update(更新), insert(插入), delete(删除) 不包含查询
DQL(Data Query Language) 数据查询语言★★★★★
数据表记录的查询。关键字select。
DCL(Data Control Language)数据控制语言(了解)
是用来设置或更改数据库用户或角色权限的语句,如grant(设置权限),revoke(撤销权限),begin transaction等。这个比较少用到。
我们学习SQL语句的路线:
1、学习SQL数据对数据库的操作;
2、学习SQL语句对数据表整体结构的操作;
3、学习SQL语句对数据表中的数据记录操作(★★★★★);
4、数据仓库中的数据备份和恢复;
SQL语句可以单行或多行书写,以分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,关键字开发中一般大写。
SELECT * FROM student;
3种注释
单行注释: – 注释内容
多行注释: /* 注释 */
# 注释内容(mysql特有的单行注释)
能够掌握创建数据库的三种语法
直接创建数据库
CREATE DATABASE 数据库名;
判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集(编码表)
CREATE DATABASE 数据库名 character set 字符集;
具体操作:
CREATE DATABASE db1;
CREATE DATABASE IF NOT EXISTS db2;
CREATE DATABASE db2 CHARACTER SET gbk;
SHOW DATABASES;
SHOW CREATE DATABASE 数据库名;
ALTER 表示修改
ALTER DATABASE 数据库 default character set 新的字符集;
具体操作:
将db3数据库的字符集改成utf8
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
注意:如果修改数据库指定的编码表是utf8,记住不能写utf-8.。utf-8 是错误的
(mysql不认识utf-8)。
java中的常用编码 : UTF-8; GBK;GB2312;ISO-8859-1;
对应mysql数据库中的编码: utf8; gbk;gb2312; latin1;
drop --表示删除数据库或表
DROP DATABASE 数据库名;
具体操作:
DROP DATABASE db2;
查看正在使用的数据库
select -- 查询
SELECT DATABASE();
USE 数据库名;
具体操作:
SELECT DATABASE();
DDL语句操作 | 关键字 |
---|---|
创建 | create database 数据库名; |
修改 | alter database character set 字符集; |
查看 | show databases; |
删除 | drop database 数据库名; |
前提先使用某个数据库(db1)
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);
建议写成如下格式:
javase
public class Student{
int age;
}
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
关键字说明:
CREATE -- 表示创建
TABLE -- 表示表
详细的数据类型如下(不建议详细阅读!)
具体操作:
创建student表包含id,name,birthday字段
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
具体操作:
SHOW TABLES;
CREATE TABLE 表名 LIKE 其他表;
具体操作:
创建s1表,s1表结构和student表结构相同
CREATE TABLE s1 LIKE student;
直接删除表
DROP TABLE 表名;
判断表是否存在并删除表
DROP TABLE IF EXISTS 表名;
具体操作:
能够掌握修改表结构的语法
修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可
添加表列
ALTER TABLE 表名 ADD 字段名/列名 类型;
具体操作:
ALTER TABLE student ADD remark VARCHAR(20);
修改列类型
ALTER TABLE 表名 MODIFY 字段名 新的类型;
具体操作:
ALTER TABLE student MODIFY remark VARCHAR(100);
修改列名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
具体操作:
删除列
ALTER TABLE 表名 DROP 字段名;
具体操作:
ALTER TABLE student DROP intro;
修改表名
RENAME TABLE 旧表名 TO 新表名;
具体操作:
修改字符集
ALTER TABLE 表名 character set 字符集;
具体操作:
使用navicat操作数据库
在dos窗口中使用sql语句操作mysql数据库相对来说,太麻烦了,我们在实际开发中不会使用dos窗口来操作的,一定要使用可视化工具Navicat来操作mysql数据库的。而上述我们为了简单熟悉sql语句,所以一直在dos窗口中操作mysql,而接下来我们要在navicat中操作mysql数据库了。
1.简单熟悉下可视化工具navicat。
2.一般的可视化工具,都能从界面看到 数据库-》数据库表-》表数据。
3.在可视化工具中可以编写sql语句运行
查询结果:
4.在可视化工具中给内容添加注释快捷键是:ctrl+/
5.运行选中的行的快捷键 ctrl + shift + r
能够掌握往表中添加记录
创建student表包含id,name,age,birthday,sex,address字段。
CREATE TABLE student (
id INT,
name VARCHAR(20),
age int,
birthday DATE,
sex char(2),
address varchar(50)
);
所有的字段名都写出来
INSERT -- 表示往表里插入记录
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
不写字段名
INSERT INTO 表名 VALUES (字段值1, 字段值2...);
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
没有添加数据的字段会使用NULL
关键字说明
INSERT INTO 表名 – 表示往哪张表中添加数据
(字段名1, 字段名2, …) -- 要给哪些字段设置值
VALUES (值1, 值2, …); -- 设置具体的值
注意:使用 select * from 表名 --查看该表的所有信息。
具体操作:
INSERT INTO student (id, name, age, sex) VALUES (1, '张三', 20, '男');
INSERT INTO student (id, name, age, sex, address) VALUES (2, '李四', 23, '女', '广州');
* 不写字段名
```sql
INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
```
- 值与列一一对应。有多少个列,就需要写多少个值。如果某一个列没有值。可以使用null。表示插入空。
- 值的数据类型,与列被定义的数据类型要相匹配。并且值的长度,不能够超过定义的列的长度。
- 字符串:插入字符类型的数据,建议写英文单引号括起来。在mysql中,使用单引号表示字符串
- date 时间类型的数据也得使用英文单引号括起来: 如’yyyy-MM-dd’,’yyyy/MM/dd’
1.向表中添加一条完整记录:
所有的字段都写出来: INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
insert into student(id,name,birthday,sex,address) values(1,"幂幂",'2000-10-10','女','上海');
2.不写字段名: INSERT INTO 表名 VALUES (值1, 值2, …);
insert into student values(3,'冰冰',null,'女','北京');
3.向表中添加一条记录部分列:必须写字段名,否则不知道添哪个字段.
INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
insert into student(id,name,address) values(2,'岩岩','湖南');
能够掌握更新表记录
不带条件修改数据
UPDATE 表名 SET 字段名=新的值,字段名=新的值,..;
带条件修改数据
UPDATE 表名 SET 字段名=新的值,字段名=新的值,.. WHERE 条件
关键字说明
UPDATE: 表示修改记录
SET: 要改哪个字段
WHERE: 设置条件
具体操作:
不带条件修改数据,将所有的性别改成女
UPDATE student SET sex='女';
带条件修改数据,将id号为2的学生性别改成男
UPDATE student SET sex='男' WHERE id=2;
UPDATE student SET age=26, address='北京' WHERE id=3;
能够掌握删除表记录
不带条件删除数据
DELETE -- 删除记录
DELETE FROM 表名;
带条件删除数据
DELETE FROM 表名 WHERE 条件;
truncate删除表记录
TRUNCATE TABLE 表名;
truncate和delete的区别:
具体操作:
DELETE FROM student WHERE id=3;
DELETE FROM student;
能够掌握简单查询
注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;
具体操作:
SELECT id, name ,age, sex, address 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关键字可以省略
具体操作:
SELECT NAME AS 姓名, age AS 年龄 FROM student;
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
具体操作:
SELECT DISTINCT address 城市 FROM student;
某列数据和固定值运算
SELECT 列名1 FROM 表名;
SELECT 列名1 + 固定值 FROM 表名;
某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意: 参与运算的必须是数值类型
需求:
实现:
ALTER TABLE student ADD math INT;
ALTER TABLE student ADD english INT;
SELECT math + english FROM student;
结果确实将每条记录的math和english相加,但是效果不好看
SELECT math + english 总成绩 FROM student;
SELECT *, math + english 总成绩 FROM student;
SELECT name, math + 10 FROM student;
DML和简单DQL语句操作 | 关键字 |
---|---|
添加 | INSERT INTO 表名 (字段名…) VALUES (值…); |
修改 | UPDATE 表名 SET 字段名=新的值 ,字段名=新的值…WHERE 条件; |
删除 | DELETE FROM 表名 WHERE 条件; truncate table 表名 |
查询 | SELETE 字段名,字段名 FROM 表名; |
了解蠕虫复制
什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
语法格式:
insert into 表名1 select * from 表名2;
作用:将表名2
中的数据复制到表名1
中
具体操作:
create table student2 like student;
insert into student2 select * from student;
注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
insert into student2(name, age) SELECT name, age FROM student;