1.数据库介绍

数据库就是存储数据和管理数据的仓库
数据库现在分为关系型数据库和非关系型数据库

关于java开发常应用数据库:
Sql server:微软提供,收费,中大型项目使用
Oracle:甲骨文公司提供,收费,适用于一些大型或超大型项目中
mysql:瑞典MYSQLLAB公司提供,免费开源,适用于小型项目,使用较高,轻便
mariadb其实是msql的分支,用法和MYSQL完全一样
DB2:IBM公司提供,收费,用于在银行,金融方面

1.1.关系型数据库

底层以二维表的形式保存数据的库就是关系型数据库
stu学生表

学生编号 姓名 年龄
1001 刘沛霞 35
1002 陈子枢 18

1.2.非关系型数据库

非关系数据库指非关系型的,分布性的
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

1.3.数据库概念

数据库服务器就是一个软件(mysql)将数据库软件安装在电脑上,当前电脑就是一个数据库服务器,就可以对外提供存取数据的服务
在一个数据库服务器可以创建多个数据库,每一个数据库都是单独的仓库
数据库就是存储和管理数据的,在通常情况下,一个网站中的所有数据会存放在一个仓库
数据库中可以创建多个表,每一个表代表存储一类信息:例如
淘宝中的商品 tb_product(表)
淘宝中的用户 tb_user(表)
淘宝中的订单数据 tb_order(表)
表中可以包含多张记录(表记录),表记录用来存储具体某一类的详细内容

1.4.SQL语言

SQL是一门用于操作关系型数据库的通用语言(不同的数据库会有一些不同数据库的专有语言操作,通用语言是sql,特有语言为各个厂商数据库独有),使用sql可以操作数据库、表、表记录(增删改查)
查看库:SHOW DATABASES;
创建库删除库: CREATE DATABASE ; DORP DATABASE *
CREATE DATABASE IF NOT EXISTS CHARSET UTF8
DORP DATABSE IF EXITST
;
进入库:USE *
查看表:SHOW TABLES;
删除表:DROP TABLE IF EXISTS *;
创建表:CREATE TABLE
(
表头 类型 主键非空约束等
);
查看表结构: DESC *;
查看所有记录:SELECT
FROM ;
创建表记录:INSERT INTO
(,,,) VALUE(,,,);
删除表记录:DELECT FROM ;(所有)DELECT FROM WHERE (条件删除)
查询表记录 SELECT
(查询词条) FROM (表名) WHERE(筛选条件)
去重: SELECT DISTINCT FROM ;

1.4.2.WHERE字句查询

条件筛选
SELECT FORM WHERE *>,<,<=,>=,=,!=
BETWEEN某个范围,LIKE某种模式

1.4.3.多函数查询

多行函数也叫做聚合函数,对某一列进行统计
COUNT(列名字|*) 统计结果集中指定的记录的行数
MAX(列名) 统计集中列表中的最大值(必须为数字)
MIN(列名) 统计集中列表中的最小值(必须为数字)
SUM(列名) 统计集中列表中的总和(必须为数字)
AVG(列名) 统计集中列表中的平均值(必须位数字)
注:多行函数不可以出现在WHERE字句中
多行函数的统计跟分组有关,会影响返回结果
多行函数在遇见null值时会抛弃,不会计算到统计中
在数据在默认情况分为一组

1.4.4.分组查询

关键字GROUP BY
语句根据一个或多个列队结果集进行分组
在分组的列上我们可以使用过COUNT,SUM,AVG,MAX,MIN等函数
语法:SELECT 列 | FROM [WHERE] GROUP BY *
分组时候显示的名字只出现的第一个人,但数组是绝对的。

1.4.5.排序查询

使用ORDER BY字句将结果集中记录根据指定的列排序后返回
ASC(默认)升序 DESC降序,即高到低

1.4.6.分页查询

使用LIMIT进行分页查询
LIMIT(页码-1) * 每页显示记录数,每页显示的记录数

1.5.mysql的数据类型

1.5.1.数字类型

整数类型
tinyint:占1字节,等同于java的byte
smallint:占2字节,等同于java的short
int:占4字节,等同于java的int
bigint:占8字节,等同于java的long
浮点类型
float:4字节单精度浮点数类型,等同于java的float
double:8字节双精度浮点数类型,等同于java的double

