MySQL_02_数据定义语句


对于如何登录数据库、如何选择数据库以及如何设置权限等问题暂时先不考虑。先假定已经登录了数据库,接下来本文介绍数据定义语言,即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
2
3
4
5
6
create table 表名(
字段名1 数据类型 [其他关键字],
字段名2 数据类型 [其他关键字],
...
字段名n 数据类型 [其他关键字]
);

其中(注意,如果有中文需要设置字符编码格式):

  • 表名建议以**t_或者tbl_**开始,可读性强,见名知意;
  • 字段名见名知意;
1
2
3
4
5
6
7
create table tbl_student(
no int,
name varchar(10),
age int,
sex enum('男', '女'),
email varchar(255)
)charset=utf8;

下图是上表的描述信息:

mysql_03.png (569×265) (gitee.io)

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
2
3
4
5
6
7
8
9
create table t_movie(
no bigint,
name varchar(20),
history text,
playtime date,
time double,
image blob,
type char
);

mysql_04.png (542×259) (gitee.io)

3.2 案例2

一张学生表 t_student,专门存储学生信息。字段如下:

  • no(bignit):学号
  • name(varchar(32)):名字
  • age(int(3)):年龄
  • email(varchar(255)):邮箱地址
1
2
3
4
5
6
create table t_student(
no bigint,
name varchar(32),
age int(3),
email varchar(255)
);

mysql_05.png (532×201) (gitee.io)

4. 备注

参考B站《动力节点》。


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录