目录
一. 图形化工具
1. 介绍
2.3.2 安装
2.3.3 MySQL图形化管理工具使用
二. 表操作
2.1 MySQL-DDL-表结构操作-创建
2.3.1 创建表结构
2.3.1.2 约束
2.2 MySQL-DDL-表结构操作-数据类型
数值类型
字符串类型
日期时间类型
2.3.1 MySQL-DDL-表结构操作-查询&修改&删除
2.3.2 表结构的查询
2.3.3 修改
2.3.4 删除
小结:
前面学习了DDL中关于数据库操作的SQL语句,在编写这些SQL时,都是在命令行当中完成的。在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点:
在项目开发当中,通常为了提高开发效率,都会借助于现成的图形化管理工具来操作数据库。
目前MySQL主流的图形化界面工具有以下几种:MySQL客户端工具-图形化工具
我们只需要熟悉这众多工具当中的一个就可以了,因为其它工具的使用都大同小异。
DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL 的理想解决方案。
说明:DataGrip这款工具可以不用安装,因为Jetbrains公司已经将DataGrip这款工具的功能已经 集成到了 IDEA当中,所以我们就可以使用IDEA来作为一款图形化界面工具来操作Mysql数 据库。
2.2.3.1 连接数据库
1、打开IDEA自带的Database
2、配置MySQL
3、输入相关信息
4. 驱动下载完成之后, 点击 Test Connection。 如果显示 Successed 就说明连接成功了。 然后点 击 OK 按钮,连接数据库。
5、测试数据库连接
4.3 展示所有数据库
默认情况下,连接上了MySQL数据库之后, 数据库并没有全部展示出来。 需要选择要展示哪些数据库。具体操作如下:
2.2.3.2 操作数据库
创建数据库:
- 有了图形化界面工具后,就可以方便的使用图形化工具:创建数据库,创建表、修改表等DDL操作。
- 其实工具底层也是通过DDL语句操作的数据库,只不过这些SQL语句是图形化界面工具帮我们自动完成的。
查看所有数据库:
如果我们使用了图形化界面工具,我在这个console控制台当中所编写的sql语句,我将这个标签页一关,下一次怎么找到之前所编写的SQL呢?
总结:通过图形化工具来简化数据库的操作,从而来提高开发效率。
学习完了DDL语句当中关于数据库的操作之后,接下来我们继续学习DDL语句当中关于表结构的操作。
关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。
重点掌握创建表结构的基本语法,以及在建表的时候如何位字段来添加对应的约束。
2.3.1.1 语法
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释 ],
字段2 字段2类型 [约束] [comment 字段2注释 ],
......
字段n 字段n类型 [约束] [comment 字段n注释 ]
) [ comment 表注释 ] ;
注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号
案例:创建tb_user表
对应的结构如下:
-- DDL:表结构
-- 创建:基本语法
create table tb_user(
id int comment 'ID,唯一标识', # id是一行数据的唯一标识,不能重复
username varchar(20) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户表';
数据表创建完成,接下来我们还需要测试一下是否可以往这张表结构当中来存储数据。
双击打开tb_user表结构,大家会发现里面没有数据:
添加数据:
此时我们再插入一条数据:
我们之前提到过:id字段是一行数据的唯一标识,不能有重复值。但是现在数据表中有两个相同的id值,这是为什么呢?
其实我们现在创建表结构的时候, id这个字段我们只加了一个备注信息说明它是一个唯一标识,但是在数据库层面呢,并没有去限制字段存储的数据。所以id这个字段没有起到唯一标识的作用。
想要限制字段所存储的数据,就需要用到数据库中的约束。
导学:掌握各种约束以及约束的具体作用
概念:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据,用来限制这个字段 当中所存储的数据的。
作用:就是来保证数据库当中数据的正确性、有效性和完整性。
在MySQL数据库当中,提供了以下5种约束:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,自带非空且唯一(索引) | primary key(auto_increment自增) |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认约束当中所指定的默认值 | default |
外键约束 | 让两张表的数据建立连接,从而保证数据的一致性和完整性 | foreign key |
主键自增:auto_increment,在图形化界面工具当中叫做:Auto inc
每次插入新的行记录时,数据库自动生成id字段(主键)下的值
具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)
案例:创建tb_user表
对应的结构如下:
要求在上述的表结构中:
-- 创建:基本语法(约束)
create table tb_user(
id int primary key auto_increment comment 'ID,唯一标识', # id是一行数据的唯一标识,不能重复
username varchar(20) not null unique comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) default '男' comment '性别'
) comment '用户表';
在运行之前删除刚才所创建的表结构,然后再来执行新创建的表。
导学:创建表结构的时候所需要指定的字段的数据类型以及各种数据类型之间的区别是什么,以 及如何来选择合适的数据类型。
char()和varchar()都是用来描述字符串的,这两种数据类型之间又有什么区别呢?
掌握MySQL当中常见的数据类型以及它们的区别:
在上面建表语句中,我们在指定字段的数据类型时,用到了int 、varchar、char,那么在MySQL中除了以上的数据类型,还有哪些常见的数据类型呢? 接下来,我们就来详细介绍一下MySQL的数据类型。
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
在SQL语句当中,字符串以及日期时间类型都需要引号引起来,单引号双引号都可以。
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT / tinyint | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT / smallint | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT / mediumint |
3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER int / integer |
4bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT / bigint | 8bytes | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
FLOAT / float | 4bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE / double | 8bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL / decimal | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
unsigned:无符号的,无符号整数
在进行浮点数运算的时候是很容易出现精度损失问题的,所以在JDK当中给我们提供了一个类叫做BigDecimal,而在MySQL当中也给我们提供了一种数据类型,叫做Decimal,这种数据类型它在底层是以字符串的形式来处理小数的,这样就可以避免精度损失。
在指定float,double,decimal这三种数据类型的时候,需要指定两个参数,分别是整个数字的长度(整数位 + 小数位)以及小数位个数。
所谓整个数字长度指的是整数位+小数位,小数位也就是说最多只能保留x位小数
示例:
年龄字段 ---不会出现负数, 而且人的年龄不会太大
age tinyint unsigned
分数 ---总分100分, 最多出现一位小数
score double(4,1)
我们要尽可能在业务允许的情况下选择占用磁盘小的数据类型,这样就可以节省磁盘空间。
类型 | 大小 | 描述 |
---|---|---|
char | 0-255 bytes | 定长字符串(需要指定长度) |
varchar | 0-65535 bytes | 变长字符串(需要指定长度) |
TINYBLOB / tinyblob |
0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT / tinytext | 0-255 bytes | 短文本字符串 |
BLOB / blob | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT / text | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
char(10) --- 定长字符串: 最多只能存10个字符,如果超出十个字符它直接报错,如果不足10个字符,它也会占用10个字符空间,其它空位它会使用空字符来占位。举例,如果你存储的是AB,它依然占用十个空间,其它的八位它也会使用空字符来占位,也就是说,只要你存储的字符数是小于等于10的,全部占十个空间,而如果你存储超过了十个字符,它就直接报错了。
varchar(10) --- 变长字符串:最多只能存10个字符,如果超出十个字符它直接报错,如果不足10个字符, 它需要判断字符的长度,按照实际长度存储。举例:假如说我就存储一个A,它就只会占用一个字符空间;如果存储的是AB,它就会占用两个字符空间;如果存储的是ABC,它就只会占用三个字符空间。varchar()最大容量为65535个字节!
char()与varchar()区别:
char 与 varchar 都可以描述字符串:
对于下面这些数据类型,主要是分为两类:一个是blob后缀,一个是text后缀。
如果是blob后缀,存储的是二进制的数据,比如我们要存储一些视频,音频这些文件,我们就可以使用blob后缀的这种数据类型。而在真实的企业开发当中,像图片,音频,视频这些文件,其实并不会直接存储在数据库当中,而是存储在专业的文件服务器当中,所以blob后缀的这些数据类型其实也是非常少用的。
而text后缀它是存储的是文本字符串。比如我们要存储一篇长篇小说,那我们就可以使用带text后缀的这些数据类型。
而不同的数据类型它能够支持的存储范围也是不一样的。
示例:
用户名 username ---长度不定, 最长不会超过20
username varchar(20)
手机号 phone ---固定长度为11
phone char(11)
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901 至 2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
示例:
生日字段 birthday ---生日只需要年月日
birthday date
创建时间 createtime --- 需要精确到时分秒
createtime datetime / update_time datetime
2.3.1.4 案例
导学:怎么样基于图形化界面的方式去创建表结构 ?我们怎么样去设计一张表,设计一张表的基 本依据和流程是什么?
表结构创建的语法、约束以及数据类型都已经学习完了,接下来就来完成一个案例,通过这个案例要能够掌握图形化工具的方式来创建表结构,并清楚表结构的设计依据以及基本流程。
需求:根据产品原型/需求创建表(设计合理的数据类型、长度、约束)
案例需求:根据页面原型以及需求来创建表,为这张表结构要设计合理的数据类型,合理的字段 长度以及约束。
产品的页面原型及需求文档如下:
在新增员工这个对话框当中承载了这么一个form表单:
需求文档我们要设计的这张表是用来存储员工信息的,也就是员工表。那我们要设计这张表,我们就得清楚这张表当中包括哪些字段,各个字段的类型,字段的长度限制,字段的约束。
所以,我们在设计表结构的时候只需要根据页面原型以及需求文档当中的这些描述来定义表结构当中的字段以及约束就可以。
步骤:
我们创建一张表上来之后,我们先加一个字段就是id,id就是这一行数据的唯一标识,comment:主键ID。
使用SQL创建表:
create table emp (
id int unsigned primary key auto_increment comment 'ID',
username varchar(20) not null unique comment '用户名',
password varchar(32) default '123456' comment '密码',
name varchar(10) not null comment '姓名',
gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
image varchar(300) comment '图像',
job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
entrydate date comment '入职时间',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间'
) comment '员工表';
直接基于图形化界面方式来操作这也是现在企业项目开发当中创建表结构的主要方式。
除了使用SQL语句创建表外,我们还可以借助于图形化界面来创建表结构,这种创建方式会更加直观、更加方便。
操作步骤如下:
1. 在指定操作的数据库上,右键New ==> Table
2. 编辑表结构的相关信息
我们创建一张表上来之后,我们先加一个字段就是id,id就是这一行数据的唯一标识,comment:主键ID。
为该字段添加注释信息2.3.1.5 设计表流程
说明:
update_time --- 修改 / 更新时间:记录当前这条数据最后更新的时间。
我们每一次更新这条数据,都需要将update_time更新为当前时间。
通过上面的案例,我们明白了,设计一张表,基本的流程如下:
表结构的查询,修改和删除操作:对于这一部分的DDL语句,可以不做重点掌握,但是需要掌握的是图形化界面的操作方式。
表结构的查询这里涉及到三条SQL语句:
-- DDL:查看表结构
-- 查看:查询当前数据库下所有的表
show tables;
-- 查看:查看指定表的表结构
desc tb_emp;
-- 查看:数据库的建表语句
show create table tb_emp;
查询当前数据库所有表:show tables;
查看指定表结构:desc 表名 ;
desc 表名 ; 查看指定的表结构
可以查看指定表的字段、每个字段的类型以及这个字段是否可以为NULL / 存null值,以及这个字段是否存在 / 有默认值等信息。
查询指定表的建表语句:show create table 表名 ;
-- DDL:修改表结构
-- 修改:为表 tb_emp 添加字段 qq varchar(11)
alter table tb_emp add qq varchar(11) comment 'QQ';
-- 修改:修改 tb_emp 字段类型 qq varchar(13)
alter table tb_emp modify qq varchar(13) comment 'QQ';
-- 修改:修改 tb_emp 字段名 qq 为 qq_num varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment 'QQ';
-- 修改:删除 tb_emp 的 qq_num字段
alter table tb_emp drop column qq_num;
-- 修改:将tb_emp 表名修改为emp
rename table tb_emp to emp;
添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
案例: 为tb_emp表添加字段qq,字段类型为 varchar(11)
alter table tb_emp add qq varchar(11) comment 'QQ号码';
图形化操作:添加字段
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
案例:修改qq字段的字段类型,将其长度由11修改为13
alter table tb_emp modify qq varchar(13) comment 'QQ号码';
案例:修改qq字段名为 qq_num,字段类型varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment 'QQ号码';
图形化操作:修改数据类型和字段名
删除字段
alter table 表名 drop 字段名;
案例:删除tb_emp表中的qq_num字段
alter table tb_emp drop qq_num;
图形化操作:删除字段
修改表名
rename table 表名 to 新表名;
案例:将当前的tb_emp表的表名修改为emp
rename table tb_emp to emp;
图形化操作:修改表名
关于表结构的删除操作,工作中一般都是直接基于图形化界面操作。
drop table [ if exists ] 表名;
- if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。
- 注意:当我们在删除表结构的时候,表中的全部数据也都会被删除。
案例:如果tb_emp表存在,则删除tb_emp表
drop table if exists tb_emp; -- 在删除表时,表中的全部数据也会被删除。
图形化操作:删除表
至此数据库设计部分的基础内容学习完毕!