今日分享开始啦,请大家多多指教~
MySQL:先别跑好吗?
程序员:不跑你养我啊?
MySQL:你听我给你解释啊。
程序员:你先管好你自己吧。
这是我之前看过的一个非常有趣的对话,这也是真实写照。今天分享的是MySQL数据库,打好基础非常重要,话不多说,正文开始啦~
Database Management System:数据库管理系统
DBMA:数据库管理员
常见的数据库管理系统:
Java中主要使用的是MySQL和Oracle
1.数据库中的表相当于代码中的实体类
例如:要研究医生这个类,就应该创建一张医生表
2.数据库表中的一列(字段)相当于实体类中的属性
例如:汽车有品牌属性,那么在汽车表中就应该有品牌字段
3.根据类创建出的对象就相当于数据库表中的一行(一条记录)
例如:当我们获取宠物对象时,我们就可以从该对象上获取它所具备的所有属性;同样的,当我们查询到一条宠物记录时我们就可以从表中明确该宠物的所有字段信息。
结构化查询语言:Structured Query Language
分类:
对数据库、表进行创建、修改、删除等操作
关键字:create、alter、drop等
对表中记录、字段进行增、删、改等操作
关键字:insert、delete、update等
对数据库、表、记录、字段进行查询的
关键字:select、from、where、in、and、or、between、having、group by、order by、limit等
对数据库的安全级别和访问权限进行管理的
关键字:revoke、grant、commit、roll back等
注:
登录mysql
方式一:
方法二:
方式三:
C (create) R (read) U (update) D(delete)
建库:create database 库名;
判断数据库是否存在,不存在才创建:create database if not exists 库名;
创建数据库并指明编码格式:create database 库名 character set 编码格式;
查询数据库的创建语句以及编码格式:show create database 库名;
查看已有的数据库:show databases;
删库:drop database 库名;
判断数据库是否存在,存在才删除:drop database if exists 库名;
修改数据库的编码格式:alter database 库名 character set 编码格式;
指定使用的数据库:use 库名;
建表:create table 表名 (字段名 字段类型 [约束], 字段名 字段类型 [约束], 字段名 字段类型 [约束], ...);
判断表是否存在,不存在才创建:create table if not exists 表名 (字段名 字段类型 [约束], 字段名 字段类型 [约束], 字段名 字段类型 [约束], ...);
查询所有表:show tables;
查看表结构:desc 表名;
删表:drop table 表名;
判断表是否存在,存在才删除:drop table if exists 表名;
复制表结构:create table 新表名 like 被复制的表名;
修改表名:alter table 旧表名 rename to 新表名;
修改表结构:
添加新字段:alter table 表名 add 新字段 字段类型 [约束];
删除字段:alter table 表名 drop 字段;
修改字段类型:alter table 表名 modify 字段 字段类型 [约束];
修改字段名:alter table 表名 change 旧字段名 新字段名 字段类型 [约束];
查询表中的所有记录:
添加记录:
向所有字段添加数据:insert into 表名 values (值1,值2,值3,...);
向指定字段添加数据:insert into 表名 (字段1,字段2,字段3,...) values (值1,值2,值3,...);
批量添加(所有字段):insert into 表名 values (值1,值2,值3,...), (值1,值2,值3,...),...;
批量添加(指定字段):insert into 表名 (字段1,字段2,字段3,...) values (值1,值2,值3,...), (值1,值2,值3,...),...;
删除记录:
删除所有记录:delete from 表名;
根据条件删除指定记录:delete from 表名 where 条件;
删除所有记录:truncate table 表名;
修改记录:
修改所有记录:update 表名 set 字段名 = 值,字段名 = 值,字段名 = 值...;
根据条件修改指定记录:update 表名 set 字段名 = 值,字段名 = 值,字段名 = 值,... where 条件;
注:
2.4.1 数值类型
int:整数类型
double:小数类型
特殊的:salary double(n,m)
n:表示整数位和小数位一共最多有n位
m:表示小数位最多保留m位
例如:salary double(6,2) 的最大值是9999.99
2.4.2 日期和时间类型
datetime:时间戳,包含年月日时分秒,格式:yyyy-MM-dd HH:mm:ss
timestamp:时间戳,包含年月日时分秒,格式:yyyy-MM-dd HH:mm:ss
注:
2.4.3 字符串类型
varchar:
例如:name varchar(20):表示姓名字段的值最大20个字符
2.5.1 基础查询
查询所有:select * from 表名;
查询所有记录的指定字段:select 字段1,字段2,字段3,... from 表名;
去重查询:select distinct 字段名 from 表名;
2.5.2 条件查询
在 where 关键字后加上条件,查询时会根据条件进行记录的筛选
1.逻辑运算符
2.关系运算符
3.指定范围内
例如:查询成绩在80~100之间的学生
select * from student where score between 80 and 100;
注:含头含尾
4.在指定列表中in(值1,值2,值3,…)
不在指定列表中not in(值1,值2,值3,…)
5.空和非空
6.模糊查询
关键字:like
占位符:
2.5.3 排序查询
关键字:order by
排序方法:
// 降序排列员工的销售额,销售额相同时,根据工资升序排列
select * from emp order by sale desc,salary asc;
注:如果多个字段进行排序,只有第一字段的值相同时,才会执行第二字段的排序
格式:order by 字段1 排序方式,字段2 排序方式,…;
2.5.4 聚合函数
概念:将一列数据作为一个整体,然后进行纵向的计算
注:
2.5.5 分组查询
关键字:group by
注:
where 用在分组前进行条件筛选,如果不满足 where 的条件则不进入分组;having 用在分组后进行条件筛选,如果不满足 having 的条件则不被查询到
where 后不能跟聚合函数,having 后可以使用聚合函数进行分组后的条件筛选
2.5.6 分页查询
关键字:limit
语法:limit 开始索引,每页查询的记录数
注:索引从0开始
公式:开始索引 = (当前页码 - 1) * 每页查询的记录数
2.5.7 查询语句的结构
select:字段列表
from:表名
where:条件列表
group by:分组字段
having:分组后的条件
order by:排序字段 排序方式
limit:索引,记录数
2.5.8 起别名
可以为字段、表起别名
起别名的作用是能够区分多张表中的同名字段,并且简化了书写
格式:as 别名
注:as 可以省略
概念:对表中数据进行限定
分类:
2.6.1 非空约束:not null
限定字段值不能为空
create table 表名(字段名 字段类型 not null,字段名 字段类型 [约束],字段名 字段类 [约束]...);
alter table 表名 modify 字段名 字段类型 not null;
注:已存在空值的字段不能被设置成非空
alter table 表名 modify 字段名 字段类型;
2.6.2 唯一约束:unique
限定字段值不能有重复
create table 表名(字段名 字段类型 unique,字段名 字段类型 [约束],字段名 字段类 [约束]...);
alter table 表名 modify 字段名 字段类型 unique;
alter table 表名 drop index 字段名;
注:
2.6.3 主键约束:primary key
一般主键不使用具有特殊含义的字段
特点:
create table 表名(字段名 字段类型 primary key,字段名 字段类型 [约束],字段名 字段类 [约束]...);
create table 表名(字段名 字段类型 [约束],字段名 字段类型 [约束],..., primary key(主键字段));
alter table 表名 modify 字段名 字段类型 primary key;
alter table 表名 drop primary key;
注:删除主键约束后,主键仍有非空约束
主键自增长:
概念:如果某个字段是数值类型的主键字段,可以使用 auto_increment 来实现主键自增长
create table 表名(字段名 字段类型 primary key auto_increment,字段名 字段类型 [约束],字段名 字段类 [约束]...);
alter table 表名 modify 主键字段 字段类型 auto_increment;
alter table 表名 modify 主键字段 字段类型;
alter table 表名 modify 字段 字段类型 primary key auto_increment;
注:
2.6.4 外键约束:foreign key
外键让表与表之间产生了联系,保证了数据的完整性
注:从表外键的类型必须与主表主键的类型一致
create table 表名(字段名 字段类型 [约束], 字段名 字段类型 [约束], ..., [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段));
alter table 表明 drop foreign key 外键名;
alter table 表名 add [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段);
alter table 表名 add 外键字段 字段类型, add [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段);
级联操作:对主表中的记录进行更新和修改的同时,能直接影响从表中的记录
create table 表名(字段名 字段类型 [约束], 字段名 字段类型 [约束], ..., [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段) on delete cascade on update cascade);
alter table 表名 add [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段) on delete cascade on update cascade;
alter table 表名 add 外键字段 字段类型, add [constraint 外键名] foreign key(外键字段) references 主表(主表的主键字段) on delete cascade on update cascade;
2.7.1 表与表之间的关系
2.7.2 多表建立连接
2.8.1 交叉查询
语法:select 字段列表 from 表1, 表2;
交叉查询的结果是笛卡尔积,是多张表所有记录的组成情况
我们需要使用条件来去除无效的数据
2.8.2 内连接查询
在交叉查询的基础上使用 where 条件 去除无效的数据
语法:
select 字段列表 from 表1, 表2 where 条件;
select 字段列表 from 表1 inner join 表2 on/where 条件;
注:inner 可以省略
内连接查询的结果是两表的交集
2.8.3 外连接
语法:
select 字段列表 from 表1 left outer join 表2 on 条件;
select 字段列表 from 表1 right outer join 表2 on 条件;
注:outer 可以省略
左外连接查询的结果是左表的全部和两表的交集
右外连接查询的结果是右表的全部和两表的交集
概念:将一条查询语句的结果作为另一条查询语句的表、记录、字段、条件
小结
数据库就是存储数据的仓库,可以实现数据的持久化存储,它的本质是文件系统。
今日份分享已结束,请大家多多包涵和指点!