JavaWeb前端开发知识总结(mysql)

JavaWeb前端开发知识总结(MySql)

1. MySql概述

数据库就是一个文件系统,通过标准的SQL语句获取数据;
MySql数据库是一个关系型数据库管理系统;
关系型数据库保存的是实体之间的关系.
数据库使用原则
​ 一般一个项目会创建一个数据库,在数据库中创建多张表,每张表对应一个实体类,表中存储的记录是实体的每一个实例对象.

2. SQL语言

SQL语言是一种结构化查询语言,用于在数据库中存取数据,查询,更新和管理关系型数据库管理系统,同时也是数据库脚本语言的扩展名.

2.1 SQL语言分类

2.1.1 数据定义语言

数据定义语言(DDL):Data Definition Language,用于创建和删除及修改数据库和表,同时也可以定义索引(键),定义表之间的链接,确定表之间的约束.
定义数据的关键字:创建(create),删除(drop),修改(alter),删除表(truncate).

2.1.2 数据操作语言

数据操作语言(DML):Data Maniplation Language,用于对数据库中的数据追加,删除,更新,查询.
数据操作的关键字:更新(update),删除(delete),增加(insert into).

2.1.3 数据查询语言

数据查询语言(DQL):Data Query Language,用于从数据库中查询数据.
数据查询关键字:查询(select).

2.1.4 数据控制语言

数据控制语言(DCL):Data Control Language,用于对数据库的权限等进行管理.
数据控制语言关键字:授权(grant),撤销授权(revoke),拒绝授权(deny).

2.1.5 事务控制语言

事控制语言(TCL):Transcation Control Language,用于对数据库设置保存点,回滚及事务提交.
事务控制语言关键字:设置保存点(savepoint),回滚(rollback),提交(commit).

2.2 数据库的操作

2.2.1 创建数据库

语法:注意语句后有分号结束

create database 数据库名称 [Character set 字符集  collate   字符集校对规则];

案例

-- 案例
create database test; -- 创建名称为test的数据库,使用默认的字符集及字符集校对规则
-- 案例
create database test2 character set utf8; -- 创建名称为test2,字符集是utf8的数据库
-- 案例
create database test3 character set utf8 collate utf8_bin; -- 创建使用指定字符集合字符集校对规则的数据库test3

2.2.2 查看数据库

语法:

-- 查看数据库服务器中所有的数据库
show databases;
-- 查看指定数据库的创建信息
show database 具体的数据库名称;

2.2.3 修改数据库

语法:

alter database 数据库名称 Character set 字符集 collate 字符集校对规则; -- 此命令不会修改数据库名称,只能修改数据库的字符集和校对规则

2.2.4 删除数据库

语法:

drop database 数据库名称;

2.2.5 切换和查看当前使用的数据库

语法:

-- 切换数据库
use 数据库名称; -- 切换到指定的数据库
-- 查看当前正在使用的数据库
select database();

2.3 表的操作

2.3.1 创建表

语法:

create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);
字段类型中除字符串类型外都有默认长度,字符串类型需要在定义时设定长度,当字段类型是字符串或日期时,记录中的数据需要使用'数据'形式.
show create table 表名; 查看创建表的SQL语句.

字段类型:(与Java中数据类型对比)

数据类型 java中数据类型 mysql中数据类型
整型 (byte/short/int/long) tinyint/smallint/int/bigint
单精度浮点数 float float
双精度浮点数 double double
布尔类型 boolean bit
字符/字符串 char/String char,varchar
日期 date date/year/time/datetime/timestamp(时间戳)
文件 file blob(二进制文件)/text(文本)

char和varchar的区别:

char代表是固定长度的字符或字符串:
    -- 当存入的字符长度没有达到设定的长度时,存入数据库中时后面的会使用空格进行填充.
varchar代表的是可变长度(在设定的长度范围内)的字符串:
    -- 当存入的数据长度没有达到设定的长度时,存入数据库中的数据就是实际的长度,不会使用空格填充.

日期类型间的区别:

date:显示的格式为YYYY-MM-DD
year:显示格式为YYYY
time:显示格式为HH:MM:SS
datetime:显示格式为YYYY-MM-DD  HH:MM:SS
    -- 当向数据库中添加记录时,如果没有给此类型的字段设置值,存入数据库中时使用null值填充
timestamp(时间戳):YYYY-MM-DD  HH:MM:SS
    -- 当向数据库中添加记录时,如果没有给此字段的设置值,存入数据库中使用的是系统当前的时间

2.3.2 约束关系

