对于如何登录数据库、如何选择数据库以及如何设置权限等问题暂时先不考虑。先假定已经登录了数据库,接下来本文介绍数据定义语言,即DDL。
1. 概述
数据库管理系统顾名思义就是管理数据库,那么在连接数据库之后,对数据库怎么管理呢?管理方法其实也很简单,无非就是数据库的创建和删除,数据表的创建和删除,数据的创建和删除等等。类似计算机网络自定向下的方法,本文首先介绍数据库结构层面的操作:DDL。
数据定义语言主要包括数据库的创建删除、表的创建删除、字段的创建删除及其附属SQL语句等等。
2. DDL
注意,数据库管理系统包括多个数据库,而数据库中有多个数据表。数据表的相关操作在语法上已经指定了所操作的数据表,但是没有指明是哪个数据库,所以在进行数据表的相关操作之前,需要提前指定数据库(use 数据库名;
),即后续数据表的操作都默认是在指定数据库下的表中。
2.1 数据库方面的DDL
主要的数据库方面的SQL语句如下所示:
SQL语句 | 描述 |
---|---|
show databases; |
显示所有的数据库(默认自带4个) |
create database 数据库名; |
创建数据库 |
drop database 数据库名; |
删除数据库 |
use 数据库名; |
选择使用指定的数据库 |
select database(); |
查看当前使用的数据库 |
show create database 数据库名; |
显示创建数据库时的SQL语句 |
2.2 数据表方面的DDL
主要的数据表方面的SQL语句如下所示:
SQL语句 | 描述 |
---|---|
show tables; |
显示当前使用的数据库下所有的表 |
desc 表名; |
显示该表的所有字段以及数据类型、主键等信息 |
drop table 表名; |
删除表(如果表不存在会报错) |
drop table if exists 表名; |
删除表(如果表不存在不会报错) |
show create table 表名; |
显示创建数据表时的SQL语句 |
由于创建表的语法比较冗长,所以单独表示出来,语法如下:
1 | create table 表名( |
其中(注意,如果有中文需要设置字符编码格式):
- 表名建议以**t_或者tbl_**开始,可读性强,见名知意;
- 字段名见名知意;
1 | create table tbl_student( |
下图是上表的描述信息:
2.3 修改表方面的DDL
修改表指的是修改表的结构,就是对字段的添加、删除和修改等等。注意,在实际的开发过程中,需求一旦确定之后,表一旦设计好之后,很少进行对表结构的修改,因为在开发进行的过程中,修改表结构成本比较高,这个责任应该由设计人员来承担。所以修改语句只需要了解即可。
SQL语句 | 描述 |
---|---|
alter table 表名 add 字段名 数据类型; |
向指向表中增加字段 |
alter table 表名 drop 字段名; |
删除字段 |
alter table 表名 change 原始字段名 修改字段名 数据类型 |
修改字段名 |
alter teble 表名 modify 字段名 属性; |
修改字段属性 |
2.4 字段的数据类型
和程序一样,既然是对数据的处理,那么就需要规定数据的类型。MySQL规定了很多种数据类型,只需要掌握一些常见的数据类型即可。
数据类型 | 含义 |
---|---|
varchar(n) | 可变长度的字符串,存储数据的长度最长为n,动态分配空间,速度慢,n最长为255。 |
char(n) | 定长字符串,直接分配长度为n的空间,可能导致空间浪费,速度快,n最长为255。 |
int(n) | 数字中的整数型,等同于Java中的int,最长为11位(默认),n表示建议长度。 |
bigint | 数字中的长整型,等同于Java中的long。 |
float | 单精度浮点型数据 |
double | 双精度浮点型数据 |
date | 短日期类型(年月日) |
datetime | 长日期类型(年月日时分秒) |
enum | 枚举类型 |
clob(Character Large OBject) | 字符大对象,最多可存储4G的字符串,比如存储一篇文章。(实际上MySQL用text表示该类型) |
blob(Binary Large OBject) | 二进制大对象,专门用来存储图片、声音、视频等流媒体数据。 |
注意:
- varchar和char我们应该怎么选择?
- 性别字段,因为性别字段都是固定长度的字符串,所以选择char或者枚举类型。
- 姓名字段,因为每一个人的名字长度不同,所以选择varchar。
- 往blob类型字段中插入数据的时候,例如插入一个图片、视频等,需要使用 IO流 才行。
- 注意,在测试过程中,发现 “int后面加数字表示数字的位数” 这种方法将要弃用。
3. 简单案例
3.1 案例1
一张表 t_move,电影表,专门存储电影信息。字段如下:
- no(bigint):编号
- name(varchar):名字
- history(clob):故事情节
- playtime(date):上映日期
- time(double):时长
- image(blob):海报
- type(char):电影类型
注意,MySQL中用text类型表示clob。
SQL语句如下所示:
1 | create table t_movie( |
3.2 案例2
一张学生表 t_student,专门存储学生信息。字段如下:
- no(bignit):学号
- name(varchar(32)):名字
- age(int(3)):年龄
- email(varchar(255)):邮箱地址
1 | create table t_student( |
4. 备注
参考B站《动力节点》。