1.5.2.字符串类型

char(n)定长字符串,最长为255个字符,n表示字符数量
例如创建表的时候
CREATE TABLE USER(
username char(10), 定长度为10
)
在给定字符串数量时,如果没有写满剩下的会由空格填满(缺点:浪费内存,存储速度快)
varchar(n)变长字符串,最长不超过65535个字节,n表示字符数,一般超过255个字符会采用text类型
iso8859-1码表:一个字符占用1个字节,1n < 65535, n最多等于 65535
utf8码表:一个中文汉字占用3个字节,3
n<65535,n最多等于 65535/3
GBK码表:一个中文汉字占用2个字节,2*n<65535,n最多等于 65535/2
不定长的情况下对于空间管理内存优化更佳

1.5.3.文本类型

最长65535个字节,一般超过255个字符会使用text
bigtext存储为4G

1.5.4.日期类型

data:年月日
time:时分秒
datatime:年月日时分秒
timestamp:时间戳(实际存储的是一个时间毫秒值),与datatime格式相同,区别为前者最大到2038年,后者1000~9999年

1.6.mysql的字段约束

字段约束==限制

1.6.1.主键约束

如果为一个列添加了主键约束,那么这个列就为主键,且特点为唯一并且不能为空
作为一个主键值,作用为标识唯一表记录
关键字primary key
CREATE TABLE USER(
id int primary key
)
如果主键为数据类型,为了方便插入主键,可以设置主键的自增策略(防止重复保存),添加关键字(AUTO_INCREMENT变量,默认从1开始依次自增),并且可以省略主动为主键赋值的烦恼
CREATE TABLE USER(
id int primary key auto_increment,
)

1.6.2.非空约束

如果一个列添加了非空约束,就代表赋值的时候不可以为空(null)
CREATE TABLE USER(
name char(10) not null
)

1.6.3.唯一约束

如果一个列添加了唯一约束,那么这个列即是唯一的,不可以重复,但可以为空(一般和非空约束搭配使用)
CREATE TABLKE USER(
name char(10) unique not null;
)

1.6.4.外键约束

外键其实就是用于通知数据库的两张表数据之间对应关系的这样一个列
这样数据库就会帮我们维护之间的关系
当删除的表中有外键,这种表就不会被删除,除非这种外键表已经被删除
create table emp(
id int,
name varchar(50),
dept_id int,
foreign key(dept_id) references dept(id)
);

1.7.表关系

在数据库中常见的表关系有如下三种:
一对多,多对多,一对一
一对多或一对多的关系,可以在多的一方添加保存一的一方的主键作为外键,来保存两张表数据之间的对应关系
一对一,可在任意以防范添加列表保存另一方的主键信息作为外键,来保持两张表数据的对应关系
多对多,在多对多的关系下不能再任何一方添加列表保存关系,但我们可以添加一个第三方的表,这第三张表分别保存两张表中的主键,以保存两张表数据之间的关系

1.8.多表查询

1.8.1.连接查询

SELECT FROM FROM 表一,表二
这种查询会有大量错误信息,因此可以通过笛卡尔积查询中排出错误数据
SELECT
FROM 表一,表二 WHERE 表一主键对应表二外键

1.8.2.左外连接查询和右外连接查询

左外SELECT FROM 表一 LEFT JOIN 表二 ON 表一主键=表二外键
右外SELECT
FROM 表一 RIGHT JOIN 表二 ON 表一主键=表二外键
注:union可以将两条SQL语句执行的结果合并,但是有前提:
1.两条SQL语句查询的结果列数必须一致
2.两条SQL语句查询的结果列明、顺序也应该一致
尽量使用UNION ALL

1.9.having

having和where都可以进行过滤
where是再分组之前,having再分组之后
having后边可以以多行函数进行筛选,而where则不行

1.10.修改表

ALTER TABLE ADD 列名 类型; 新增列
ALTER TABLE
MODIFY 决定的主键名 PRIMARY KEY AUTO_INCREMENT;修改主键
ALTER TABLE * DROP 列名 删除列

ALTER TABLE MODIFY 决定的主键名 删除主键(如果有主键自增,先删自增,后删主键)
ALTET TABLE
DROP PRIMARY KEY;