约束关系主要是完成对数据的校验,保证数据库数据的完整性.
约束关系的分类(常用的五类约束):

not null:非空约束,指定表中的某字段(列)的值不能为空
unique:唯一约束,指定某字段(列)的值不能重复,允许null时,null可以有多个
primary key:主键约束,指定的字段值不能重复且唯一
foreign key:外键约束,指定该字段值属于主表中的字段值,
    -- 外键可以是另一张表的主键,也可以是另一张表的非主键,为非主键时必须为该字段设置索引
check:检查,指定表达式,用于校验数据,mysql不支持该约束

not null约束:

非空约束只能作用在表的字段上,所有的字段类型的值都可以是null,null和空字符串和0是不等价的.
设置非空约束的语法:
-- 创建表时设置
字段名  字段类型  not null,
-- 修改表时设置
alter table 表名 modify 字段名 字段类型  not null;

unique约束:

唯一性约束作用在字段上,一张表中可以有多个唯一性约束,唯一性约束的字段的值不能重复,但可以有多个null值.
设置唯一性约束的语法:
-- 创建表时设置
字段名  字段类型  unique,
-- 修改表时设置
alter table 表名 modify 字段名  字段类型  unique;

primary key约束:

主键约束的字段值不能重复和为null值,多字段组合的主键约束中的所有字段均不能null值,且组合字段的值不能重复,每个表可以有多个主键约束,这些字段整体作为主键约束条件(单个重复可以,同时重复时不可以).
主键设置语法:
-- 创建表时设置
字段名 字段类型  primary key [auto_increment], -- auto_increment代表此字段的值能自增
-- 修改表时设置
alter table 表名 modify 字段名 字段类型  primary key,

foreign key约束:

外键约束是保证数据的参照完整性,作用在同一张表或两个表中的两个字段上,从表的外键值必须在主表中存在或为null,主表中被外键依赖的值必须先在从表中删除外键依赖的所有记录后才能删除,外键约束的列在主表中只能是逐渐或唯一性约束的列,当为普通列时,从表中必须为引用外键约束的列设置索引.
设置外键约束语法:
-- 创建表时设置
CONSTRAINT `从表外键名` FOREIGN KEY (`从表字段名`) REFERENCES `主表` (`主表字段名`);
-- 修改表时设置
ALTER TABLE `从表名` ADD CONSTRAINT `外键名` FOREIGN KEY (`外键约束的字段名`) REFERENCES `主表名` (`主表字段名`);
-- 删除外键
alter table 表名 drop foreign key 外键名;

2.3.3 查看表

查看当前使用的数据库下的所有表:

语法:
show tables; -- 查看是当前正在使用的数据库中的所有表(使用use 数据库名  可以切换使用的数据库)

查看当前使用的数据库下的某一张表:

语法:
desc 表名; -- 查看的是表的字段的相关信息

2.3.4 删除表

语法:

drop table 表名; -- 删除指定表名的表

2.3.5 修改表

修改表名:

语法:
rename table 表名 to 新表名;

添加字段:

语法:
alter table 表名 add 添加的字段名  字段类型 约束条件;

修改字段名称:

语法:
alter table 表名 change 旧字段名 新字段名  字段类型(长度)  约束; -- 必须加上字段类型

修改字段类型,长度和约束条件:

语法:
alter table 表名 modify 字段名 字段类型(长度)  约束条件;  -- 修改时必须加上字段类型

修改字段的字符集:

语法:
alter table 表名 character set 字符集名 [collate 字符集校对规则];

删除字段:

语法:
alter table 表名 drop 字段名;

2.4 表中数据的操作

2.4.1 添加表的记录

语法:

向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
向表中插入所有列:insert into 表名 values (值1,值2,值3…);

注意事项:

-- 值的类型与数据库中表列的类型一致;
-- 值的顺序与数据库中表列的顺序一致;
-- 值的最大长度不能超过列设置最大长度;
-- 值的类型是字符串或者是日期类型,使用单引号引起来.

2.4.2 修改表的记录

语法:

update 表名 set 列名1=值1,列名2=值2... [where 条件];

注意事项:

-- 值的类型与列的类型一致;
-- 值的最大长度不能超过列设置的最大长度;
-- 字符串类型和日期类型添加单引号.

2.4.3 删除表的记录

语法:

delete from 表名 [where条件];

注意事项:

-- 删除表的记录,一般指删除表中某一条记录(一行数据);
-- 当没有给出条件时,会将表中数据清空.

删除表中所有记录的方法:

