数据库
JavaEE:企业级Java开发 Web
前端(页面:展示数据)
后台(连接点:连接数据库JDBC,连接前端(控制、控制试图跳转、和给前端传递数据))
数据库:(存数据、Txt、Excel、word)
数据库是所有软件体系中最核心的存在
1. what
数据库(Database——DB)
概念:数据仓库,安装在操作系统(Window、Linux…)之上!跨平台。用来存储和查询、管理数据的一个仓库
可以存储大量的数据——500万以下
作用:存储数据、操作数据、管理数据
2.数据库类型
- 关系型数据库:行跟列。(SQL)
通过表和表之间、行和列之间的关系进行数据的存储
MySQL、Oracle、SQL Server
- 非关系型数据库:其他形式(NoSQL——No only SQL)
- Redis、MongDB
- 通过对象存储,通过对象的自身的属性来决定
- DBMS(数据库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据。维护和获取数据
- MySQL:数据库管理系统
SQL语言
1. what
概念:结构化查询语言(Structured Query Language),是一种特殊的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统> >
连接数据库
mysql -u用户名 -p数据库密码
注释:-- 注释
所有的语句都用分号结尾
查看全部数据库:show databases
show databases;
切换数据库:use
use 数据库名;
查看数据库中**所有的表:show tables**
show tables;
显示数据库中**表的所有信息:describe**
describe 表名;
创建一个数据库:
create database 数据库名;
退出连接:exit
exit;
单行注释:-- 单行注释(双-加空格)
多行注释:/**/
2. DDL语言(数据定义语言)
连接mysql数据。注意:保证MySQL服务开着。此电脑——》管理——》服务——》MySQL正在运行
连接数据库的方式:第一种:MySQL自带的客户端连接
第二种:使用命令:mysql -uroot -proot
-u:用户名
-p:密码
第三种:使用客户端软件 navicat和sqlyog等
2.1 创建数据库定义表结构
- 创建数据库:create database 数据库名;
create database zmq;
- 删除数据库:drop database 数据库名;
drop database zmq;
- 切换到指定是数据库:use 数据库名;
use zmq;
- 创建表结构:create table 表名(列名 数据类型,…,列名 数据类型);
数据类型:整型:int(整型)、bigint(长整型==long)
浮点型:float(单精度)、double(双精度) ——》这两种会丢失精度、decimal(数据位数[包括小数],小数位数)——》不会丢失精度,基本用这个
字符串类型:varchar(长度)——最大255
文本类型:text
日期类型:date
create table student(
id int,--id
u_name varchar(20),--姓名
age int,--年龄
score decimal--成绩
);
- 删除表:drop table student;
drop table student;
- 实例
create database zmq11;-- 建库
use zmq11;-- 切换到该数据库
-- 建表
create table Food(
id int,
u_name varchar(20),
price decimal(10,2)
);
2.2修改表的结构
- 增加一行:alter table 表名 add column 列名 数据类型;
alter table student add column u_class varchar(20);
- 删除指定的列:alter table 表名 drop column 列名;
alter table student drop column age;
- 修改某一列的数据类型:alter table 表名 modify column 列名 新数据类型
alter table student modify column u_name varchar(10);
- 修改列名:alter table 表名 change column 旧列名 新列名 数据类型
alter table student modify column u_name u_names varchar(20);
- 删除表:如果表存在再删除
drop table if exists 表名
- 所有的创建和删除操作尽量加上判断,以免报错
注意点:
- 字段名 :用反引号包裹``
- 注释:-- /**/
- sql关键字大小写不敏感,建议小写
- 所有的符号用英文
- 实例
--增加一列
alter table Food add column description varchar(255);
-- 修改某列的数据类型
alter table Food modify column price double;
-- 修改列名
alter table Food change column price u_price int;
-- 删除指定列
alter table Food drop column u_name;
2.3 添加约束
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
作用:保证数据库中的数据的正确、有效性和完整性
添加多个约束:两个约束之间用空格分开
- 分类:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段的数据不能为null | not null |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | default |
检查约束(8.0.14版本后) | 保证字段值满足某一个条件 | check |
外键约束 | 用来让两张图的数据之间建立连接,保证数据的一致性和完整性 | foreign key |
- 实例
create table Student(
id int primary key,--主键
u_name varchar(20) unique,--唯一不重复
age int default 18,--默认值18
u_class varchar(20) not null--非空
);
insert into Student(id,u_name,age,u_class) values(1,'张三',18,'软工1班');
插入一条数据:insert into 表名 values (值1,值2…);
插入多条数据:insert into 表名(列名,列名) values(值1,值2),(值1,值2),(值1,值2)
当插入多条数据时,各组数据的列数必须与表中的列数一致,且每组数据的顺序也必须与表中的列顺序相匹配
2.4 外键约束
概念:外键用来让两张表的数据之间建立连接从,从而保证数据的一致性和完整性
一张表的列要去引用另外一张表的主键
why:当两张表的实例是多对一(n : 1)的关系,在多(n)处添加外键,1为父表
示例:学生表的 gradeid 字段要去引用年纪表的gardeid
- 定义外键key
- 给这个外键添加约束(执行引用) references 引用
2.5 添加外键
语法1,直接在属性值后面添加
create table score(
cscore int(11),
st_id int(50) references student(id),
cs_id int(30) references classes(id),
primary key(st_id,cs_id)
);
语法2: foreign key 外键名称 references 主表(主表列名)
create table score(
cscore int(11),
st_id int(50),
cs_id int(30),
primary key(st_id,cs_id),
FOREIGN KEY (st_id) REFERENCES student(id),
FOREIGN KEY (cs_id) REFERENCES classes(id)
);
语法3,在创建时添加外键约束:constraint 外键名称(随意取) foreign key 外键字段名 references 主表(主表列名);
create table score(
cscore int(11),
st_id int(50),
cs_id int(30),
primary key(st_id,cs_id),
CONSTRAINT FK_ID_ST FOREIGN KEY (st_id) REFERENCES student(id),
CONSTRAINT FK_ID_CS FOREIGN KEY (cs_id) REFERENCES classes(id)·
);
语法4,在表的定义外进行添加:alter table 表名 add constraint 外键名称 foreign key 外键字段名 references 主表(对应的表的主键字段名)
- 删除/更新行为
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新
创建原则:先创建不含外键的表也就是班级表
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
2.6外键总结
以上的操作都是物理外键,数据库级别的外键,我们不建议使用,避免数据库过多造成困扰
最佳实践:
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)
2.7 date和char
date:日期
datetime:日期时间
char:固定长度,按照给定的长度占用空间,所赋值不得超过给定长度
varchar:可变长度,范围在0到给定长度之间,按照元素内存占用空间,所赋值不得超过给定长度
3.DML语言(数据标记语言)
DML(Data Mark Language)数据标记性语言。给语言主要是对用户对数据库表中的记录进行操作的
增加、删除、修改
3.1增加
给表里的==所有的列==添加值
insert into 表名 values (值1,值2,值3,…);
insert into department values (2,'质检部');
给表里==指定的列==添加值
insert into 表名(列名1,列名2,…) values (值1,值2,…);
insert into department (id,d_name) values(3,'工程部');
批量添加
insert into 表名 (列1,列2,…) values (值1,值2,…),(值1,值2,…),(值1,值2,…),(值1,值2,…),…;
insert into department (id,d_name) values(3,'工程部'),(4,'管理部');
auto_increment:自增,针对int类型这种为整型的,且必须为整型
添加时列和值必须匹配——个数匹配、顺序匹配
3.2 删除
- 删除语法
删除表中所有的记录【不建议使用】
delete from 表名;
delete from users;
根据条件删除满足条件的记录
delete from 表名 where 条件;
delete from users where id=5;
- 条件
- 关系运算符:>、>=、<、<=、=、!=
- in运算符:in(值1,值2,…);——满足在这些值内的
- between and:between 值1 and 值 2;——满足值在值1和值2之间
- 逻辑运算符:and(与)、or(或)
- not in:不在
- is null:是空
- is not null:不是空
select * from t_user where age not in(18,20,15,99);
select * from t_user where age is not null;
3.3 修改
update 表名 set 列名=值,列名=值… where 条件;
注:最后一个列名=值不要使用’,‘号
update department set d_name='管理部' where id=2;-- 修改
4. DQL语言(数据查询语言)
DQL(Data Query Language)数据查询语言
作用:用于查询数据表中的记录
4.1 基础语法-select from
select [列名…]from 表名[where 条件]
4.2 模糊条件查询-like
- 查询所有列的值:select * from 表名;
- 查询指定列的值:select 列1,列2 from 表名;
- 根据条件查询:select * from 表名 where 条件;
模糊查询 关键字:like
通配符 % :统配n个字符
通配符 _ :统配一个字符
-- 查询所有列的值语句
select * from t_user;
-- 查询指定列的值
select name,age from t_user;
-- 根据条件查询
select * from t_user where age>20 or sex='男';
select * from t_user where age in(19,20,25,29)
-- 模糊查询 like 通配符 %:统配n个字符 _:统配一个字符
-- 查找名字中含有琪
select * from t_user where name like '%琪%'
-- 查询姓刘
select * from t_user where name like '刘%'
-- 第二个字为琪的
select * from t_user where name like '_琪%'
-- 查找姓刘的且只要两个字
select * from t_user where name like '刘_'
4.3 为查询的列起别名-as
- select 列名 as 新列名, 列名 as 新列名 from 表名【where 条件】
- as可以省略
select name as 姓名,age,sex 性别 from t_user;
4.4 去除重复项-distinct
- select distinct 列名,列名,… from 表名 【where 条件】
select distinct id,name,age from t_user;
4.5 排序-order by
- select * from 表名 order by 列1,列2 [desc(降序) asc(升序)]
- 注:查询的列必须都重复才能成功去除
-- 先按照年龄升序,年龄相同按照id降序
select * from t_user order by age desc,id desc;
4.6 分页查询-limit
oracle数据库分页
-- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME WHERE 1 = 1 -- 条件 ORDER BY CREATETIME DESC -- 排序 ) A WHERE ROWNUM <= 40 ) WHERE RN > 30
sqlserver数据库分页
select top @pageSize * from 表名 where 主键>= (select max(主键) from ( select top ((@pageIndex-1)*@pageSize+1) 主键 from 表名 order by 主键 asc) temp_max_ids) order by 主键;
mysql数据库分页(最简单)
- select * from 表名 limit 起始记录,每页显示页数;
-- 查询第一页的数据 每页显示三条
select * from t_user limit 0,3;
-- 查询第二页的数据 每页显示三条
select * from t_user limit 3,3
-- 查询第三页的数据current 每页显示三条PageSize
select * from t_user limit 6,3
-- 规律: select * from t_user limit (current-1)*pageSize,pageSize;
4.7 聚合函数-5个
函数就是mysql中自带的函数。——5大聚合函数
- sum():求和
- count():求个数
- avg():平均值
- max():最大值
- min():最小值
select sum(age) 年龄和,max(age) 最大年龄,min(age) 最小年龄,count(id) 个数,avg(age) from t_user;
4.8 查询的结果或条件上可以使用运算符【不建议使用】
select age, age+1 from t_user where age+1>20;
- 注:加号不能用在字符串
4.9 分组查询-group by
- select 分组的列,聚合函数 from 表名 group by 列名,列名 having 分组后的条件
- 使用了group by 后,要求select出的结果字段都是可汇总的,否则就会出错。
- group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
- 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且 where 是在 group by 之前执行的
where 和 having
- where + group by
where限定的条件查询会在group by分组之前执行
- group by +having
having限定的条件查询会在group by 分组之后查询
- where+group by+having
where 和 having 在一起使用的时候,会先执行where的限定条件,最后再执行having的限定条件查询
-- 按照性别分组查询 人数大于等于3
select sex,count(id),max(age),name from t_user group by sex,name having count(id)>=2;
-- 注意: select 后只能跟聚合函数或分组的列名
4.10查询的完整语法
select [distinct] [列名 as 别名,列名 别名,别名][*]
from 表名
[where 条件]
[group by 分组列]
[having 分组后的条件]
[order by 排序的列]
[limit 起始记录,每页的条数];
依据需求来添加相应内容
5.导入导出sql语句
5.1 导出
选中数据库——》右键——》转储SQL文件——》结构和数据
5.2 导入
- 手动创建数据库
- 右键——》运行SQL文件——》找到sql文件的位置