大家好,这次给大家带来的是我的新的专栏:数据库,数据库相对来说难度不是那么高,大家只要勤加练习、熟记语法,我相信学好数据库不是什么问题,博主会从0剖析,逐步讲解数据库的知识点,并且会举很多实例。最重要的是,博主不会采用软件,使用最原始的方式 -> 命令行来讲解,这样讲解的好处是逐个语句进行书写,不会造成读者思路跟不上的问题!
QQ:162196770
微信:PRIDE_Xu_
Gitee:https://gitee.com/jialebihaitao
上一篇博客传送门:
下一篇博客传送门:
文章专栏:
B站:建设中,以后会考虑在B站上讲解一些知识点等等
我们其实已经介绍过一遍了 , 再重新给大家介绍一下
注意:
不是所有的数据,都是按照表格的方式来组织数据的
像
Oracle、MySQL、SQL Server
都是按照表格的形式来组织数据的,称为关系型数据库像
Redis、HBase、MongoDB
这种的都不是按照表格方式组织的(类似于 文档/键值对),称为非关系型数据库
有了数据库之后,要想真的去存储、组织数据,还需要数据表。创建表的时候就需要指定表结构,表结构中就涵盖了有哪些字段,以及每个字段的类型是什么?
数据类型一方面能够方便我们对数据进行处理 , 一方面也能够针对数据进行校验和检查 .
数据类型 | 大小 | 说明 | 对应java的类型 |
---|---|---|---|
bit[(m)] | m指定位数,默认为1 | 二进制数,M范围从1到64,存储范围从0到2^M-1 | 常用Boolean对应bit,此时默认是1位,即只能存0/1 |
tinyint | 1字节 | Byte | |
smallint | 2字节 | Short | |
int | 4字节 | Integer | |
bigint | 8字节 | Long | |
float(m,d) | 4字节 | 单精度,m指定长度,d指定小数点后面的位数,会发生精度丢失 | Float |
double(m,d) | 8字节 | 双精度,m指定长度,d指定小数点后面的位数,会发生精度丢失 | Double |
decimal(m,d) | m/d最大值+2 | 双精度,m指定长度,d表示小数点位数.精确数值 | BigDecimal |
numeric(m,d) | m/d最大值+2 | 双精度,m指定长度,d表示小数点位数.精确数值 | BigDecimal |
这里面的 (m,d) 实际上表示的就是总共有 m 位 , 小数点后面有 d 位
比如 : decimal(3,1) ,满足这个条件的数字 比如 : 98.3 , 54.9
decimal 比 double / float 更能精确的保存浮点数 , 因为它是通过字符串的方式来进行存储的 . 不过就是计算的时候消耗的时间更多 , 存储空间消耗的越多 . 平常用 double 就足够了 . 特别需要的时候再考虑 decimal
数据类型 | 说明 | 对应Java类型 |
---|---|---|
varchar(size) | 可变长度字符串 | String |
text | 长文本数据 | String |
mediumtext | 中等长度文本数据 | String |
BLOB | 二进制形式的长文本数据 | byte[] |
说明:
varchar
可以根据实际需要,来指定要占用多大内存空间(size
的单位是字符,不是字节,一个字符可能有多个字节构成)
比如 : varchar(25) 代表的就是这个字段最多可以存储25个字符 , 动态的根据存储的数据长度来去自动适应空间
BLOB
用于表示二进制的数据
MP3
文件、jpg
文件、.class
文件都属于二进制文件
txt
、.java
、.c
都属于文本文件在 C 语言阶段 , 我们学习过文件操作
fopen()
rb 读方式打开二进制文件
rt 读方式打开文本文件
一个需要记下来的小知识点
一个字节可以表示的整数 : -128 ~ + 127
无符号 : 0 ~ +255
两个字节可以表示的整数 : -32768 ~ + 32767
无符号 : 0 ~ + 65535
四个字节可以表示的整数 : -21亿 ~ +21亿
无符号 : 0 ~ +42亿九千万
数据类型 | 大小 | 说明 | 对应Java规则 |
---|---|---|---|
datetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |
那么有一个小问题:日期在数据库当中能不能用varchar
进行存储?
当然可以,不过不太好(有现成的还用啥
varchar
)如果使用
varchar
,就失去了对于日期正确性的校验功能了使用
datetime
如果插入的数据格式不符合要求,就会直接提示咱们推荐输入格式:2022-04-29 21:37:00
这两个数据类型,都可以存储年月日时分秒
小故事:
timestamp:意思是时间戳(以1970年1月1日0时0分0秒作为基准时刻,来计算当前时刻和基准时刻的秒数/毫秒之差~)
我们目前
timestamp
是4个字节,到2038年,4个字节就不够用了之前有个千年虫事件:以前计算机表示年份只有2位,即90、91、92…年,到了2000年就完蛋了,不够存了,程序员连续加班终于把这个问题给解决掉了!这样才没出现问题。
语法:
create table 表名(列名 类型,列名 类名...);
在进行表的操作之前,要先选中数据库(use
操作)
和常见的其它编程语言不同 , SQL 中的变量是定义在名字后面的 , 我们要区分清楚 .
现在也有很多语言是这样的定义方式 , 比如 Go 语言 , Python 语言 .
创建表的时候 , 我们要明确表的结构 . 也就是需要有哪些列 每一列的数据类型 每一列叫啥名 以及相关约束等等
注意 : 在同一个数据库当中 , 不能有重名的情况 .
语法:
show tables;//与 show databases 类似
查看某个表里面有几列,每一列都是啥类型,每一列是啥名字,以及每一列的补充信息
语法:
desc 表名;
这里面的desc
其实就是describe
(描述)
当然我们也可以写成这样
describe 表名;
语法:
drop table 表名;
注意:
删除表也是一个高危操作!!!跟数据库被删了都一样可怕!
甚至删表操作比删库操作还要可怕 !
表面上来看,删除数据库直接就玩完 . 但是我们删除了表的话 , 短时间内或者一直都不会报错 . 但是因为缺失了这个表 , 到时计算出来的数据都是错误的 , 而且排查起来也很困难 . 当前的状态其实就是 “带伤作战”
两种方式:(推荐方式二)
方式一:创建表的时候,可以使用
comment
来给某个列后面加上注释方式二:–空格
这个是更普遍的注释方式
-- 注释
接下来,我们来做一个小练习熬~ 很简单~~~
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
- 商品
goods
(商品编号goods_id
,商品名goods_name
, 单价unitprice
, 商品类别category
, 供应商provider
)- 客户
customer
(客户号customer_id
,姓名name
,住址address
,邮箱sex
,身份证card_id
)- 购买
purchase
(购买订单号order_id
,客户号customer_id
,商品号goods_id
,购买数量nums
)
首先,我们要知道:
在SQL
当中,"钱"有两种表示方式
使用decimal
使用int
!这个更常用一些!而且效率也比decimal
高很多
用 int 代替小数 , 这时候单位是 分 , 就相当于把小数转化成整数了
然后,我推荐大家在敲一个比如这样的容易出错的语句的时候,使用记事本敲完再复制进去,这样错误率会大大降低,而且会好更改。我个人用的是Sublime Text3
。要清楚的是 , 在cmd
当中,复制不再是ctrl+c
,选中你想复制的内容,回车就已经复制了,ctrl+c
是当你输错了不想在输入的时候,输入ctrl+c
就可以了 , 终端输入也可以输入 \c
。
Sublime Text3传送门
具体操作如下:
那么我有个小问题:
这里面的数字为啥是50或者10?
其实现在我们自己日常学习的时候随便写,别太离谱就行。
等到上班的时候,这个数就是产品经理指定的了 .
产品经理的工作就是分析老板 / 用户的需求 , 调查清楚了把它交给程序员 , 程序员按照给定的标准进行设计
工作时候 , 大家都叫 产品经理 “产品”
下面我把代码贴过来~
create table goods (
goods_id int,
goods_name varchar(50),
unitprice int,
categoory varchar(50),
provider varchar(50)
);
create table customer (
customer_id int,
name varchar(50),
address varchar(50),
email varchar(50),
sex varchar(10),
card varchar(50)
);
create table purchase (
order_id int,
customer_id int,
goods_id int,
nums int
);
最后最后,再给大家推荐一个命令行工具,我也是刚开始使用,初步体验不错。(下载不了的话去微软商店搜索windows terminal
即可)
windows terminal
在windows terminal
中操作数据库的命令:
mysql -u root -p