方式1:使用没有条件的delete语句
delete from 表名;
  -- 特点是:属于DML语句,一条记录一条记录删除,事务可以作用在DML语句上的,可以使用回滚恢复数据
  -- 在删除前使用start transaction 开启事务;
  -- 删除语句;
  -- rollback语句恢复数据;
方式2:使用truncate语句
truncate from 表名;
  -- 特点是:属于DDL语句,本质是先将表删除,然后重新创建一个结构一样的表,事务不能控制DDL的,不能恢复数据.

2.4.4 查询表的记录–单表查询

2.4.4.1 基本查询

语法:

简单查询:
select [distinct] * from 表名 [条件]; -- 查询表中所有的记录,distinct是去重关键字
select [distinct] 字段1,字段2... from 表名 [条件]; -- 查询表中指定字段的记录,distinct是去除这些字段值并列的重复值
去重查询:查询所有的字段必须放在distinct关键字后
select [distinct] 字段 from 表名 [条件]; -- 查询只包含指定字段的记录,distinct是去除此字段的重复值
别名查询:
select [distinct] 字段 [[as] 字段别名] from 表名 [[as] 表别名] [条件]; -- 使用as关键给字段或表设置别名,as关键字可以省略
四则运算查询:=-*/  -- 当遇到有字段null参与运算时,结果是null
select 字段[运算符] from 表名 [条件];
2.4.4.2 条件查询

语法:

单条件查询:where语句,符号可以是>,>=,<,<=,!=(<>),=,%
select 字段名 from 表名 where 字段值=指定值;
多条件查询:between...and范围语句
select 字段名 from 表名 between 条件1  and  条件2;  
    -- 查询的是在条件1和条件2之前的值的记录,条件可以是具体的取值
空值查询:is null语句
select 字段名 from 表名 where 字段名 is null; -- 查询某个字段名为空的记录
集合查询:in语句
select 字段名 from 表名 where 字段名 in (具体值集合或者子查询结果集合);
模糊查询:like语句
select 字段名 from 表名 where 字段 like 字符串; -- 格式 '[%或_]待匹配字符串[%或_]'
    -- 下划线_代表一个占位符,%代表多个占位符,没有这两个占位符时,是绝对匹配
    -- 如:'_国' 以中结尾的含有两个字符的字符串
    -- 如:'_国_' 国在中间的含有3个字符的字符串
    -- 如:'%国' 以国结尾的字符串
    -- 如:'%国%' 含有国的字符串
非值查询:not关键字,可以和前面的查询语句配合查询
select 字段 from 表名 where 字段 not between 条件1 and 条件2; -- between...and查询结果反面记录
select 字段 from 表名 where 字段 not is null; -- 查询不是null的记录
select 字段 from 表名 where 字段 not in (具体值集合或者子查询结果集合); -- 查询不在指定值集合中的记录
select 字段 from 表名 where 字段 not like 字符串; -- 查询like结果的反面记录
2.4.4.3 排序查询

语法:

排序查询:order by语句,asc是升序,desc是降序,默认是asc
select 字段 from 表名 order by 字段名1 asc/desc,字段名2 asc/desc....; -- 在前面的排序规则是主规则,后面的规则均是在前一个排序规则的基础上的排序规则
2.4.4.4 统计查询

语法:

使用聚合函数的查询:count(计数),sum(求和),max(最大值),min(最小值),avg(平均值),聚合函数与分组查询结合时,统计的结果都是每一组的结果,统计函数统计的是非null的值,null会跳过,count()和avg()方法统计的是非null值,null值直接跳过.
计数查询:count()函数
select count(任意类型的值) from 表名 [条件]; -- count的参数可以是任意值,一般使用count(1)进行统计
    -- count(字段名):统计的是表中该字段不为null的个数,当表中无记录时,返回null;
    -- count(*):统计表中所有记录,当该字段为null时,会记录null的个数,当表中无记录时,返回null;
    -- count(1):统计表中的所有记录,当该字段为null时,会记录null的个数,当表中无记录时,返回0.
平均值查询:avg(字段名),针对的是数值类型的字段,不能统计字符串和日期等非数值类型字段
select avg(字段名) from 表名 [条件];
求和查询:sum(字段名),针对的是数值类型的字段,不能统计字符串和日期等非数值类型字段
select sum(字段名) from 表名 [条件];
最值查询:最大值max(字段名),最小值min(字段名)
select min/max(字段名) from 表名 [条件];

使用聚合函数注意事项:

