一、数据库设计
数据库设计根据产品原型以及需求文档,要分析各个模块涉及到的表结构以及表结构之间的关系,以及表结构的详细信息。最终我们需要将数据库以及数据库当中的表结构设计创建出来。
二、数据库操作
进行数据库设计,需要使用到SQL分类中的DDL语句。
DDL英文全称是Data Definition Language(数据定义语言),用来定义数据库对象(数据库、表)。
DDL中数据库的常见操作:查询、创建、使用、删除。
2.1 查询数据库
- 查询所有数据库:
show databases;
- 查询当前数据库:
select database();
2.2 创建数据库
create database [ if not exists ] 数据库名;
如果创建一个已经存在的数据库,将会报错。
可以加上参数 if not exists ,如果数据库不存在,则创建该数据库;如果存在则不创建。
2.3 使用数据库
use 数据库名;
要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。
2.4 删除数据库
drop database [ if exists ] 数据库名;
如果删除一个不存在的数据库,将会报错。
可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
注意
上述语法中的database,也可以替换成schema。
三、表操作
3.1 创建
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释 ],
字段2 字段2类型 [约束] [comment 字段2注释 ],
......
字段n 字段n类型 [约束] [comment 字段n注释 ]
) [ comment 表注释 ] ;
注意:[ ] 中的内容为可选参数;最后一个字段后面没有逗号
约束
概念:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
作用:就是来保证数据库当中数据的正确性、有效性和完整性。
在MySQL数据库当中,提供了以下5种约束:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。可以在主键约束primary key后加auto_increment进行自增。
数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型常用:tinyint、int、bigint、float、double、decimal
- 示例:double(5,2):5表示整个数字长度,2 表示小数位个数
- age tinyint unsigned,年龄无符号数的小整数
字符串类型常用:varchar、char
- char(10): 最多只能存10个字符,不足10个字符,占用10个字符空间
- varchar(10): 最多只能存10个字符,不足10个字符, 按照实际长度存储
char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。
varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char性能更高。
日期时间类型常用:date、time、year、datetime
- data:日期值,格式YYYY-MM-DD
- datetime:日期和时间,格式YYYY-MM-DD HH:MM:SS
3.2 查询
- 查询当前数据库所有表
show tables;
- 查看指定表结构
desc 表名; #可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息
- 查询指定表的建表语句
show create table 表名;
3.3 修改
- 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
- 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
- 删除字段
alter table 表名 drop 字段名;
- 修改表名
rename table 表名 to 新表名;
3.4 删除
drop table [ if exists ] 表名;
if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。