文章目录
- 数据库的操作
- 显示当前数据库服务器上有哪些数据库
- 创建数据库
- 使用数据库
- 删除数据库
- 常用数据类型
- 数值类型
- 字符串类型
- 日期类型
- 小结(主要使用)
- 表的操作
- 创建表
- 查看表结构
- 列出当前数据库的表
- 删除表
- 注释
- MySQL创建的数据库/表存储在系统的位置
数据库的操作
- 输入的单词之间要带有空格,多个空格也可以,至少有一个
- 语句后面加上英文分号
- 关键字和函数名大小写不区分
- 本文中 [ ] 里面的内容不是必要的,可写可不写
显示当前数据库服务器上有哪些数据库
SHOW DATABASES;
这四个是MySQL自带的数据库(系统库),不要乱改
0.01sec表示花的时间在10ms到20ms之间
创建数据库
CREATE DATABASE 数据库名;
库名要求不能和SQL中的"关键字"重复
如果实在想使用"关键字"作为数据库名,可以用反引号 `` 把"关键字"引起来使用
- GBK: 使用2个字节表示一个汉字
- UTF8:变长编码,对于汉字来说一般是3个字节,还能表示世界上其他语言
GBK和UTF8都是兼容ASCll的
在创建数据库时,还可以指定字符集
CREATE DATABASE 数据库名 CHARSET 字符集名;
MySQL 5.7默认字符集是拉丁文,不支持中文,所以建议使用UTF8作为字符集,MySQL8默认就是UTF8了
一个Charset可以有多个Character Set,而一个Character Set只能属于一个Charset。
举例:
如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建
CREATE DATABASE IF NOT EXISTS db_test2;
如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建
CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;
说明:MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符和表情。MySQL真正的utf8是utf8mb4,建议大家都使用utf8mb4
创建数据库时还可以指定"校验规则"(可以认为是字符串比较时对应的规则),一般不用修改,使用默认即可
使用数据库
use 数据库名;
删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
说明:数据库删除以后,里边的表和数据全部被删除
常用数据类型
数值类型
分为整型和浮点型:
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
BIT[ (M) ] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到 2 M − 1 2^{M-1} 2M−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一样 | BigDecimal |
扩展资料
数值类型可以指定为无符号(unsigned),表示不取负数。
对于整型类型的范围:
- 有符号范围: − 2 (类型字节数 ∗ 8 − 1 ) -2^{(类型字节数*8-1)} −2(类型字节数∗8−1)到 2 (类型字节数 ∗ 8 − 1 ) 2^{(类型字节数*8-1)} 2(类型字节数∗8−1)-1,如int是4字节,就是 − 2 31 -2^{31} −231到 2 31 − 1 2^{31}-1 231−1
- 无符号范围:0到 2 (类型字节数 ∗ 8 ) 2^{(类型字节数*8)} 2(类型字节数∗8)-1,如int就是0到 2 32 − 1 2^{32}-1 232−1
- 尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
相比于float / double 来说, decimal 与numeric 存储需要消耗更多的空间,计算也需要更多的时间,但是更加精确
字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
VARCHAR (SIZE) | 0-65,535字节 | 可变长度字符串 | String |
TEXT | 0-65,535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
- VARCHAR的参数SIZE表示能存储的最大字符数,假设传入SIZE为256,VARCHAR 的大小不是固定的256个字符,可能比256少,但不会超过256
- TEXT的长度是靠"自适应"的,比较依赖自动扩容,实际开发中为了明确数据存储上限慎重使用TEXT,更多使用VARCHAR
- 要想存储更长的文本,可以考虑使用MEDIUMTEXT,但要慎重,因为效率可能比较低
- BLOB存储二进制数据(图片、音频、视频、可执行程序、.class文件…),而前三个类型是存储文本数据
日期类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |
TIMESTAMP是时间戳的意思,而这个类型只到2038年,快不能用了,所以推荐DATETIME
小结(主要使用)
表示整型:int
表示小数:double
表示字符串:varchar
表示时间日期:datetime
表的操作
需要操作数据库中的表时,需要先使用该数据库:
use 数据库名;
创建表
- 设定表名/列名时, 也不能和SQL关键字重复,如果确实需要重复,可以使用反引号 ``引起来
- 同一个数据库中,表名不能重复
CREATE TABLE 表名(列名 类型,列名 类型, 列名 类型, ......);
查看表结构
desc 表名;
- int(11)的(11)表示:在控制台显示这一列数值最多占11个字符(位宽)
- 列也可以叫做字段(Field)
- 数据库中的NULL / null表示的是这个单元格没填
列出当前数据库的表
show tables;
删除表
不仅删除表本身,也删除了表里面的数据
DROP TABLE 表名;
示例:如果存在 stu_test 表,则删除 stu_test 表
drop table if exists stu_test;
注释
这个注释只能在创建表的时候声明列
更推荐使用#
或者--
作为注释
- 注释不会存储到数据库中
- 起到的作用是解释说明
MySQL创建的数据库/表存储在系统的位置
我们可以在系统中找到数据库产生的对应目录和文件(不同电脑实际存储的位置可能不一样)
方法
开始菜单找到MySQL客户端的快捷方式 - 更多 - 打开文件位置
打开属性
属性里的目标就是双击快捷方式本质运行什么程序
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" "-uroot" "-p"
"--defaults-file=C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"
my.ini是 MySQL的配置文件,我们要找到它
Windows下是my.ini
Linux下是my.cnf
给程序猿使用的专业软件,不会像游戏设置界面那样的图形化界面进行编辑"配置项",而是直接用一个文件的方式进行呈现,这样的文件就是配置文件
C盘的ProgramData是隐藏目录,默认状态看不到
把查看 - 显示 - 隐藏的项目 勾选上就能看到
顺着路径找到my.ini,双击可能打不开,可以先打开记事本,把my.ini拖到里面就能打开了
里面有这样的配置项描述的就是数据库存储的数据是在哪里