高级查询-修改表
- 修改表
- 修改表名
- 添加字段
- 修改字段
- 删除字段
- 添加主外键
- 1.添加主键约束
- 2.添加外键约束
修改表
前面简单介绍了修改表,对数据库的操作,主要就是增删改查。
修改表名
在一个数据库中,表名是唯一的。可以通过SQL语句对以创建的表修改表名,语法如下。
ALTER TABLE<旧表名> rename [to] <新表名>;
其中,to为可选参数,使用与否不影响结果。仅修改表名,表结构不变。
例如,实现在test 数据库中创建表demo1,将其改名为demo2,SQL语句如下。
DROP TABLE IF EXISTS ` demo1`;
create table if not exists `demo1`(
`id` int(10) not null AUTO_INCREMENT,
`name` varchar(8) not null,
primary key(id)
);
#修改表名
ALTER TABLE `demo1` RENAME `dome2`;
添加字段
随着我们业务的需求的变化,可能需要向已存在的表中添加新的字段,添加新字段的语法如下。
语法:
ALTER TABLE 表名 add 字段名 数据类型 [属性];
例如:我们向demo2表中添加密码字段,sql语句如下。
/*添加数据*/
ALTER TABLE dome2 add `password` VARCHAR (32) not null;
结果如下:
修改字段
数据表中一个字段中包含字段名和数据类型,因此如果实现修改字段,可以包括修改字段名和修改数据存储的类型。下面来介绍其SQL语句的写法。
语法:
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型[属性];
其中,“原字段名” 指修改前的字段名,“新字段名”指修改后的字段名,“数据类型”指修改后的数据类型,如果不需要修改数据类型,则和原数据类型是一致的,但“数据类型”不能为空。
例如:将demo2表中name字段名改为username,数据类型改为CHAR(10),sql语句如下。
/*修改字段名*/
ALTER TABLE dome2 CHANGE `name` `username` CHAR(10) not null;
从结果我们可以看到,name已经改成为username,且数据类型为CHAR类型。
注意: 由于不同类型的数据存储方式和长度不同,修改数据类型可能会影响数据表宏已有的数据,因此此种情况下不应该轻易修改数据类型。
删除字段
删除字段就是将数据库中的某个字段从表中移除,语法如下。
语法:
ALTER TABLE 表名 drop 字段名;
例如我们删除demo2表中的password字段。sql如下:
ALTER TABLE dome2 drop `password`;
添加主外键
以上我们列举了部分常用的使用ALTER TABLE修改表结构的SQL语句,在实际应用中,也许还会用到其他修改表结构的SQL语句,这时可以通过查看系统帮助来找到它们。“help ALTER TAble”;
1.添加主键约束
语法:
ALTER TABLE 表名 add constraint 主键名 primary key 表名(主键字段);
例如:将grade表中的gradeld设置为主键,语句如下。
ALTER TABLE `grade` add constraint 'pk_grade' primary key `grade`(`gradeId`);
2.添加外键约束
ALTER TABLE 表名 add constraint 外键名 FROEIGN KEY (外键字段) PEFERENCES 关联表名 (关联字段)
例如 ,设置student表的gradld字段与grade表的gradeld字段建立主外键关联,语句如下。
ALTER TABLE `student` add constraint fk_student_grade FROEIGN KEY (`gradeId`) PEFERENCES `grade` (`gradeId`);
**提示:**在MySQL中,InnDB存储类型的表支持外键,MyISAM存储类型的表不支持外键,因此对于MyISAM存储类型的表,也可以通过建立逻辑关联的方式保证数据的完整性和一致性,这种关联实际上是依照设计之初就定义好的固有逻辑,按照这种固有逻辑存储数据即可,不需要在数据库层面进行“硬绑定”。