MySQL数据库基础
一、数据库介绍
1.1 什么是数据库
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
为了解决上述问题,专家们设计出更加利于管理数据的软件——数据库,它能更有效的管理数据。数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器。
1.2 数据库分类
数据库大体可以分为 关系型数据库 和 非关系型数据库。
- 关系型数据库(RDBMS):
是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系
统。收费。 - MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
- 非关系型数据库:
(了解)不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value):如 memcached、redis
- 基于文档型:如 mongodb
- 基于列族:如 hbase
- 基于图型:如 neo4j
关系型数据库与非关系型数据库的 区别:
关系型数据库 | 非关系型数据库 | |
---|---|---|
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
注:OLTP(On-Line Transaction Processing)是指联机事务处理,OLAP(On-Line Analytical Processing)是指联机分析处理。
二、数据库的操作
2.1 创建数据库
create database + 数据库名字;
create database + 数据库名字 + charset utf8;
create database if not exists + 数据库名字 + charset utf8;
注意:
- 数据库名字不能为SQL关键字。
- 创建数据库的时候,还可以指定数据库的字符集(常用utf8)(utf8里面无法表示emoji表情,后来mysql又搞了个utf8mb4)。
- utf8_general_ci是不区分字母大小写的。
- 若没有指定字符集,默认是拉丁文的(不支持中文)。
- 可以在C:\ProgramData\MySQL\MySQL Server 5.7目录中修改配置文件my.ini中的配置来改变默认字符集(修改后需要保存文件:Ctrl+s;还需要重启服务器:重启就是让服务器重新加载配置文件 [服务器在“服务”中的“MySQL57”] )。
- 加上
if not exists
后,若已存在时不会报错误,而是警告(show warnings;
可查看警告信息)。
2.2 查看数据库
show databases;
注意:
除了我们自己创建的数据库,还有以上红框内的系统的数据库。
2.3 选中指定数据库
use + 数据库名字;
后续操作都是针对这个数据库来展开的。
2.4 删除数据库
drop database + 数据库名字;
删除数据库其实是非常危险的操作!这里没有“回收站”,一旦删除了库,数据就没了。
三、常用数据类型
3.1 数值类型
分为整型和浮点型:
数据类型 | 大小 | 说明 | 对应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字节 | Double | |
decimal(M,D) | M/D最大值+2 | 双精度,有效数字M位,小数点后D位。精确数值 | BigDecimal |
numeric(M,D) | M/D最大值+2 | 和decimal一样 | BigDecima |
细节:
- float和double的内存模型就决定了无法精确表示数据,存在误差;所以可以选用decimal(牺牲了存储空间和运算速度,换来了更精确的表示方式)。
- 可以用int来表示浮点型!例如在表示钱时:decimal确实可以精确表示,但是牺牲了存储空间和运行速度。是否有办法能够既快,又节省空间,还能精确?使用int来表示钱!单位换算成“分”即可。
- 常用类型:int,double,decimal。
- 相比于Java是一个“强类型”编程语言,即对于类型检查非常严格;sql则是弱类型了,就会涉及到很多的类型转换。例如decimal小数点位数的转化;字符串和数值的隐式类型转换。
拓展资料:
数值类型可以指定为无符号(unsigned),表示不取负数。
1字节(bytes)= 8bit。
对于整型类型的范围:
- 有符号范围:-2(类型字节数*8-1)到2(类型字节数*8-1)-1,如int是4字节,就
是-231到231-1- 无符号范围:0到2(类型字节数*8)-1,如int就是232-1
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
3.2 字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
varchar (size) | 0-65,535字节 | 可变长度字符串 | String |
text | 0-65,535字节 | 长文本数据 | String |
mediumtext | 0-16 777 215字节 | 中等长度文本数据 | String |
blob | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
细节:
- varchar是最常用的表示字符串的类型,带有一个参数,约定了存储的最大空间。
比如varchar(128):最多存128个字符(是根据实际需求,来决定设置多长合适,并不是你这里写了128就真的固定分配这么多空间,也会动态适应,但是内存最大不会超过这个128个字符)。 - varchar的size单位是字符,而不是字节:一个字符可能是多个字节(根据字符集)
- text和mediumtext更适合于长字符串(少见)。
- blob主要是存二进制数据。
- SQL没有字符类型,所以字符串用” “和’ ‘都可以。
3.3 日期类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
datetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |
细节:
timestamp即时间戳:我们在生成一个随机整数时有随机种子这样一个概念(伪随机),只要种子一样,每次得到的随机数序列就相同。为了让生成结果更随机,就需要让每次程序启动都设置个不同的随机种子,典型的就是“时间戳”:以1970年1月1日0时0分0秒为基准时间,计算当前时间和基准时间的秒数/毫秒数/微秒数之差。
电脑屏幕右下角都会有日期,而计算机中实际只是存了个4字节的时间戳。(timestamp到2038年,能不用就不用)
使用示例:
insert into article values('title1','2020-09-14 23:18:17');
(每个部分都是2位)
四、表的操作
4.1 创建表
create table + 表名(列名 类型,列名 类型 comment '注释',列名 类型...);
注意:
- 要想进行表操作,务必先选中数据库(先use某个数据库)。
- 同一个数据库中,不能有两个表的名字相同。(可以用
if not exists
) - 表名和列名不能与SQL关键字重复。(如果实在想这么搞,用反引号“引起来名字)
- 列名类型后加
comment
是注释,起到解释说明的作用。但是这个注释只能在创建表的时候使用,其他时候用不了,所以更建议用-- + 空格
。
4.2 查看指定数据库下的所有表
show tables;
注意: 先选中数据库。
4.3 查看指定表的结构
desc + 表名;
desc全称describe:描述。
示例:
注意:
Type下,int后括号内的“11”不是容量!而是表示显示的宽度(不影响存储)。
4.4 删除表
drop table + 表名;
删除表操作也是非常危险的!
五、快捷键
- ↑、↓ 方向键:可以得到历史命令。
- Ctrl+C:放弃之前的输入; 或者 如果某个sql执行时间太长,可以操作放弃。
- Enter:控制台中的复制。
- 鼠标右键:控制台中的粘贴。(或者Ctrl+V)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118594.html