DDL数据库定义语言
DDL数据库定义语言主要包括对库和表的管理
一、库的管理
1、库的创建
关键字:create
create database if not exists 库名
2、库的修改
关键字:alter
修改库的字符集: alter database 库名 character set utf8
3、库的删除
关键字:drop
drop database if exists 库名
二、表的管理
1、表的创建
关键字:create
create table if not exists 表名(
列名 列的类型【(长度)列的约束】,
列名 列的类型【(长度)列的约束】,
....
列名 列的类型【(长度)列的约束】
)
2、表的修改
关键字:alter
①修改列名
关键字:alter change
alter table 表名 change column 原列名 现列名 列的类型;
注意:修改列名时现列名必须加上列的类型
②修改列的类型或约束
关键字 alter modify
alter table 表名 modify column 列名 新列类型;
③添加列
关键字:alter add
alter table 表名 add column 新列名 列类型;
④删除列
关键字:alter drop
alter table 表名 drop column 列名;
⑤修改表名
关键字:alter rename to
alter table 表名 rename to 新表名;
3、表的删除
关键字:drop
drop table if exists 表名;
4、表的复制
1、仅仅复制表的结构
create table 新表名 like 准备复制的表名
2、复制表的结构+数据
create table 新表名 select * from 准备复制的表名
3、复制表的部分结构+部分数据
create table 新表名 select 查询列表 from 准备复制的表名 where 筛选条件
查询列表控制着表的结构,where的筛选条件控制表的数据。
三、mysql的数据类型
1、简介
数值型
- 整型
- 小数
- 定点数
- 浮点数
字符型
- 较短文本:char、varchar
- 较长文本:text,blob(较长的二进制数据)
日期型
2、整型
1、如何设置无符号和有符号
默认整型类型数据为有符号的,支持负数。
可以使用unsigned关键字将类型声明为无符号类型。
create table test(
t1 int,#有符号类型,支持负数
t2 int unsigned#无符号类型,不支持整数
)
注意:
- 如果插入的值超出范围,会报一个警告,而且插入的值为临界值。
- 如果不设置长度,会有默认长度。
- 长度仅代表数据显示的最大宽度,如果不够,则会用0在左边填充。
- 指定长度默认不会起作用,必须搭配zerofill使用。
CREATE TABLE 表名(
column1 INT(7) ZEROFILL
);
3、小数
1、浮点型
float(M,D)
double(M,D)
2、定点数
dec(M,D)
decimal(M,D)
3、特点:
- M代表整数部位和小数部位的数据长度
- 小数部位的长度
- 如果超过范围,则插入临界值
- M和D都可以使用省略,如果是decimal,M默认为10,D为0.如果是float,double则随时根据插入的数据调整M和D的值。
- 定点的精度较高
4、字符型
1、特点
写法 | M的意思 | 特点 | 空间的耗费 | 效率 | |
---|---|---|---|---|---|
char | char (M) | 最大的字符数,可以省略,默认为1 | 固定长度的字符 | 比较耗费 | 高 |
varchar | varchar (M) | 最大的字符数,不能省略 | 可变长度的字符 | 比较节省 | 低 |
5、Enum(枚举)类型
案例:
CREATE TABLE tab1(
c1 ENUM('a','b','c')
);
INSERT INTO tab1 VALUES('a');
注意:枚举类型不区分大小写
6、Set类型(集合)
案例:
CREATE TABLE tab1(
c1 SET('a','b','c','d','e')
);
INSERT INTO tab1 VALUES('a');
INSERT INTO tab1 VALUES('a','b','c');
注意:Set集合类型不区分大小写
7、日期型
1、Timestamp支持的时间范围较小,取值范围: 19700101080001——2038年的某个时间。Datetime的取值范围:1000-1-1 ——9999—12-31
2、timestamp和实际时区有关,更能反映实际的日期,而datetime则只能反映出插入时的当地时区
3、timestamp的属性受Mysql版本和SQLMode的影响很大
1、特点
字节 | 范围 | 时区等影响 | |
---|---|---|---|
datetime | 8 | 1000-9999 | 不受 |
3、timestamp的属性受Mysql版本和SQLMode的影响很大
1、特点
字节 | 范围 | 时区等影响 | |
---|---|---|---|
datetime | 8 | 1000-9999 | 不受 |
timestamp | 4 | 1970-2038 | 受 |