having语句:语句后的条件只能是聚合函数的返回值;
where语句:后面的条件不能跟着聚合函数,此时可以使用having语句代替where关键字;
字段中的null值的处理:ifnull(字段名,值),当指定字段名中出现null时,使用指定的值代替该null值,一般聚合函数中要使用该判断,如果不进行判断,null和任何值的四则运算后的结果均为null
 -- 如:select sum(ifnull(字段名,0)) from 表名; 当字段名中出现null值,使用0代替
2.4.4.5 分组查询

语法:

语法:一定保证语句的前后的要分组的字段名集合相同
select 聚合函数,字段名1,字段名2.. from 表名 group by 字段名1,字段名2... having 聚合函数; 
简单分组查询:
select 字段名 from 表名 order by 字段名;
统计分组查询:
select 字段名1,count(1) from 表名 group by 字段名1; -- 查询统计按照字段名1分组后每组的个数
条件分组查询:
select 字段名1,count(1) as 别名1 from 表名 group by 字段名1 having 别名1 > 条件; -- 查询统计按照字段名1分组后每组个数符合指定条件的所有记录
2.4.4.6 单表查询数据的顺序
S(select)...F(from)...W(where)...G(group by)...H(having)...O(order by);

2.4.5 查询表的记录–多表查询

2.4.5.1 多表(实体)间的关系

实体间的关系:

# 一对一的关系;
# 一对多的关系;
# 多对多的关系.

实体间的关系在数据库中表现形式:

# 一对一关系:将一方的主键作为另一方的外键,并添加unique关键字约束;
# 一对多关系:在多的一方创建一个字段,这个字段作为外键执向一的一方的主键;
# 多对多关系:创建一个中间表,中间表中至少需要两个字段分别作为外键指向多对多双方各自的主键,一般中间表的两个外键设为中间表的主键(双主键).
2.4.5.2 连接查询

交叉连接查询:

语法:
select 字段名 from 表名1,表名2; -- 获得是两个表的笛卡尔积的记录,一般没有意义

内连接查询:

语法:inner join语句,inner可以省略,显式内连接和隐式内连接可以相互转换
显式内连接查询:
select 字段名 from 表名1 inner join 表名2 on 条件语句; -- 条件是两个表中相同的属性值判定条件,一般是外键约束
-- 如:select * FROM 客户表 c inner join 订单表 o on c.客户id = o.客户id; 客户id是订单表中的外键
隐式内连接查询:
select 字段名 from 表名1,表名2 where 条件语句; -- 条件一般是外键约束

外连接查询:

语法:outer join语句,左右外连接可以相互转换,将表的先后顺序调换即可
左外连接查询:left outer join语句,outer一般可以省略,查询的是左边表的全部数据和两个表的交集数据,左边有的记录而右边没有的记录,右边显示为nullselect 字段名 from 表名1 left join 表名2 on 条件语句;
右外连接查询:right outer join语句,outer一般可以省略,查询的是右边表的全部数据和两个表的交集数据,右边有的记录而左边没有的记录,左边显示为nullselect 字段名 from 表名1 left join 表名2 on 条件语句;

全链接查询:

语法:获取两个表中的所有的数据,两边没有相对应的数据时,各自显示为null
-- 方式1:
左连接查询语句 union 右连接插叙语句;
-- 方式2:
右连接查询语句 union 左连接插叙语句;
2.4.5.3 嵌套查询(子查询)

嵌套查询分类:

# 描述:子查询也叫嵌套SELECT语句,查询语句作为其他查询的输入,输出,条件,作为临时表;多表间一般存在外键约束.
# 作为输入值:select子句作为另一个select语句中from的输入值;
# 作为输出值(结果字段):select子句的查询结果,作为另一个select语句的输出的字段名;
# 作为条件:select子句作为另一个select语句的Where子句中;

from嵌套查询(作为输入值):

语法:一个select查询语句的结果作为另一个select语句from中的临时表使用
select a.*,b.* from1 a,(select 字段名1,字段名2.. from2) b where a.字段 = b.字段;

作为字段名(作为输出值):

语法:select子句的查询结果,作为另一个select语句的输出的字段名,子查询的结果必须是单个字段值
select a.*,(select 字段名 from2 b where b.字段名 = a.字段名) [as 别名] from1 a;

作为条件:

语法:select子句作为条件放在where之中,select子句可以返回单个数据,多行数据,多列数据
单个返回值:
如: select * from1 a, where a.字段 = (select 字段名 from2);
多行返回值:
如: select * from1 a, where a.字段 in (select 字段名 from2); -- 表2查询返回多个值
多列返回值:
如: select * from1 a, where (a.字段1,a.字段2) = (select (a.字段1,a.字段2) from2); -- 表2查询返回多列数据
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章