MySQL alter命令修改表详解

目录

ALTER TABLE 语法

ALTER TABLE 实例

添加一列

添加多列

重命名列

修改列定义

修改列名和定义

添加主键

删除列

重命名表

修改表的存储引擎

结论


在使用表的过程中,如果您需要对表进行修改,您可以使用 ALTER TABLE 语句。通过 ALTER TABLE 语句,您可以重命名表、重命名列、添加列、删除列、修改列的属性等。

ALTER TABLE 语法

ALTER TABLE table_name[alter_action options], ...

其中 alter_action 是一个修改动作,包括

ADD 关键字可用来添加列、索引、约束等,包括:

  • ADD [COLUMN]: 添加列
  • ADD INDEX: 添加索引
  • ADD PRIMARY KEY: 添加主键
  • ADD FOREIGN KEY: 添加外键
  • ADD UNIQUE INDEX: 添加唯一索引
  • ADD CHECK: 添加检查约束

DROP 关键字可用来删除列、索引、约束等,包括:

  • DROP [COLUMN] col_name: 删除列
  • ADD INDEX index_name: 删除索引
  • DROP PRIMARY KEY: 删除主键
  • DROP FOREIGN KEY fk_symbol: 删除外键
  • DROP CHECK symbol: 删除检查约束

MODIFY 关键字用来修改列的定义。与 CHANGE 关键字不同,它不能重命名列。例如: MODIFY [COLUMN] col_name column_definition

CHANGE 关键字用来修改列的定义。与 MODIFY 关键字不同,它可以重命名列。例如: CHANGE [COLUMN] old_col_name new_col_name column_definition

RENAME 关键字可以重命名列、索引和表。包括:

  • RENAME COLUMN old_col_name TO new_col_name: 重命名列。
  • RENAME INDEX old_index_name TO new_index_name: 重命名索引。
  • RENAME new_tbl_name: 重命名表。

ALTER TABLE 实例

从 ALTER TABLE 语法看出, ALTER TABLE 用法很多。为了演示 ALTER TABLE 用法,我们在 testdb 数据库中创建一个表 user

请执行以下语句:

CREATE TABLE user (id INT);

通过以下语句查看 user 表的定义。

DESC user;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

下面让我们看一些实际的例子。

添加一列

以下语句使用 ADD 关键字在 user 表中添加了 name 列。

ALTER TABLE user
ADD name VARCHAR(20);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

注意,当向包含数据的表中添加列时,新添加的列不满足表的约束定义,则会返回错误。

添加多列

以下语句使用 ADD 关键字在 user 表中添加了 age 和 email 列。

