DDL语句--修改表
修改表是指修改数据库中已经存在的表的定义。修改表⽐重新定义表简单,不需要重新加载数据,也不会影响正在进⾏的服务。
MySQL中通过ALTER TABLE语句来修改表,修改表包括修改表名,修改字段数据类型,修改字段名,增加字段,删除字段,修改字段的排列位置,更改默认存储引擎和删除表的外键约束等。
OK,这篇博客会详细的整理到上⾯的⼏种修改表的⽅式。现在我们开始。
增加字段的sql语句1,修改表名
表名可以在⼀个数据库中唯⼀的确定⼀张表。数据库系统通过表名来区分不同的表。注意的是,数据库中的表是唯⼀的,数据库中不可能存在两张相同的表。
MySQL中通过sql语句ALTER TABLE来实现表名的修改,语法形式如下:
ALTER TABLE旧表名RENAME [TO] 新表名;
其中,‘旧表名’参数表⽰修改前的表名,‘新表名’参数表⽰修改后的新表名, TO参数是可选参数,这个属性是否在语句中出现不会影响语句的执⾏。rename的意思就是重命名,所以这个挺好记的。
OK,现在我们来实际操作下数据库。我们现在数据库中创建⼀张表,建表语句如下:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(5) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLLA TE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_IN CREMENT=2DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们修改下上⾯user表的表名:
ALTER TABLE linkinframe.user RENAME linkinframe.usr;
OK,修改成功,我们查看下新的表,表结构和之前的表结构⼀致,⾥⾯的数据与之前的数据也⼀致。
2,修改字段的数据类型
字段的数据类型包括整数型,浮点数型,字符串型,⼆进制类型,⽇期和时间类型等。数据类型决定了数据的存储格式,约束条件和有效范围。表中的每个字段都有数据类型。
MySQL中,ALTER TABLE语句也可以修改字段的数据类型。基本语法如下:
ALTER TABLE表名MODIFY属性名数据类型;
其中,‘表名’参数指所要修改的表的名称,‘属性名’参数指需要修改的字段的名称,‘数据类型’参数值修改后的新的数据类型。OK,现在我们来实际操作下MySQL,⾸先我们建⼀张user表,建表语句如下:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(5) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLLA TE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_IN CREMENT=4DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们修改name字段的长度为varhcar(10),执⾏如下的sql语句来修改:
ALTER TABLE linkinframe.`user`MODIFY name varchar(10) NOT NULL;
修改后我们查看下数据库现在表结构,成功修改了name属性的长度了。
3,修改字段名
字段名是⼀张表中唯⼀的⼀个字段。数据库系统通过字段名来区分表中的不同字段。MySQL中,ALTER TABLE语句也可以修改表的字段名,基本语法如下:
ALTER TABLE表名CHANGE旧属性名新属性名新数据类型;
其中,‘旧属性名’参数指修改前的字段名,‘新属性名’参数指修改后的字段名,‘新数据类型’参数指修改后的数据类型,如不需要修改,则将新数据类型设置成与原来的⼀样。
具体有2种情况:
1),只修改字段名
使⽤ALTER TABLE 语句直接修改字段名,不改变字段的数据类型。建表语句:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLL ATE utf8_bin DEFAULT NULL, `age` int(11) DEFA
ULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_I NCREMENT=4DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们修改name字段为username字段,执⾏如下语句来修改:
ALTER TABLE linkinframe.`user`CHANGE name username varchar(10) NOT NULL;
修改后的表结构如下:
当然其中的数据也没有变化:
2),修改字段名和字段数据类型
使⽤ALTER TABLE语句直接修改字段名和该字段的数据类型。建表语句:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(5) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLLA TE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_IN CREMENT=4DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们修改name字段为username字段,然后我们将name原来的长度修改成为10,执⾏如下语句来修改:
ALTER TABLE linkinframe.`user`CHANGE name username varchar(10) NOT NULL;
修改后的表结构如下:
3),总结
MODIFY和CHANGE都可以改变字段的数据类型。不同的是:
1,CHANGE可以在改变字段数据类型的同时,改变字段名。MODIFY只能⽤来改变字段的数据类型,不能修改字段名。
2,CHANGE如果不改变字段名,只修改字段类型,CHAGE后⾯必须跟两个同样的字段名。
3,养成良好的习惯,如果是指修改字段的数据结构就使⽤MODIFY,如果要修改字段名+数据结构就使⽤CHANGE。
4,在修改表的字段过程中,如果表中已经有记录,修改数据类型时应该特别⼩⼼。因为,修改数据类型时可能会影响表中的数据。
5,特别注意的是,字符类型的字段最好不要改成整数类型,浮点数类型。
4,增加字段
在创建表时,表中的字段就已经定义完成。如果要增加新的字段,可以通过ALTER TABLE语句进⾏增加,在MySQL中,ALTER TBALE 语句增加字段的基本语法如下:
ALTER TABLE表名ADD属性名1数据类型 [完整性约束条件] [FIRST | AFTER属性名2];
其中,‘属性名1’参数指需要增加的字段的名称,‘数据类型’参数指新增加字段的数据类型,‘完整性约束条件’是可选参数,⽤来设置新增字段的完整性约束条件;‘FIRST’参数也是可选参数,其作⽤是将新增字段设置为表的第⼀个字段,‘AFTER 属性名
2’参数也是可选参数,其作⽤是将新增字段添加到‘属性名2’所指的字段后。如果执⾏的sql语句中没有‘FIRST’,‘AFTER 属性名2’参数指定新增字段的位置,新增的字段默认为表的最后⼀个字段。
具体有如下4种情况:
1),增加⽆完整性约束条件的字段
⼀个完整的字段包括字段名,数据类型和完整性约束条件,增加字段⼀般都是包括上述内容。当然,根据实际情况,⼀些字段也可以不⽤完整性约束条件进⾏约束。
现在我们来实际操作下,数据库建表语句如下:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(5) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLLA TE utf8_bin DEFAULT NULL, `age` int(11) DEFA
ULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_IN CREMENT=4DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们user表中添加⼀个phone字段:
ALTER TABLE linkinframe.`user`ADD phone varchar(11);
OK,添加字段成功,这⾥没有设置‘FRIST’和‘AFTER 属性名2’参数来指定插⼊位置,所以新增字段默认为表的最后⼀个字段。
2),增加有完整性约束条件的字段
增加字段时可以设置该字段的完整性约束条件,如设置字段是否为空,是否为主键,是否为外键,默认值和是否为⾃增类型等约束条件。现在我们来实际操作下,数据库建表语句如下:
CREATE TABLE`user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(5) COLLATE utf8_bin NOT NULL, `card_id` varchar(20) COLLA TE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT'25', PRIMARY KEY (`id`), UNIQUE KEY`age_UNIQUE` (`card_id`)) ENGINE=InnoDB AUTO_IN CREMENT=4DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
现在我们user表中添加⼀个phone字段:
ALTER TABLE linkinframe.`user`ADD phone varchar(11) NOT NULL;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论