MySQL ALTER命令

当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。

开始本章教程前让我们先创建一张表,表名为:testalter_tbl。

root@host# mysql -u root -p password;

Enterpassword:*******mysql> useCDADATA;

Databasechanged

mysql>create table testalter_tbl-> (

->i INT,

->c CHAR(1)

-> );

QueryOK, 0rows affected(0.05sec)mysql>SHOW COLUMNS FROM testalter_tbl;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

|i| int(11) |YES| |NULL| |

|c| char(1) |YES| |NULL| |

+-------+---------+------+-----+---------+-------+

2rowsin set (0.00sec)

删除,添加或修改表字段

如下命令使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:

mysql>ALTER TABLE testalter_tbl DROP i;

如果数据表中只剩余一个字段则无法使用DROP来删除字段。

MySQL 中使用 ADD 子句来想数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:

mysql>ALTER TABLE testalter_tbl ADD i INT;

执行以上命令后,i 字段会自动添加到数据表字段的末尾。

mysql>SHOW COLUMNS FROM testalter_tbl;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

|c| char(1) |YES| |NULL| |

|i| int(11) |YES| |NULL| |

+-------+---------+------+-----+---------+-------+

2rowsin set (0.00sec)

如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。

尝试以下 ALTER TABLE 语句, 在执行成功后,使用 SHOW COLUMNS 查看表结构的变化:

ALTER TABLE testalter_tbl DROP i;ALTER TABLE testalter_tbl ADD i INT FIRST;ALTER TABLE testalter_tbl DROP i;ALTER TABLE testalter_tbl ADD i INT AFTER c;

FIRST 和 AFTER 关键字只占用于 ADD 子句,所以如果你想重置数据表字段的位置就需要先使用 DROP 删除字段然后使用 ADD 来添加字段并设置位置。

修改字段类型及名称

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:

mysql>ALTER TABLE testalter_tbl MODIFY c CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段的类型及名称。尝试如下实例:

mysql>ALTER TABLE testalter_tbl CHANGE i j BIGINT;

mysql>ALTER TABLE testalter_tbl CHANGE j j INT;

ALTER TABLE 对 Null 值和默认值的影响

当你修改字段时,你可以指定是否包含只或者是否设置默认值。

以下实例,指定字段 j 为 NOT NULL 且默认值为100 。

mysql>ALTER TABLE testalter_tbl->MODIFY j BIGINT NOT NULL DEFAULT100;

如果你不设置默认值,MySQL会自动设置该字段默认为 NULL。

修改字段默认值

你可以使用 ALTER 来修改字段的默认值,尝试以下实例:

mysql>ALTER TABLE testalter_tbl ALTER i SET DEFAULT1000;mysql>SHOW COLUMNS FROM testalter_tbl;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

|c| char(1) |YES| |NULL| |

|i| int(11) |YES| | 1000 | |

+-------+---------+------+-----+---------+-------+

2rowsin set (0.00sec)

你也可以使用 ALTER 命令及 DROP子句来删除字段的默认值,如下实例:

mysql>ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;mysql>SHOW COLUMNS FROM testalter_tbl;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

|c| char(1) |YES| |NULL| |

|i| int(11) |YES| |NULL| |

+-------+---------+------+-----+---------+-------+

2rowsin set (0.00sec)

ChangingaTable Type:

修改数据表类型,可以使用 ALTER 命令及 TYPE 子句来完成。尝试以下实例,我们将表 testalter_tbl 的类型修改为 MYISAM :

注意:查看数据表类型可以使用 SHOW TABLE STATUS 语句。

mysql>ALTER TABLE testalter_tbl TYPE=MYISAM;mysql>SHOW TABLE STATUS LIKE'testalter_tbl'\G*************************** 1.row****************

Name:testalter_tblType: MyISAM

Row_format: Fixed

Rows: 0

Avg_row_length: 0

Data_length: 0

Max_data_length: 25769803775

Index_length: 1024

Data_free: 0

Auto_increment:NULLCreate_time: 2007-06-03 08:04:36

Update_time: 2007-06-03 08:04:36

Check_time:NULLCreate_options:

Comment:

1rowin set (0.00sec)

修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

尝试以下实例将数据表 testalter_tbl 重命名为 alter_tbl:

mysql>ALTER TABLE testalter_tbl RENAME TO alter_tbl;

