当前位置: 首页 > news >正文

Mysql 修改数据库,mysql修改表类型,Mysql增加表字段,Mysql删除表字段,Mysql修改字段名,Mysql修改字段排列顺序,Mysql修改表名...

对于已经创建好的表,尤其是已经有大量数据的表,如果需要对表做一些结构上的改变,我们可以先将表删除(drop),然后再按照新的表定义重建表。这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载。而且,如果有服务在访问表,也会对服务产生影响。因此,在大多数情况下,表结构的更改一般都使用alter table 语句,以下是一些常用的命令。

(1) 修改表类型,语法如下:

  ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]

  例如,修改表emp 的ename 字段定义,将varchar(10)改为varchar(20):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(10) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(2) 增加表字段,语法如下:

  ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]

   例如,表emp 上新增加字段age,类型为int(3):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age | int(3) | YES | | | |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(3)删除表字段,语法如下:

ALTER TABLE tablename DROP [COLUMN] col_name

  例如,将字段age 删除掉:

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age | int(3) | YES | | | |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> alter table emp drop column age;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(4)字段改名,语法如下:

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition   [FIRST|AFTER col_name]

  例如,将age 改名为age1,同时修改字段类型为int(4):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age | int(3) | YES | | | |
+----------+---------------+------+-----+---------+-------+
mysql> alter table emp change age age1 int(4) ;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp
-> ;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age1 | int(4) | YES | | | |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
注意:change 和modify 都可以修改表的定义,不同的是change 后面需要写两次列名,不方便。
但是change 的优点是可以修改列名称,modify 则不能。

(5)修改字段排列顺序。
前面介绍的的字段增加和修改语法(ADD/CNAHGE/MODIFY)中,都有一个可选项first|after  column_name,这个选项可以用来修改字段在表中的位置,默认ADD 增加的新字段是加在表的最后位置,而CHANGE/MODIFY 默认都不会改变字段的位置。例如,将新增的字段birth date 加在ename 之后:

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age | int(3) | YES | | | |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> alter table emp add birth date after ename;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | | |
| birth | date | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
| age | int(3) | YES | | | |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

修改字段age,将它放在最前面:

mysql> alter table emp modify age int(3) first;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age | int(3) | YES | | | |
| ename | varchar(20) | YES | | | |
| birth | date | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于MySQL 在标准SQL 上的扩展,在其他数据库上不一定适用。

(6)表改名,语法如下:

ALTER TABLE tablename RENAME [TO] new_tablename

例如,将表emp 改名为emp1,命令如下:

mysql> alter table emp rename emp1;
Query OK, 0 rows affected (0.00 sec)
mysql> desc emp;
ERROR 1146 (42S02): Table 'sakila.emp' doesn't exist
mysql> desc emp1;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age | int(3) | YES | | | |
| ename | varchar(20) | YES | | | |
| birth | date | YES | | | |
| hiredate | date | YES | | | |
| sal | decimal(10,2) | YES | | | |
| deptno | int(2) | YES | | | |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

 

相关文章:

  • 【BZOJ】1699 [Usaco2007 Jan]Balanced Lineup排队
  • Django 注册信息相关 与外键跨表查询
  • MathType输入框怎么调整
  • 彻底理解推送
  • CentOS7.2编译安装LNMP
  • 如何写3DMAX的插件
  • Centos7上安装tomcat
  • 论车牌识别与电子警察关系
  • hbase通过row key 的前缀查询记录
  • 《轻量级Java Web整合开发入门SSH》 - 快速理解Java框架的又一积木
  • PHP课程总结20161222
  • 画虚线
  • SFB 项目经验-09-用Lync 2013或Skype for Business 2015抢火车票
  • SEO优化---学会建立高转化率的网站关键词库
  • ★平衡法则在生活中的应用
  • 【译】理解JavaScript:new 关键字
  • css布局,左右固定中间自适应实现
  • echarts的各种常用效果展示
  • eclipse的离线汉化
  • HTTP请求重发
  • Java|序列化异常StreamCorruptedException的解决方法
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mysql innodb 索引使用指南
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python学习笔记-类对象的信息
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 每天10道Java面试题,跟我走,offer有!
  • 人脸识别最新开发经验demo
  • 如何利用MongoDB打造TOP榜小程序
  • 在weex里面使用chart图表
  • 智能网联汽车信息安全
  • postgresql行列转换函数
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (12)目标检测_SSD基于pytorch搭建代码
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (23)Linux的软硬连接
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (力扣题库)跳跃游戏II(c++)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)Windows2003安全设置/维护
  • .NET CLR Hosting 简介
  • .net操作Excel出错解决
  • @html.ActionLink的几种参数格式
  • [20171101]rman to destination.txt
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Angular 基础] - 数据绑定(databinding)
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BZOJ 1040] 骑士
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用