由浅到深理解MySql数据库

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 07:31   103   0
虽然很多大型的企业不使用MySql,但是又因为这个数据是免费轻量级的,特别是阿里集团对于分布式的使用,让这种的东西反而换发了青春,实现了真正的价值,甚至在很多方面是大型的数据库达不到的优势,特别是大的数据的并发和短时间内的数据库的CRUD,MySql在使用的分布式的技术以后都展现了自己的特有的优势。
基本内容:数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来[持久化保存,用户可以对数据库中的数据进行增加,修改,删除及查询操作
没有数据库:
1、新建一个文件夹用来存储文件;
2、把对应的数据以字符流的形式放入对应的文件中;
3、把文件以某种规律放入文件夹中;
4、 要查询对应数据时,需要将数据仓库所有文件以字符流形式获取并遍历,以取得对应数据的某些标识来取得数据;
有数据库:
1、将数据 以数据库语言 交给数据库;
2、数据库得到数据后 存储在对应的数据表中;
3、要查询对应数据时,仅需要使用数据库语言即可得到对应数据。
SQL一共分成四类,如下所示:
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等,例如创建、删除、修改:数据 库、表结构等;
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新,例如:增、删、改表记录;
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。(是为了学习方便,从DML中分离出来的)
SQL的语法有以下要求:
SQL语句可以单行或多行书写,以分号结尾;
可使用空格和缩进来增强语句的可读性;
MySQL数据库的SQL语句不区分大小(默认),官方一般建议使用大写,例如:SELECT * FROM user。(因为大写可读性太差,一般开发人员会以小写测试,正式放在代码上都用大写)


数据操作语言:

创建数据库
1.使用默认的字符集与校对
create database 数据库名;
2.可以指定数据库字符
create database 数据库名 CHARACTER set gbk;
3.可以指定数据库字符与校对
create database 数据库名 character set 编码 COLLATE 校对
查看当前数据库服务器下所有数据库
show databases;
查看数据库字符集的语句
show create database 数据库名;
修改数据库操作我们很少使用,了解一下语法就可以。
修改数据库的编码集
alter database 数据库名称 character set 编码 collate 校对
删除数据库
drop database 数据库名
其他:
1.切换数据库
use 数据库名称
2.查看当前所使用的事数据库
select database();

数据操作语言

JAVA和MYSQL中的数据的对比

JAVA

MYSQL

byte

TINYINT

short

SMALLINT

int

INT

long

BIGINT

Java---mysql浮点型对比

JAVA

MYSQL

float

float

double

double

BigDecimal

Decimal

Java---mysql布尔型对比

JAVA

MYSQL

boolean

bool

Java---mysql字符及字符串对比

JAVA

MYSQL

Char

Char/varchar

String

Char/varchar

CharVarchar的区别:

Char

Varchar

char创建时可以指定长度,也可以不指定,默认为1

Varchar创建时必须指定长度否则报错

char是一个固定长度字符串,指定长度后,

如果字符串小于指定长度,那么在存储时尾部填充空格以达到指定长度,然后再保存。(检索时,检索到的char值会删除尾部空格)。

超出指定长度无法存储

Varchar是一个可变长度字符串,指定长度后,

如果字符串小于指定长度那么存储时正常存储,尾部不填充空格。

超出指定长度无法存储

Char检索效率极高但占用空间大

Varchar检索效率极低但因为不填充空格对空间占用较小

Java---mysql日期对比:

JAVA

MYSQL

java.sql.Date

Date

只能保存年月日 2015-07-07

默认为NULL

java.sql.Time

Time

只能保存时分秒 15:49:55

默认为NULL

java.sql.TimeStamp

Timestamp

它代表的是一个时间戳

2015-07-07 15:49:55

如果不设置值默认为当前系统时间

(时间戳有效日期 1970-01-01 00:00:00 ~ 2037-12-31 23:59:59

DateTime

格式为2015-07-07 15:49:55

默认为NULL。

MySQL中的常用数据类型:

类型

描述

int

整型,和java中的int类型一样;

double

浮点型,例如double(5,2)表示该列存放的数据最多是5位,而且其中必须有2位小数,它的最大值是:999.99

decimal

浮点型,用于保存对准确精度有重要要求的值,例如与金钱有关的数据。

char

固定长度字符串类型,如果没有指定长度,默认长度是255,如果存储的字符没有达到指定长度,mysql将会在其后面用空格补足到指定长度;

varchar

可变长度字符串类型,它的长度可以由我们自己指定,它能保存数据长度的最大值是65535,如果存储的字符没有达到指定的长度,不会补足到指定长度;

tinytext

可变长度字符串类型,其存储范围是28-1B

text

也是可变长度字符串类型,其存储范围是216-1B

mediumtext

也是可变长度字符串类型,其存储范围是224-1B

longtext

也是可变长度字符串类型,其存储范围是232-1B

tinyblob

是可变长度二进制类型,其存储范围是28-1B

blob

是可变长度二进制类型,其存储范围是216-1B

mediumblob

也是可变长度二进制类型,其存储范围是224-1B

longblob

也是可变长度二进制类型,其存储范围是232-1B

date

日期类型,格式为yyyy-MM-dd,只有年月日,没有时分秒;

time

时间类型,格式为hh:mm:ss,只有时分秒,没有年月日;

timestamp

时间戳类型,格式为:yyyy-MM:dd hh:mm:ss,年月日,时分秒都有。

创建数据表:
1.创建表---使用默认的字符集与校对
create table 表名(
字段1 类型,
字段2 类型,
.....
);
2.创建表--指定字符集与校对
create table 表名(
字段1 类型,
字段2 类型,
.....
) character set 字符集 collate 校对;
创建数据表约束:
主键约束
创建主键:
1.在创建表时,在字段后面加上 primary key.
create table tablename(
id int primary key,
.......
)
2.也可以表创建的最后来指定主键
create table tablename(
id int,
.......
primary key(id)
)
删除主键:alter table tablename drop primary key ;

外键约束
不经常用到
非空约束
当前列的值不能为空。 后面加 not null
唯一约束
当前列的值不为重复. 后面加unique
默认约束
为当前列设置默认值。后面加 default 值
Check约束(mysql不支持)

查看数据表
查看表结构
desc 表名;
查看当前数据库下所有表
show tables;
查看表的字符编码集
show create table 表名;

修改表的结构
语法格式:alter table 表名 关键字 ….;
关键字有以下几个:
1.add----添加列操作 alter table 表名 add 列名 类型;
2.modify--修改列的类型 alter table 表名 modify 列名 类型;
3.drop --删除列 alter table 表名 drop 列名.
4.change--修改列名及类型 alter table 表名 change 旧列名 新列名 类型;
修改表的名称
rename table 旧表名 to 新表名;
修改表的字符编码集
alter table 表名 character set 字符集;
删除数据表
drop table 表名;

数据库的表数据操作(DML)
插入表数据(INSERT)
格式
指定列名:
insert into 表名(列名1,列名2) values(列值1, 列值2);
表名后面是当前表中部分字段名称
不指定列名:
insert into 表名 values(列值1, 列值2, ...);
没有给出要插入的列,那么表示插入所有列;
值的个数必须是该表的列的个数;
值的顺序,必须与表创建时给出的列的顺序相同。
插入操作注意事项
插入的数据应与字段的数据类型相同
数据的大小应该在列的长度范围内
在values中列出的数据位置必须与被加入的列的排列位置相对应。
除了数值类型外,其它的字段类型的值必须使用引号引起。
如果要插入空值,可以不写字段,或者插入 null.
注意:对于自动增长的列在操作时,直接插入null值即可.
对于Timestamp类型,直接插入null值即可插入当前系统时间。

修改表数据(UPDATE)
格式
一般格式:
update 表名 set 字段1名称=值 ,字段2名称=值,...;
注:以上会将所有记录中的字段值都进行修改。开发中一般不使用。而实际开发中的修改操作都是有条件修改

有条件修改:
update 表名set 字段1名称=值 ,字段2名称=值,...where 条件.

删除表数据(DELETE)
格式
一般格式:
delete from 表名.
注:以上会将所有记录都删除。开发中一般都是有条件删除
有条件删除:
delete from 表名 where 条件.
删除操作注意事项
drop table 表名 --------删除表结构。
delete from 表名 ----------删除表记录(逐条)
truncate表名 ---------删除表结构,并重新创建表结构

查询表数据(SELECT)DQL

查询所有字段数据
select * from 表名;
注意:使用"*"在练习,学习过程中可以使用,在实际开发中,不建议使用。会严重消耗性能及阅读不方便
查询指定字段
select 字段1,字段2,...from 表名;
去掉重复记录
select distinct 字段 from 表名;
distinct它的作用是去除重复.
使用别名
Select 字段名 as 别名
使用as 别名可以给表中的字段,表设置别名。不对表中结构进行修改。as可以省略
查询中的列运算
字段+四则运算符号+运算数
例如: sal+100
ifnull函数 虑空函数
在对数值类型的列做运算的时候,如果做运算的列的值为null的时,运算结果都为null,为了解决这个问题可以使用ifnull函数
例如:ifnull(sal,0) 意思是如果字段sal某一条记录为null,那么将其作为0返回


where子句
我们在开发中,使用select操作,一般都是有条件查询,那以我们介绍一下关于where子句的使用

格式
select 字段 from 表名 where 条件;
where子句条件种类
1、比较运算符
>
>=
<
<=
=
!= 或者<>
2、逻辑运算符
and 条件交集
or 条件并集
not 条件取反
3、between…and…
区间取值
相当于>= and <=
注意:between 后面的值必须是小值 and后面的是大值
左右包含
4、in
可以比较多个值
格式:字段 in( );
相当于 or or or ……
5、null值操作
对于null的判断只能用以下语句:
is null; 判断为空
is not null; 判断不为空(not 字段 is null)
数据库中null值不能使用=号比较

6、like
模糊查询
通配符使用:
1.% 匹配所有 其中%放在字符前后任意位置,表示0个或者多个字符
2._ 匹配一个任意字符 __表示一个字符,任意一个字符,对于个数有限制

order by 排序
格式
在开发中,我们从数据库中查询出的数据经常需要根据某些字段进行排序,可以使用order by关键字,后面跟的就是要排序的列
格式:
order by 字段名asc 升序 (默认)
order by 字段名desc 降序
多个字段排序:
order by 字段名1 desc,字段名2 asc.
按照字段1降序,如果字段1值相等,则按照字段2进行升序排序

注:order by 子句是select的最后的一个子句。

分组函数(聚合函数)
分组函数又名 聚合函数、聚集函数
分组函数是在不同的组中进行函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

五个聚合函数:
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;如果是NULL,那么忽略;

max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算(字符串排序无意义);如果是NULL,那么忽略;

min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算(字符串排序无意义);如果是NULL,那么忽略;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;如果值为NULL,那么忽略;所以要事先有一个虑空操作ifnull(字段,0)

分组查询
分组查询是指 在查询时对 数据记录 根据某一字段 进行组别划分,字段值相同划分成一组。
格式
group by 字段名
将查询出来的记录按照 指定字段 进行 分组,字段值相同的划分成为一组。
having子句
对分组后的数据进行筛选过滤,类似于where
group by 字段名 having 条件;

查询总结
综合查询相关关键字:
select,from,where,group by,having,order by;它们的执行顺序是如下:
from:首先执行from,找到要查询的emp表;
where:判断条件,筛选出工资大于15000的所有记录;
group by:根据以上关键字执行的结果上对记录按照指定列进行分组
having:对分组后的信息进行筛选;
select:选择所需要的列信息;
order by:对查询信息进行排序。
在SQL语言中,第一个被处理的子句是from字句,尽管select字句最先出现,但是几乎总是最后被处理。

补充:
limit的使用:、
格式:放在orderby后边
limit ? ?
第一个参数的意思是查询多少个,第二个参数的意思是从哪里开始查询一般配合
用 DESC 表示按倒序排序(即:从大到小排序)
用 ACS 表示按正序排序(即:从小到大排序)

基本上所有的数据库语言都是大同小异,原理和思想都是一样的,无论是开发服务器也好还是开发前段应用也好,甚至是其他用到服务器的领域灵活使用才是重点


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP