DDL语言(Data Definition Language)
库的管理
1. 创建库
create database【if not exists】 库名【character set 字符集名】;
2. 修改库
alter database 库名 character set 字符集名;
3. 删除库
drop database【if exists】 库名;
表的管理
1. 创建表
create table【if not exists】 表名(
字段名 字段类型【约束】,
字段名 字段类型【约束】,
...
);
2. 修改表
-
添加列
alter table 表名 add column 列名 类型【first|after 字段名】;
-
修改列的类型或约束
alter table 表名 modify column 列名 新类型【新约束】;
-
修改列名
alter table 表名 change column 旧列名 新列名 类型;
-
删除列
alter table 表名 drop column 列名;
-
修改表名
alter table rename【to】新表名;
3. 删除表
drop table【if exists】表名;
4. 复制表
-
复制表的结构
create table 表名 like 旧表;
-
复制表的结构和数据
create table 表名
select 查询列表 from 旧表【where 筛选条件】;
数据类型
1. 数值型
-
整型
tinyint、smallint、mediumint、int\integer、bigint
1 2 3 4 8
特点:
① 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
② 如果超出了范围,显示out of range异常,并插入临界值
③ 长度可以不指定,默认有一个长度
长度代表显示的最大宽度,如果不够则左边用0填充,但需搭配zerofill,并默认变为无符号整型
-
浮点型
定点数:decimal(M,D)
浮点数:
float(M,D)
double(M,D)
特点:
① M代表整数部位+小数部位的个数,D代表小数部位的个数
② 如果超出了范围,显示out of range异常,并插入临界值
③ M和D均可省略,对于定点数,M默认为10,D默认为0
④ 如果精度要求较高,则优先考虑使用定点数
2. 字符型
char、varchar、binary、varbinary、enum、set、text、blob
常用:
char:固定长度的字符,写法为char(M),最大长度不能超过M,其中M可省略,默认为1
varchar:可变长度的字符,写法为varchar(M),最大长度不能超过M,其中M不可省略
3. 日期型
year:年
date:日期
time:时间
datetime:日期+时间,8个字节
timestamp:日期+时间,4个字节,比较容易受时区、语法模式、版本的影响,更能反应当前时区的真实时间
约束
1. 常见的几种约束
NOT NULL:非空,该字段的值必须填写
UNIQUE:唯一,该字段的值不可重复
DEFAULT:默认,该字段的值存在默认值
CHECK:检查,MySQL不支持
PRIMARY KEY:主键,该字段的值不可重复且非空
FOREIGN KEY:外键,该字段的值引用了另外的表的字段
PRIMARY KEY和UNIQUE
区别:
- 一个表至多有一个PRIMARY KEY,但可以有多个UNIQUE
- PRIMARY KEY不允许为空,UNIQUE可以为空
相同点:
- 均具有唯一性
- 都支持组合键,但不推荐使用
FOREIGN KEY
-
用于限制两个表的关系,从表的字段值引用了主表的某字段值
-
外键列和主表的被引用列要求类型一致,意义相同,名称无要求
-
主表的被引用列要求是一个key(一般就是PRIMARY KEY)
-
插入数据时,先插入主表的数据;删除数据时,先删除从表的数据
-
可通过级联删除或级联置空删除主表的记录
① 级联删除
alter table 从表名 add constraint 外键名 foreign key(约束列) references 主表(被引用列) on delete cascade;
② 级联置空
alter table 从表名 add constraint 外键名 foreign key(约束列) references 主表(被引用列) on delete set null
2. 创建表时添加约束
create table 表名(
字段名 字段类型 not null,
字段名 字段类型 primary key,
字段名 字段类型 unique,
字段名 字段类型 default 默认值,
字段名 字段类型 约束1 约束2...(用空格隔开,没有顺序要求),
constraint 约束名 foreign key(字段名) references 主表(被引用列)
);
注意:
列级约束:除外键均支持,不支持命约束名
表级约束:除了非空和默认均支持,支持命约束名
3. 修改表时添加或删除约束
-
非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
删除非空
alter table 表名 modify column 字段名 字段类型 ;
-
默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 默认值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
-
主键
添加主键
alter table 表名 add primary key(字段名);
删除主键
alter table 表名 drop primary key;
-
唯一
添加唯一
alter table 表名 add 【constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
-
外键
添加外键
alter table 表名 add 【constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;
4. 自增长列
-
创建表时设置自增长列
create table 表名(
字段名 字段类型 约束 auto_increment
);
-
修改表时设置自增长列
alter table 表名 modify column 字段名 字段类型 约束 auto_increment;
-
删除自身增长列
alter table 表名 modify column 字段名 字段类型 约束 ;
-
特点:
-
不用手动插入值,可以自动提供序列值,默认从1开始,步长为1;
auto_increment_increment
更改起始值:手动插入
更改步长:更改系统变量
set auto_increment_increment=值;
-
一个表至多有一个自增长列
-
自增长列只支持数值型
-
自增长列必须为一个key
浙公网安备 33010602011771号