库与基础操作
1.1 查看数据库
使用 show databases;
可以查看当前 MySQL 目前有多少个数据库
5 rows 表示有 5 行,这里是表示的是有效的数据,不包括 第一行的指引
set 表示结果集合
0.01 sec 表示这个 sql 语句一共运行了0.01 秒,一般情况下这个数值不是很准确
1.2 创建数据库
creat database (if not exists) database_name (character set charset_name) (collate collation_name);
if not exists
表示如果不存在,加了这个可以增加一些校验,
加了括号的表示是可选项,你可以写,可以不写
character set
表示字符集,我们可以指定字符集去存储字符
collate
表示排序方式
5.7 版本的MySQL 的字符集是 latin1(拉丁字符集,不支持中文字符),8.0版本支持 utf8mb4 编码(最多支持 一个字符占 4 个字节,可以保存中文字符和特殊字符例如表情包等等),不同的字符集意味着存储的字符数量不同,我们可以通过show variables like '%character%';
来查看当前我们数据库默认的字符集编码
下面是 8.0 版本:
也就是说如果你没有指定字符集和编码方式,你创建的数据库就会默认这两种方式,所以这里强烈建议开发学习者手动去指定我们创建的数据库的字符集与排列方式。
以8.0版本为例:
字符集指定为utf8mb4
排列方式可以指定为 utf8mb4_0900_ai_ci
版本过低的MySQL可能不支持 utf8mb4 的字符集编码方式
这里解释一下 ai 与 ci
ai : accent insencitive 口音不敏感
as : assccent sencitive 口音敏感
ci : case insencitive 大小写不敏感,表示无论是大写还是小写字母都认为是小写字母
cs : case sencitive 大小写敏感
在MySQL 中是 ci 模式,所以我们编写的 sql 语句不用考虑 大小写问题,都是一样的。
演示创建数据库:
query ok 表示成功
如果我们加了 if not exists
就会加一层校验,如果你重复创建数据库,MySQL 会给你自动报个警告,所以你会看到 1 warning
如果想查看警告信息,使用
show warnings;
它显示无法创建这个库,该库已经存在。
MySQL 创建数据库尽量不要使用 关键字,如果非要使用,在数据库的名称加上反引号【位于 esc 下方,tab 上方,1的左边,并且要保证在英文状态下】
如果写错sql 语句,MySQL会报错误给你:
sql syntax 表示的是语法出错了。
1.3 使用数据库
使用 use database_name;
最后一个分号加不加无所谓
1.4 删除数据库
使用drop database (if exists) database_name;
注意别乱删数据库,凡是数据库的删除操作请谨慎!!!三思而后行!!!!
数据类型
2.1 数值类型
数据类型 | 大小 | 说明 | 对应的Java类型 |
---|---|---|---|
bit[(M)] | M指定位数,默认为1 | 二进制数,M范围从1~ 64,存储数值范围为0 ~ 2^M -1 | 常用Boolean 对应 |
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 | BigDecimal | |
numeric(M,D) | BigDecimal |
M表示长度时,长度不包括符号和小数点,如果表示的是 - 3.1415926,M的长度为 8.
常用 int 表示数量,bigint 表示一串长的编码,decimal 来存储有精度要求的带小数的数据,bool 也可以表示 tinyint 表示 二选一的选项(例如gender)
数值类型可以指定为无符号(unsigned),表示不取负数。
1字节(bytes)= 8bit。
对于整型类型的范围:
1.有符号范围:-2 ^(类型字节数8-1) 到 2 ^(类型字节数8-1)-1,如 int 是 4字节,就是 -2 ^ 31 到 2 ^31-1
2.无符号范围:0到 2 ^ (类型字节数*8)-1,如 int 就是 2 ^ 32 - 1
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
2.2 字符串类型
数据类型 | 大小 | 说明 | 对应的Java类型 |
---|---|---|---|
varchar(size) | 0 ~ 65,535 个字节 | 可变长度字符串 | String |
text | 0 ~ 65,535 个字节 | 长文本数据 | String |
mediuntext | 0 ~ 16,777,215 个字节 | 中等长度文本数据 | String |
blob | 0 ~ 65,535 个字节 | 二进制形式的长文本数据 | byte[] |
重点是 varchar,一定要加上 (size)来指定最多可以保存多少个字符,一个英文字符或者一个中文字符都算一个字符,size 表示字符数,不考虑字符占多大字节
2.3 日期类型
数据类型 | 大小 | 说明 | 对应的Java类型 |
---|---|---|---|
datetime | 8个字节 | 范围从 1000 ~ 9999 年,不会进行时区的检索与转换 | java.util.Date、java.sql.Timestamp |
timestamp | 4个字节 | 范围从 1970 ~ 2038 年,自动检索当前时区并进行转换 | java.util.Date、java.sql.Timestamp |
datetime 只能精确到年月日,而 timestamp 可以精确到年月日时分秒,后面还有小数点。
建议使用 datatime ,因为 timestamp 到了 2038 会溢出,对我们的数据可能会造成影响,可以参考千年虫危机
表
需要操作数据库中的表时,需要先使用该数据库
use database_name;
3.1 创建表
语法格式:
creat table (if not exists) table_name (字段名称1 数据类型,字段名称2 数据类型,字段名称3 数据类型
);
在编写比较长的 sql 语句或者复杂的 sql 语句的时候,可以使用可视化工具。
在数据类型后面可以加上 comment ‘注释’ 【注意这里使用的是英文的单引号】
在开发过程中,加注释是其中一个重要的环节。
演示:
create table if not exists student (id bigint comment '身份证号',name varchar(50) comment '姓名',class varchar(20) comment '班级'
);
3.2 查看表结构
使用 desc table_name;
desc 是英文 describe (描述) 的缩写
演示:
Filed 表示字段名称
Type 表示字段类型
NULL:是否允许为空
Key 索引类型
Default 默认值
Extra 扩充
3.3 删除表
语法格式:
drop table (if exists) table_name, table_name,...;
可以删除一个及以上的表。
演示:
在开发中,删除表操作也要谨慎,三思而后行!!!
其他操作
使用\?
可以查看一些MySQL的基本操作:
使用 select version();
可以查看当前使用的MySQL版本:
使用 \. sql文件路径
可以执行该 sql 文件 :
注意 . 后面要加一个空格
写完路径后,不需要加分号,直接enter 允许文件即可。
查看表的数量:show tables;