【MySQL】DDL数据定义
DDL解释
DDL: 数据定义语言(Data Define Language),用于对数据库和表进行管理和操作。
库管理
1. 查看所有的数据库列表
|
|
2. 创建数据库
详细语法为:
|
|
常见的字符集编码方式有utf8和utf8mb4。
utf8是utf8mb3的别名,使用该编码时,一个字符最多占3个字节。如果使用utf8mb4,一个字符最多占4个字节。推荐使用utf8mb4,方便存储emoji。
|
|
|
|
|
|
3. 查看建库语句
|
|
4. 修改数据库
|
|
5. 删除数据库
|
|
如:
|
|
|
|
6. 打开数据库
|
|
7. 查看所处数据库
|
|
表管理
1. 创建表
语法:
|
|
示例:
|
|
2. 查看数据库的所有数据表
|
|
除了数据表,该命令也会显示视图。
3. 查看数据表结构
|
|
或者:
|
|
或者:
|
|
4. 修改表
修改表的属性:
|
|
修改表名:
|
|
修改表字段:
|
|
示例:
|
|
|
|
|
|
|
|
|
|
|
|
5. 删除表
|
|
6. 复制表
|
|
|
|
示例:
|
|
建表规范
-
表名不能小写,不能太长,不能使用关键字,要和业务有关。
-
必须设置存储引擎和字符集。
-
数据类型在满足需求的基础上,要足够简短。
-
必须有主键。
-
每个列尽量设置为
not null,并设定默认值。 -
每个列需要加注释。
-
列名规范同表名。
常用字段类型
1. 整数
-
tinyint:1字节,有符号的范围是-128~127,无符号的范围是0~255。 -
smallint:2字节,有符号的范围是-32768~32767,无符号的范围是0~65535。 -
mediumint:3字节,有符号的范围是-8388608~8388607,无符号的范围是0~16777215。 -
int:4字节,有符号的范围是-2147483648~2147483647,无符号的范围是0~4294967295。 -
bigint:8字节。
2. 浮点数
-
float: 4字节单精度浮点数 -
double: 8字节双精度浮点数
例如:double(5, 2)表示最多5位,其中有且仅有2位小数,即最大值为999.99。
3. decimal
浮点型,不会出现精度问题。
4. char
固定长度字符串类型;内容范围是0~255字符;
char(n):n参数默认为1,不管实际存储,开辟空间都是n个字节,效率高。mysql5之后,n指的是字符个数。
5. varchar
可变长度字符串类型;内容范围为0~65535字节;
varchar(n)最大字节个数n必选,根据实际存储空间决定开辟空间,效率低。varchar会消耗额外1到2个字节,存储字符长度。mysql5之后,n指的是字符。
6. text
字符串类型,通常存储较长文本。
7. blob
字节类型;常用于jpg, mp3, avi。
8. date
日期类型;格式为yyyy-MM-dd。
9. time
时间类型;格式为hh:mm:ss。
10. timestamp
用于保存日期和时间,保存格式为时间戳,共占用4个字节。
timestamp值的范围是1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。
用命令行工具更新该值时,数据格式为“年月日时分秒”,“时分秒可以省略”。
10. datetime
用于保存日期和时间,格式为时间戳,占用5个字节。
datetime精度可以到微秒,如果需要保存毫秒和微秒,则需要消耗额外空间,最大可扩展到8字节。
注意,上述规则不适用于MySQL5.6.4之前版本。在该版本之前,datetime固定占用8字节。
取值范围是0000-01-01 00:00:00到9999-12-31 23:59:59。显示具体值时,只会精确到秒。
常见字段约束
1. 说明
用于限制表中字段的数据。
2. 列表
-
NOT NULL非空。用于限制该字段为必填项。
-
DEFAULT默认值。如果该字段没有插入值,则显示默认值。
-
PRIMARY KEY主键。被设为主键的列值不能重复,并且不能为空。
1ALTER TABLE tbl_name ADD PRIMARY KEY (column_list); -
UNIQUE唯一键。限制字段不能重复,但是可以为空。
-
CHECK检查。限制该字段值必须满足指定条件,
MySQL不支持。 -
FOREIGN KEY外键,用于限制两个表的关系。
外键列的值必须来自主表的关联列。主表关联列和从表关联列必须类型一致,意思一致,但是名称无要求。主表的关联列要求必须是主键。
定义外键:
1ALTER TABLE teblename ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 表名(关联列);或者:
1 2 3 4CREATE TABLE teblename ( ... CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 表名(关联列) );删除外键:
1ALTER TABLE tablename DROP FOREIGN KEY 键名 -
AUTO_INCREMENT自增长列必须设置在一个键上,比如主键或唯一键。
自增长列要求数据类型为数值型。
一个表至多有一个自增长列。