ALTER 命令还可以用来创建及删除MySQL数据表的索引,该功能我们会在接下来的章节中介绍。

喜欢 (1)or分享 (0)

mysql alter算法_MySQL ALTER命令_mysql alter_添加_删除_修改相关推荐

  1. mysql修改表结构 删除字段_mysql更改表结构:添加、删除、修改字段、调整字段顺序...

    添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` ( ...

  2. mysql增删改查的命令_MySql增删改查命令

    5.1 创建数据表 命令:create table ( [,.. ]); 例如,建立一个名为MyClass的表, 字段名 数字类型 数据宽度 是否为空 是否主键 自动增加 默认值 id int 4 否 ...

  3. mysql的-x是什么命令_Mysql常用命令

    7.1 一个建库和建表的实例1 drop database if exists school; //如果存在SCHOOL则删除 create database school; //建立库SCHOOL ...

  4. MySQL中外键的定义、作用、添加和删除

    1 简介 在实际开发的项目中,一个健壮数据库中的数据一定有很好的参照完整性.例如学生档案和成绩单两张表,如果成绩单中有张三的成绩,学生档案中张三的档案却被删除了,这样就会产生垃圾数据或者错误数据.为了 ...

  5. 【k8s】kubectl label命令(对node添加、删除label)

    文章目录 添加 查询 删除 修改 添加 语法: kubectl label nodes kube-node label_name=label_value 样例: 先查看node列表 [root]$ k ...

  6. MySQL与优化有关的命令_MySQL优化全攻略-相关数据库命令

    MySQL优化全攻略-相关数据库命令 更新时间:2006年11月25日 00:00:00   作者: 接下来我们要讨论的是数据库性能优化的另一方面,即运用数据库服务器内建的工具辅助性能分析和优化. ▲ ...

  7. mysql可能锁的表命令_mysql 默许是表级锁一些不太常用命令

    mysql 默认是表级锁一些不太常用命令 1,mysql默认的是表级锁.如果是启用InnoDB存储引擎那么该数据库支持行级锁. 2,查看数据库是否支持innodb的命令 SHOW variables ...

  8. 查看mysql主从复制是否成功的命令_mysql主从复制 - hong查理的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.配置 my.cof 服务器A(192.168.1.2)配置如下 log-bin   = mysql-bin server-id = 1 expire-logs-days  = 7#日志设置最高7天 ...

  9. mysql分库分表配置命令_mysql分库分表中间件Heisenberg

    "trans_shard"> "trans_online, trans_content, trans_tb "dataNode="transDN ...

最新文章

  1. Redis在windows实现将数据缓存起来定时更新读取
  2. Sql2000命名中的’_’好象会引发问题
  3. IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
  4. 每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求
  5. 程序员35岁真的是分水岭吗?小白也能看明白
  6. TRex 学习(3) -- stateful ( detail )
  7. Codeforces Round #173 (Div. 2) E. Sausage Maximization —— 字典树 + 前缀和
  8. 为什么在java中不能创建泛型数组
  9. 私信(聊天)功能 ajax长轮询实现
  10. 速腾(RoboSense)16线激光雷达调试出点云图(Ubuntu1804和windows系统都已经显示点云),包含各种遇见的坑【避坑指南】{[driver][socket]Rslidar poll}
  11. 快速实现ARM和DSP的通信和协同工作
  12. pragma HLS interface 端口综合
  13. 郑大计算机专业英语01章,郑州大学远程教育 《大学英语II》第01章在线测试
  14. Heiro试用失败记
  15. loj 3090 「BJOI2019」勘破神机 - 数学
  16. VC6/VS6定制应用程序按键与贴图错位问题的排查及解决
  17. 根据开始时间与结束时间,计算季度
  18. 高等代数_第6章:二次型·矩阵的合同
  19. pytorch中用plt画图需要转换为numpy格式
  20. 东软python培训班

热门文章

  1. Sql2008R2 日志无法收缩解决方案
  2. bindService初步了解
  3. android 用命令行打包生成 apk
  4. 不能在构造函数中接收通过QueryString传递的数值
  5. InnoDB存储引擎对MVCC的实现
  6. Qt Creator如何恢复默认布局
  7. 阿联酋宣布成立全球首所人工智能大学
  8. #pragma pack(1)的作用
  9. import java.util.calendar_Java.util.Calendar.setTimeInMillis()
  10. feignclient url_Spring Cloud Feign 请求动态URL