3. 关系数据库标准语言 SQL
3.3 数据定义
### MySQL 简介
- 关系型数据库管理系统
- 瑞典 MySQL AB 开发, 被 Oracle 收购
- 最流行的开源数据库之一
- 主要用于 Web 应用环境
- 使用标准的 SQL
### MySQL 下载
- [https://dev.mysql.com/downloads/](https://dev.mysql.com/downloads/)
- MySQL Enterprise Edition
- MySQL Cluster CGE
- MySQL Community Edition

#### MySQL Download

#### MySQL Community Edition
### MySQL 常用客户端
- MySQL Workbench
- phpMyAdmin
- Navicat for MySQL

#### MySQL Workbench
### MySQL 安装
- 安装 MySQL Server
- 安装 MySQL Workbench
### MySQL 数据类型
- 数值类型
- 日期和时间类型
- 字符串类型

#### MySQL Data Types
### 数值类型
- INT: 整数, 4 Byte
- TINYINT: 很小整数, 1 Byte
- SMALLINT: 小整数, 2 Byte
- MEDIUMINT: 中等大小整数, 3 Byte
- BIGINT: 大整数, 8 Byte
- FLOAT: 单精度浮点数, 4 Byte
- DOUBLE: 双精度浮点数, 8 Byte
- DECIMAL: 依赖于用户定义的精度和标度
### 日期和时间
- YEAR: 年份, 格式为 'YYYY', 1 Byte
- DATE: 日期, 格式为 'YYYY-MM-DD', 3 Byte
- TIME: 时间, 格式为 'HH:MM:SS', 3 Byte
- DATETIME: 日期和时间, 格式为 'YYYY-MM-DD HH:MM:SS', 8 Byte
- TIMESTAMP: 时间戳, 从 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC, 4 Byte
### 字符串类型
- CHAR: 定长字符串, 最大 255 字符
- VARCHAR: 变长字符串, 最大 65535 字符
- TEXT: 长文本字符串, 最大 65535 字符
- BLOB: 二进制对象, 最大为 65535 字节
- ENUM: 枚举类型, 最多 65535 个对象
- SET: 集合类型, 最多 64 个成员
### 选择数据类型
- BIGINT: 存储超大整数, 如科学数据
- DOUBLE: 存储双精度小数据, 如科学数据
- DECIMAL: 以高精度存储小数据, 如货币数额
- TEXT: 存储大型文本数据, 如产品描述
- BLOB: 存储二进制数据, 如图片或声音
- TIMESTAMP: 存储即时时间, 如当前时间
- ENUM: 存储单选属性, 如性别
- SET: 存储多选属性, 如业余爱好和兴趣
### 数据定义
- 模式 (Schema)
- 表 (Table)
- 视图 (View)
- 索引 (Index)

#### Database Schemas

#### Database Schema
### 模式 (Schema)
- 创建模式: CREATE SCHEMA
- 删除模式: DROP SCHEMA
### 创建模式
CREATE SCHEMA "temp" AUTHORIZATION ROOT;
CREATE SCHEMA `temp`;
CREATE SCHEMA `heroes1` ;
### 删除模式
DROP SCHEMA "temp" ;
DROP DATABASE `temp`;
### 表 (Table)
- 创建表: CREATE TABLE
- 修改表: ALTER TABLE
- 删除表: DROP TABLE
### 创建表
CREATE TABLE <表名> (
<列名> <数据类型> [列级完整性约束条件],
[<列名> <数据类型> [列级完整性约束条件]], ...
[, <表级完整性约束条件>]);
CREATE TABLE Heroes (
HeroID INT UNSIGNED AUTO_INCREMENT,
HeroName VARCHAR(50) NOT NULL,
HeroLife INT NOT NULL,
HeroDescription TEXT,
PRIMARY KEY (HeroID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### 修改表
ALTER TABLE <表名>
[ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE | RESTRICT]]
[DROP CONSTRAINT <完整性约束> [RESTRICT | CASCADE]]
[ALTER COLUMN <列名> <数据类型>];
### 删除表
DROP TABLE <表名> ;
DROP TABLE `hok`.`Users`;
### 索引 (Index)
- 索引可以提高查询速度, 但会增加数据库负担
- 索引的建立和删除由数据库管理员或表主完成
- 不同数据库管理系统支持的索引类型有所差异
- 数据库系统会根据查询自动选择合适的索引
- 删除索引会同时从数据字典中删除相关信息
### 索引
- 创建索引: CREATE INDEX
- 删除索引: DROP INDEX
- 修改索引: ALTER INDEX
### 创建索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名> (<列名> [次序], <列名> [次序], ...);
### 修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
### 删除索引
DROP INDEX <索引名>;
### 数据字典 (Data Dictionary)
- 是关系数据库管理系统内部的一组系统表
- 记录数据库中所有的定义信息
- 在查询优化和查询处理中发挥重要作用

### 3.3 数据定义
- 在 MySQL 中,VARCHAR 和 CHAR 有何不同?
- 在 MySQL 中我们如何创建和删除模式?
- 想要添加新列到现有的表时该使用哪个 SQL 命令?
- 索引在数据库中的作用是什么?
- 数据字典在关系数据库管理系统中有什么作用?
----
[ 3.2 王者荣耀数据库](dbds-3-2.html#/overview)
[| 练习 |](dbds-exec.html)
[ 3.4 数据查询](dbds-3-4.html#/overview)