DDL语句是操作数据库对象的语句,包括创建(create). 删除(drop) 和修改(alter)数据库对象。前面已经介绍过,最基本的数据库对象是数据表,数据表是存储数据的逻辑单元。但数据库里绝不仅包括数据表,数据库里可包含如下图所示的几种常见的数据库对象。
因为存在上面几种数据库对象,所以create后可以紧跟不同的关键字。例如,建表应使用create table,建索引应使用create index, 建视图应使用create view…drop和alter后也需要添加类似的关键字来表示删除、修改哪种数据库对象。
1.创建表的语法
标准的建表语句的语法如下:
create table[模式名.]表名
(
#可以有多个列定义
columnNamel datatype[defaultexpr],
)
上面语法中圆括号里可以包含多个列定义,每个列定义之间以英文逗号(,) 隔开,最后一个列定义不需要使用英文逗号,而是直接以括号结束。
前面已经讲过,建立数据表只是建立表结构,就是指定该数据表有多少列,每列的数据类型,所以建表语句的重点就是圆括号里的列定义,列定义由列名、列类型和可选的默认值组成。列定义有点类似于Java里的变量定义,与变量定义不同的是,列定义时将列名放在前面,列类型放在后面。如果要指定列的默认值,则使用default关键字,而不是使用等号(=)。
例如”下面的建表语句:
create table test
(
#普整型通常用int
test_idint,
#小数点数
test_pricedecimal,
#普通长度文本,使用default指定默认值
test_name varchar(255)default'xxx',
#单大文本类型
test_desc text,
#图片
test_img blob,
test_date datetTime
);
建表时需要指定每列的数据类型,不同数据库所支持的列类型不同,这需要查阅不同数据库的相关文档。MySQL 支持如表所示的几种列类型。
上面是比较常见的建表语句,这种建表语句只是创建- -个空表, 该表里没有任何数据。如果使用子查询建表语句,则可以在建表的同时插入数据。子查询建表语句的语法如~F:
create table[模式名.]表名lcolumn[,colum...]]
assubquery;
上面语法中新表的字段列表必须与子查询中的字段列表数量匹配,创建新表时的字段列表可以省略,如果省略了该字段列表,则新表的列名与选择结果完全相同。下 面语句使用子查询来建表。
#创建hehe数据表,该数据表和user_ inf 完全相同,数据也完全相同
create table hehe
as
select*fromuser_ inf;
因为上面语句是利用子查询来建立数据表,所以执行该SQL语句要求数据库中已存在user_ jinf 数据表,否则程序将出现错误。
2.修改表结构的语法
修改表结构使用alter table,修改表结构包括增加列定义、修改列定义、删除列、重命名列等操作。
增加列定义的语法如下:
alter table表名
add
#可以有多个列定义
column namel datatype[defaultexpr],
上面的语法格式中圆括号部分与建表语法的圆括号部分完全相同,只是此时圆括号里的列定义是追加到已有表的列定义后面。还有一点需要指出,如果只是新增一列, 则可以省略圆括号,仅在add后紧跟一个列定义即可。为数据表增加字段的SQL语句如下:
手为hehe数据表增加一个hehe_ id字段,该字段的类型为int
alter table hehe
add hehe idint;
#为hehe数据表增加aa、bbb字段,两个字段的类型都为varchar (255)
alter table hehe
add
aa varchar(255)default'xxx',
bbb varchar(255)
上面第二条SQL语句增加aaa字段时,为该字段指定默认值为*xx’.值得指出的是,SQL语句中的字符串值不是用双引号引起,而是用单引号引起的。增加字段时需要注意:如果数据表中已有数据记录,除非给新增的列指定了默认值,否则新增的数据列不可指定非空约束,因为那些已有的记录在新增列上肯定是空(实际上,修改表结构很容易失败,只要新增的约束与已有数据冲突,修改就会失败)。
修改列定义的语法如下:
alter table表名
modify column name datatype[defaultexpr][firstlafter col name];
上面语法中first或者after col. name指定需要将目标修改到指定位置。
从上面修改语法中可以看出,该修改语句每次只能修改-一个列定义, 如下代码所示:
#酒将hehe表的hehe_ id列修改成varchar (255)类型
alter table hehe
modify hehe_ id varchar(255);
#将hehe表的bbb列修改成int类型
alter table hehe
modify bbbint;
从上面代码中不难看出,使用SQL修改数据表里列定义的语法和为数据表只增加一个列定义的语法几乎完全一样,关键是增加列定义使用add关键字,而修改列定义使用modify关键字。还有一点需要指出,add新增的列名必须是原表中不存在的,而modify修改的列名必须是原表中已存在的。
如果数据表里已有数据记录,则修改列定义非常容易失败,因为有可能修改的列定义规则与原有的数据记录不符合。如果修改数据列的默认值,则只会对以后的插入操作有作用,对以前已经存在的数据不会有任何影响。
3.删除表的语法
删除表的语法格式如下:
drop table表名;
如下SQL语句将会把数据库中已有的wawa数据表删除:
#删除数据表
drop table wawa;
删除数据表的效果如下。.
➢表结构被删除,表对象不再存在。
➢表里的所有数据也被删除。
➢该表所有相关的索引、约束也被删除。