1、数据库的介绍
1.1、数据库概述
数据库的存储方式
Java中创建对象,对象存储在内存中,学习了IO流,可以把数据存储到文件中。
储存位置 | 优点 | 缺点 |
---|---|---|
内存 | 速度快 | 不能永久保存,数据是临时状态 |
文件 | 数据可以永久保存 | 操作数据不方便,查询某个数据 |
数据库 | 1)数据可以永久保存 2)查询速度快 3)对数据管理方便 | 占用资源,需要购买 |
什么是数据库
1)DB:数据库(Database)即存储数据的仓库,它保存类一系列有组织的数据。
2)本质上是一个文件系统,还是以文件的方式存储在服务器上的
3)所有的关系型数据库都可以使用SQL语句进行管理
4)DBMS (DataBase Management System)数据库管理系统:是一种操作和管理数据库的大型软件,例如:数据库的创建、维护等
5)关系型数据库是目前最普遍的一种数据库类型
1.2、数据库对比
MySQL:开源免费的数据库,小型的数据库,已经被Oracle收购了。MYSQL也有收费版本。Sun公司收购了MySQL,然后Oracle又收购了Sun公司。
Oracle:收费的大型数据库
DB2:IBM公司的数据库产品,收费的,常应用在银行系统中
SQL Server:MicroSoft公司收费的中型数据库,C#、.Net等语言开发常使用
SQLite:嵌入式的小型数据库,应用在移动终端
1.3、为什么选择MySQL
1)免费
2)功能强大
MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司,在2008年被Sun公司收购,而2009年,Sun又被Oracle收购。目前MySQL被广泛用在Interne上,无论大小企业目前都在很广泛的使用MySQL。由于其体积小、速度快、成本低、尤其开源这一特点,使得很多的互联网公司都选择类MySQL作为数据库。(Facebook,Twitter、YoutuBe、阿里系、去哪儿、携程、腾讯等等)。
阿里系(蚂蚁金服)主要使用两种关系型数据库:OceanBase和MySQL。
关系型数据库:关系型数据库的表采用二维表格来存储数据,是一种按行与列排列的具有相关信息的逻辑组,它类似于Excle工作表。一个数据库可以包含任意多个数据表。表中的一行即为一条记录。数据表中的每一列称为一个字段,表是由其包含的各种字段定义的,每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和其它属性。行和列的交叉位置表示某个属性值。
1.4、MySQL目录结构
MySQL目录结构 | 描述 |
---|---|
bin目录 | 所有mysql的可执行文件,如mysql.exe |
include目录 | 本地系统文件 |
lib | 所需要的第三方库 |
share | 共享文件目录 |
1.5、数据库管理系统
数据库管理系统(DataBase Management System,简称:DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
1.6、数据库管理系统、数据库和表的关系
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个或多个数据库。为保存应用中实体(对象)的数据,一般会在数据库创建多个表,以保存程序中对象的数据。
1.7、结论
一个数据库服务器可以包含多个数据库
一个数据库可以包含多张表
每张表中都可以存储多条记录
2、SQL
2.1、什么是SQL
Structured Query Language 结构化查询语言,一个专门用来操作关系型数据库的语言。
2.2、SQL作用
是一种所有关系型数据库的查询规范,不同的数据库都支持
通用的数据库操作语言,可以用在不同的数据库中
不同的数据库SQL语句有一些区别
SQL规范就是普通话,MYSQL特有(方言)、Oracle特有(方言)
2.3、 SQL语句的分类
Date Definition Lanuage(DDL 数据定义语言)如,创建数据库,创建表
Data Manipulation Language(DML数据操作语言)如,对表中记录操作增删改
Data Query Language(DQL数据查询语言),如,对表中的数据进行查询操作
Data Control Language(DCL数据控制语言)如:对用户权限设置
2.4、 MySQL的语法
1)每条语句以分号结尾
2)SQL中不区分大小写,关键字大写和小写一样
3)注释
注释语句 | 说明 |
---|---|
- -空格 | 单行注释 |
/**/ | 多行注释 |
# | 这是mysql特有的注释方式 |
2.5、DDL操作数据库
2.5.1、创建数据库
创建数据库:CREATE DATABASE 数据库名;
判断数据库是否已经存在,不存在则创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集:CREATE DATABASE 数据库名 CHARACTER SET 字符集;
-- 直接创建数据库 db1
create database db1;
-- 判断是否存在,如果不存在则创建数据库db2
CREATE DATABASE IF NOT EXISTS DB2;
-- 创建数据库并且指定字符集为utf8
CREATE DATABASE DB3 default character set utf8;
2.5.2、查看数据库
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db2;
2.5.3、修改数据库
修饰数据库默认的字符集:
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
-- 修改数据库默认的字符集
alter database DB3 default character set gbk;
2.5.4、删除数据库
语法:DROP DATABASE 数据库名;
-- 删除数据库
drop database db3;
2.5.5 、使用数据库
查看正在使用的数据库:SELECT DATABASE();
使用/切换数据库:USE 数据库名;
-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库
USE db1;
2.6、DDL操作表结构
前提先使用某个数据库:use 数据库名;
2.6.1、创建表
语法格式:
CREATE TABLE 表名(
字段名1 字段类型,
字段名2 字段类型
);
2.6.2、 MYSQL数据类型
分类 | 类型名称 | 类型说明 |
---|---|---|
整数 | tinyInt | 微整型,很小的整数(占8位) |
smallInt | 小整型(占16位) | |
mediumint | 中整型(占24位) | |
int(integer) | 整型(32位) | |
小数 | float | 单精度 |
double | 双精度 | |
日期类型 | time | 表示时间类型 |
date | 表示日期类型 | |
datetime | 同时可以表示日期和时间类型 | |
字符串 | char(m) | 固定长度的 |
varchar(m) | 可变长度的字符串,使用几个字符占用几个,m为0-65535之间的数据 | |
大二进制 | blob | 允许长度0-65535 |
longblob | ||
大文本 | text | 允许长度0-65535 |
longtext | 最大可以存储4G的内容 |
2.6.3、创建表
创建一个student表,包含id,name,birthday字段
create table student(
id int,
name varchar(20),
birthday date
);
2.6.4、查看表
查看某个数据库中所有的表:show tables
查看表结构:DESC 表名;
查看创建表的SQL语句:show create table 表名;
2.6.5、快速创建一个表结构相同的表(MYSQL特有)
create table 新表名 LIKE 旧表名;
2.6.6、删除表
直接删除表:DROP TABLE 表名;
判断表是否存在,如果存在则删除表:DROP TABLE IF EXISTS 表名;
2.6.7、修改表结构
添加列:ALTER TABLE 表名 ADD 列名 类型;
修改列类型:ALTER TABLE 表名 MODIFY 列名 新的类型;
修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
删除列:ALTER TABLE 表名 DROP 列名;
修改表名:RENAME TABLE 表名 TO 新表名;
修改字符集:ALTER TABLE 表名 character set 字符集;
2.7、DML操作表中的数据
用于对表中的记录进行增删改操作
2.7.1、插入记录
插入全部字段,所有的字段都写出来:
INSERT INTO 表名(字段名1,字段名2,…) VALUES(值1,值2,…)
值和字段一一对应
不写字段名
INSERT INTO 表名 VALUES(值1,值2,…)
插入部分数据
INSERT INTO 表名(字段1,字段2) VALUES(值1,值2)
insert into students(id,stuName,birthday) values(1001,'zhangsan','2000-10-21');
insert into students values(1002,'lisi','2001-11-05');
insert into students(id,stuName) values(1001,'wangwu');
2.7.2 、更新表记录
更新表中所有相关的数据
UPDATE 表名 SET 列名=更新值,列名=更新值
带条件的修改
UPDATE 表名 SET 列名=更新值,列名=更新值 WHERE 字段名=值;
update students set birthday='2019-01-01';
update students set birthday='2010-10-01' where id=1002;
2.7.3、删除表记录
不带条件删除数据:delete from 表名;
带条件删除数据:delete from 表名 where 字段名=值;
重置表:truncate table 表名
truncate相当于删除表的结构,在创建一张表,实际上就是表的重置
delete from students where id=1002;
delete from students;
truncate table students;
2.8、DQL查询表中的数据
2.8.1、简单查询
查询表中所有行和列的数据:
SELECT * FROM 表名;
查询指定列:
SELECT 字段名1,字段名2,… FROM 表名;
给列指定别名:
SELECT 字段名1 AS 别名,字段名2 AS别名 FROM 表名;
select * from students;
select id ,stuName from students;
select id as '编号',stuName as '姓名' from students;
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
select distinct stuName,id from students;
列数据算术运算:
SELECT 列名1+固定值 FROM 表名;
某列数据和其它列数据参与运算:
SELECT 列名1+列名2 FROM 表名;
2.8.2、条件查询
如果没有查询条件,则每次查询所有的行,实际应用中,一般要指定查询条件,对记录进行过滤。
语法:SELECT * FROM 表名 WHERE 条件;
比较运算符:
比较运算符 | 说明 |
---|---|
>、<、<=、>=、=、<> | <>在SQL中表示不等于,在mysql中也可以使用!= 没有== |
BETWEEN AND | 在一个范围内,比如:between 1002 and 1005,包含头和尾 |
IN(值1,值2,…) | 匹配值列表就是符合条件的 |
LIKE ‘规则’ | 模糊查询,_ 代表一个字符,%代表任意字符 |
IS NULL | 查询某一列为NULL的值 |
select * from students where id<>1001;
select * from students where id between 1001 and 1004;
select * from students where id in(1001,1002,1003);
select * from students where stuName like '_h%';
use db1;
update students set age=20;
select * from students where age is null;
逻辑运算符:
逻辑运算符 | 说明 |
---|---|
and 或 && | 与shu |
or 或 II | 或 |
not 或 ! | 非 |
select * from students where id=1001 and stuName='haha';
select * from students where id=1001 or stuName='haha';
select * from students where age is not null;
select * from students where id not in(1001,1002,1003);
select * from students where id not between 1003 and 1005;
select * from students where stuName not like 'z%';