ALTER TABLE user
ADD age INT,
ADD email VARCHAR(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

重命名列

以下语句使用 RENAME COLUMN 关键字,将 user 表的 name 列重命名为 username

ALTER TABLE user
RENAME COLUMN name TO username;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

以下是修改后的表定义:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
| email    | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

修改列定义

以下语句使用 MODIFY 关键字,将 user 表的 username 列由 varchar(20) 修改为 VARCHAR(45)

ALTER TABLE user
MODIFY username VARCHAR(45);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

以下是修改后的表定义:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| username | varchar(45) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
| email    | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

修改列名和定义

以下语句使用 CHANGE 关键字,将 user 表的 username 列修改为 name VARCHAR(30)

ALTER TABLE user
CHANGE username name VARCHAR(30);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

以下是修改后的表定义:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| email | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

添加主键

以下语句使用 ADD 关键字,将 user 表的 id 列设置为主键。

ALTER TABLE user
ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

注意,由于主键要求列的值是唯一的并且不能为 NULL,如果该列中有重复的值或者 NULL 值,则会返回错误。同样,如果你添加唯一索引,也可能会出现相同的错误。

以下是修改后的表定义:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| email | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

删除列

下面语句使用 DROP 关键字删除了 email 列。

ALTER TABLE user
DROP COLUMN email;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

注意:删除列是很危险的操作,因为它会永久删除列中的数据。这是不可撤销的操作,请谨慎。

以下是删除后的表定义:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

重命名表

下面语句使用 RENAME 关键字将 user 表重命名为 users

ALTER TABLE user
RENAME users;

我们还可以是用 RENAME TABLE 语句重命名表,它的用法如下:

RENAME TABLE table_name TO new_table_name;

下面的语句同样实现将 user 表重命名为 users

RENAME TABLE user TO users;

修改表的存储引擎

ALTER TABLE 命令也可以用于修改一张表的存储引擎。可以使用以下语法:

ALTER TABLE table_name ENGINE=engine_name;

其中,table_name是要修改的表的名称,engine_name是新的存储引擎。

示例:

-- 将customer表的存储引擎改为innodb
ALTER TABLE customer ENGINE=InnoDB; 

结论

在本文中,我们介绍了在 MySQL 服务器上如何使用 ALTER TABLE 语句修改表,包括:添加列、删除列、修改列、重命名列、重命名表和设置主键等。本文要点包括:

  • ALTER TABLE 关键字后面跟要修改的表名。
  • ADD 关键字可用来添加列、索引、约束等。
  • DROP 关键字可用来删除列、索引、约束等。
  • RENAME 关键字可以重命名列、索引和表。
  • MODIFY 关键字用来修改列的定义。
  • CHANGE 关键字用来修改列的定义和列名。
  • RENAME TABLE ... TO ... 用来重命名表。
-- alter table 修改表结构(表名,列名,列的数据类型,相关约束)
use d3;
show tables;
-- 查看表结构
desc tuser;
describe tuser;
show columns from tuser;
describe table tuser;
-- 修改表名
alter table tuser rename userinfo;
rename table userinfo to tuser;
-- 移动表表tt2从db2库移动当前数据库为tt3表
rename table db2.tt2 to tt3;
/*
RENAME TABLE
tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_*/
drop table if exists
t,t1,t3,s,stu,user,tuser,tteacher,dept,employees,student;
create table t1(t int);
create table t2(t int);
create table t3(t int);
-- 修改多个表的名称
rename table
t1 to tt1,
t2 to tt2,
t3 to tt3;
-- 查看表结构
desc tt1;
-- 查看建立数据库的语句
show create database mysql;
-- 查看建立表的语句
show create table tt1;
rename table tt1 to student;
-- 增加字段类型
alter table student add column id int unsigned auto_increment primary key;
alter table student add sname varchar(15) not null;
alter table student add age tinyint unsigned default 18;
alter table student add gender enum('男','女') default '男' after sname;
alter table student add address varchar(255) first;
-- 修改列的类型 及 位置
alter table student modify address varchar(255) after age;
-- 修改列名
alter table student rename column address to saddr;
-- 修改列名 类型 及 位置
alter table student change saddr address varchar(100) after age;
-- 复制表结构或建立一个空表
create table stu like student;
-- 根据查询的内容建立一个表,此表没有相关的约束,不推荐使用
create table t1 as select 20,'jack';
-- 删除字段
alter table student drop column t;
-- 修改表名 student cf_student cf_user cf_admin cf_car
rename table w_student to cf_student;
alter table cf_student rename st;
-- 查看表结构
describe st;
desc st;
-- 查看建立表语句
show create table st;
CREATE TABLE `st` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`gender` enum('男','女') DEFAULT NULL,
`course` set('计算机英语','高数','离散数学','线性代数') DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3
-- 增加一列(字段)
-- 删除一列(字段)
-- 修改列名
-- 修改列的数据类型 int bigint varchar int varchar(30) varchar(5)
select * from st;
-- 增加一列
alter table st add address varchar(255) not null default '郑州市';
alter table st add age tinyint unsigned not null default 18 first;
alter table st add age tinyint unsigned default 0 after name;
-- 删除一列
alter table st drop address;
alter table st drop column age;
-- 修改列名 name StudentName sname
alter table st rename column name to sname;
alter table st change sname name varchar(30) first;
alter table st change name name varchar(30) after id;
-- 修改列的数据类型及精度
alter table st modify name varchar(100) after address;
alter table st modify name varchar(50) after id;
-- 复制表的结构
-- create table t6(t int);
create table st2 like st;
show create table st2;
select * from st2;
-- 插入数据
insert into st2 select * from st;
show tables;
-- 根据查询的结构,建立一个没有相关约束的表,可以直接插入数据
create table st3 as select id,name from st;
create table st4 as select id,name,address from st where name like '李%';
select * from st3;
show create table st3;
drop table st3;
select * from st4;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜 CVE-2020-25540

春秋云镜 CVE-2020-25540 Thinkadmin v6任意文件读取漏洞 靶标介绍 ThinkAdmin 6版本存在路径查找漏洞,可利用该漏洞通过GET请求编码参数任意读取远程服务器上的文件。 启动场景 漏洞利用 1、未授权列目录poc 读取网站根目录Payload: http://think.admin/Think…

【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 这道题也是经典的数据结构题了,有时候面试题也会遇到,已知前序与中序的遍历序列,由前序遍历我们可以知道第一个元素就是根节点,而中序遍历的特点就是根节点的左边全部为左子树,右…

4用opencv玩转图像2

opencv绘制文字和几何图形 黑色底图 显示是一张黑色图片 使用opencv画圆形 #画一个圆 cv2.circle(imgblack_img,center(400,400),radius100,color(0,0,255),thickness10) 画实心圆 只需要把thickness-1。 cv2.circle(imgblack_img,center(500,600),radius50,color(0,0,255),t…

C#垃圾回收器GC、析构函数(Finalize 方法)和Dispose

1、垃圾回收器GC GC(Garbage Collection)是.NET中的垃圾回收器。以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象,通过识别它们是否被引用,来确定哪些对象是已经死亡的,哪些仍需要被使用。已经不再被…

Python Web 开发 Flask 介绍

WEB开发是现在程序必会的技能,因为大部分软件都以Web形式提供,及时制作后台开发,或者只做前台开发,也需要了解Web开发的概念和特点。由于Python是解释性脚本语言,用来做Web开发非常适合,而且Python有上百种…

batch_softmax_loss

每个用户抽取一定数量的困难负样本,然后ssm def batch_softmax_loss_neg(self, user_idx, rec_user_emb, pos_idx, item_emb):user_emb rec_user_emb[user_idx]product_scores torch.matmul(F.normalize(user_emb, dim1), F.normalize(item_emb, dim1).transpose(…

K8s持久化存储(nfs网络存储)

数据卷 emptydir,是本地存储,pod重启,数据就不存在了,需要对数据持久化存储 1.nfs,网络存储 ,pod重启,数据还存在的

elasticsearch的副本和分片的区别

es/elasticsearch的副本和分片的区别 一:概念 (1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹&#x1f339…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]

文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…

Spring接口InitializingBean的作用和使用介绍

在Spring框架中,InitializingBean接口是一个回调接口,用于在Spring容器实例化Bean并设置Bean的属性之后,执行一些自定义的初始化逻辑。实现InitializingBean接口的Bean可以在初始化阶段进行一些必要的操作,比如数据的初始化、资源…

2023巅峰极客比赛web复现

<1> unserialize(反序列化字符串逃逸) 下载 www.zip得到源码&#xff1a; my.php 存在 pull_it恶意类 反序列化时会执行 $this-x 这里有一层过滤 $this-x不能为字母数字 可以取反、异或绕过 下面来找一找怎么去触发反序列化 index.php 会对我们登录框输入的参数先…

算法leetcode|67. 二进制求和(rust重拳出击)

文章目录 67. 二进制求和&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 67. 二进制求和&#xff1a; 给你两个二进制字符串 a 和 b &a…

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…

链表相关操作:移除重复节点、删除中间节点

题目1&#xff1a;移除重复节点 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] 解题思路&#xff1a; 1.创建一个set表&#xff0c;将第一次出现的节点值保存起来 2.定义pre指针保…

【暑期每日一练】 Epilogue

目录 选择题&#xff08;1&#xff09;解析&#xff1a; &#xff08;2&#xff09;解析&#xff1a; &#xff08;3&#xff09;解析&#xff1a; &#xff08;4&#xff09;解析&#xff1a; &#xff08;5&#xff09;解析&#xff1a; 编程题题一描述输入描述&#xff1a;输…

ad+硬件每日学习十个知识点(23)23.8.3(LDO 设计实例)(涉及到自控没听懂,学完自控再回来看)

文章目录 1.输入电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;2.输出电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;3.有些LDO需要输出的最小负载电流&#xff0c;所以需要接一个下拉电阻。4. 1…

CSharp中构造函数、析构函数和IDisposable使用细节探究

1. 先来一个简单的Demo 1.1. 定义一个类 public class ParentClass {public ParentClass(){Console.WriteLine("ParentClass构造函数");}public void DoSomeThing(){Console.WriteLine("ParentClass做点什么DoSomeThing()");}~ParentClass(){Console.Wri…

电影售票后台管理系统快速搭建(优惠券制作+java开源)

为了快速搭建电影售票后台管理系统并实现优惠券制作功能&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 确定系统的需求和功能&#xff0c;包括用户管理、影院管理、电影管理、订单管理以及优惠券制作等模块。 2. 选择一款适合的Java开源框架来搭建系统&#xff0c;…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三)&#xff1a;张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a;并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二)&#xff1a;Collective通信操作的封装ma…