前言
在数据库管理中,DDL(Data Definition Language,数据定义语言)是一组用于定义数据库结构和对象的SQL命令集合。这些命令主要用于创建、修改或删除数据库中的表、索引、视图等数据对象。
以下是MySQL中最常用的几种DDL操作:
-
CREATE:
CREATE DATABASE
:用于创建一个新的数据库。CREATE TABLE
:用于创建新的表,并定义其列名、数据类型以及约束条件等。CREATE INDEX
或CREATE UNIQUE INDEX
:用于创建索引以提高查询性能。CREATE VIEW
:用于创建一个视图,视图是一个虚拟表,它的结果集来自由定义视图的查询所生成的结果集。
-
ALTER:
ALTER DATABASE
:用于修改已存在的数据库属性,如更改字符集等。ALTER TABLE
:用于修改已存在的表结构,例如添加或删除列、改变列的数据类型等。ALTER USER
:用于修改用户账号的信息。
-
DROP:
DROP DATABASE
:用于删除整个数据库。DROP TABLE
:用于删除一个或多个表。DROP INDEX
:用于删除索引。DROP VIEW
:用于删除视图。
-
TRUNCATE:
TRUNCATE TABLE
:用于快速清空表中的所有数据,但保留表的结构。这通常比使用DELETE命令更快,因为它不记录每一行的删除操作。
下面将介绍DDL的一些基础用法,来初步了解DDL。
数据库操作
数据库查询
查询所有已存在的数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
数据库创建
CREATE DATABASE
[IF NOT EXISTS] <数据库名>
[DEFAULT CHARACTER EST <字符集>]
[COLLATE <校对规则>];
<数据库名>不区分大小写,中括号内可写可不写,按照需求添加。
实例:创建一个MySQL数据库
mysql> create database tset_01;
Query OK, 1 row affected (0.12 sec)
返回 "Query OK" 则表示命令执行成功,完成数据库的创建 "1 row affected"表示只影响了数据库中的1行,"(0.12 sec)" 命令执行时间 为0.12秒。
若我们不知道是否已经存在与你想创建的数据库重名的数据库,从而导致报错,你可以通过添加[IF NOT EXISTS]子句来避免。该子句在数据库建立前会判断,只有数据库不存在时才执行数据库的创建,如下:
mysql> create database if not exists test_01;
Query OK, 1 row affected (0.13 sec)
当你想指定其默认字符集为 utf8,默认校对规则为 utf8_bin时,可以使用如下语句。
mysql> CREATE DATABASE IF NOT EXISTS test_02
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_bin;
Query OK, 1 row affected (0.03 sec)
数据库删除
DROP DATABASE
[IF EXISTS] <数据库名>;
数据库使用
USE <数据库名>;
数据表操作
数据表创建
create table 表名(
字段1 字段1的类型[comment 字段1注释],
字段2 字段2的类型[comment 字段2注释],
字段3 字段3的类型[comment 字段3注释],
...
字段n 字段n的类型[comment 字段n注释]
)[comment 表注释];
实例:创建一个用户表USER 数据字段分别为'id'编号,'name'姓名,'age'年龄,'sex'性别
mysql> create table USER( -> id int comment '编号', -> name varchar(50) comment '姓名', -> age int comment '年龄', -> sex char(1) comment '性别' -> )comment '用户表'; Query OK, 0 rows affected (0.17 sec)
数据类型主要分为三大类,分别是数值类型,字符串类型,日期类型。
分类 | 类型 | 大小 | 描述 |
数值类型 | TINYINT | 1byte | 小整数值 |
SMALLINT | 2byte | 大整数值 | |
MEDIUMINT | 3byte | 大整数值 | |
INT或INTEGER | 4byte | 大整数值 | |
BIGINT | 8byte | 极大整数值 | |
FLOAT | 4byte | 单精度浮点 | |
DOUBLE | 8byte | 双精度浮点 | |
DECIMAL | 小数值(精确定点数) | ||
字符串类型 | CHAR | 0~255byte | 定长字符串 |
VARCHAR | 0~65535byte | 变长字符串 | |
TINYBLOB | 0~255byte | 不超过255个字符串的二进制数据 | |
TINYTEXT | 0~255byte | 短文本字符串 | |
BLOB | 0~65535byte | 二进制形式的长文本数据 | |
TEXT | 0~65535byte | 长文本数据 | |
MEDIUMBLOB | 二进制形式的中等长度文本数据 | ||
MEDIUMTEXT | 中等长度文本数据 | ||
LONGBLOB | 二进制形式的极大文本数据 | ||
LONGTEXT | 极大文本数据 | ||
日期类型 | DATE | 3 | 日期值 |
TIME | 3 | 时间值 | |
YEAR | 1 | 年份值 | |
DATETIME | 8 | 混合日期和时间值 | |
TIMESTAMP | 4 | 混合日期和时间值,时间戳 |
数据
数据表查询
查询当前数据表所有表
SHOW TABLES;
查询表结构
DESC <表名>;
查询指定表的建表语句
SHOW CREATE TABLE <表名>;
数据表修改
添加字段
ALTER TABLE <表名>
ADD <字段名> 类型(长度)
[COMMENT 注释]
[约束];
修改数据类型
ALTER TABLE <表名>
MODIFY <字段名> 型数据类型(长度);
修改字段名和字段类型
ALTER TABLE <表名>
CHANGE <旧字段名> <新字段名> 类型(长度)
[COMMENT 注释]
[约束];
删除字段
ALTER TABLE <表名>
DROP <字段名> ;
数据表表名修改
ALTER TABLE <表名>
RENAME TO <新表名>;
数据表删除
删除表 删除表时,表中所有数据会全部删除
DROP TABLE [IF EXISTS] <表名>;
删除指定表,并重新创建该表
TRUNATE TABLE <表名>;