mysql 前沿表设计_史上最简单MySQL教程详解(基础篇)之表的维护和改造
表结构修改
在我们实际的开发的过程,随着开发的深入,会发现我们事先设计好的表可能已经不再适合,就会设计到对表的修改和改造。这里我就向大家介绍一下一些常用的方法和情况。这里我们使用的是之前在中就已经使用到了【ALTER】语句进行修改。
注意事项:任何设计到表的的修改和改造的操作,都有可能发生不可预知的错误或者情况出现,所以安全起见,请在每次操作之前都做好数据的备份,以防万一。
修改列的数据类型
具体如下:ALTER TABLE 表名 MODIFY 列名 数据类型;
这里,我们就以我们之前创建好的【user】表来进行演示:
运行结果如下:mysql> desc user;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
+——–+————-+——+—–+———+——-+
3 rows in set (0.00 sec)
mysql> alter table user modify name varchar(30);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
+——–+————-+——+—–+———+——-+
3 rows in set (0.00 sec)
注意事项:列的数据类型是跨域随时修改的。但是当数据库已经存在数据的时候,一定要注意,修改后的数据类型是否可用。例如我在【user】表插入了一条数据后,再改变【name】的数据类型为【INT】就会报错【ERROR 1366 (HY000): Incorrect integer value】。
修改的过程中有时会出现原来的数据变成乱码,或者一部分数据消失的情况 ,所以请务必记得备份数据。
追加新列
表尾追加新列
如果我们想在已经建好的表里添加一个新的列,那么我们依然使用的是【ALTER】语句,具体的语法如下:ALTER TABLE 表名 ADD 列名 数据类型;
我们往我们的【user】表中追加一列【phone】,运行结果如下:mysql> alter table user add phone int(13);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
| phone | int(13) | YES | | NULL | |
+——–+————-+——+—–+———+——-+
4 rows in set (0.00 sec)
可以看出我们在表尾添加上了域名(字段名)为【phone】的列。
表头追加新列
语法如下:ALTER TABLE 表名 ADD 列名 数据类型 FIRST;
我们在追加一列名为【address】在表头吧,运行结果如下:mysql> alter table user add address varchar(50) first;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+———+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| address | varchar(50) | YES | | NULL | |
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
| phone | int(13) | YES | | NULL | |
+———+————-+——+—–+———+——-+
5 rows in set (0.00 sec)
表头追加成功;
任意位置追加新列
如果我们想要在任意的位置追加新列,那么我们可以使用下面的语法:ALTER TABLE 表名 ADD 列名 数据类型 after 已经存在的列名;
我们在【sex】后面追加一列【province】试一试,运行结果如下:mysql> alter table user add province varchar(5) after sex;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+———-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———-+————-+——+—–+———+——-+
| address | varchar(50) | YES | | NULL | |
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
| province | varchar(5) | YES | | NULL | |
| phone | int(13) | YES | | NULL | |
+———-+————-+——+—–+———+——-+
6 rows in set (0.00 sec)
我们就可以看出,我们已经在【sex】后面追加一列【province】
改变某列的位置
如果我们是想要改变已经创建好的表中的某列的位置,我们已改怎么办呢?语法如下:ALTER TABLE 表名 MODIFY 需要移动的表名 字段类型 AFTER 已经存在的某列的位置
我们就尝试把【address】移动到【province】后面吧,运行结果如下:mysql> alter table user MODIFY address varchar(50) after province;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+———-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———-+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
| province | varchar(5) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
| phone | int(13) | YES | | NULL | |
+———-+————-+——+—–+———+——-+
6 rows in set (0.00 sec)
移动成功;
删除表
这里我们又用到了我们的【DROP】命令,语法如下:ALTER TABLE 表名 DROP 列名;
我们尝试删除【province】试一试,运行结果如下:mysql> alter table user drop province;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+———+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
| address | varchar(50) | YES | | NULL | |
| phone | int(13) | YES | | NULL | |
+———+————-+——+—–+———+——-+
5 rows in set (0.00 sec)
删除成功;
表的复制
这里我们先演示往我们的【user】中插入这样的一条数据:域名(字段名)值userId1
name张三
sex0
我们需要使用的是【INSERT】语句,这个我这里就不过多的解释,这里仅仅只是作为插入测试数据使用 ,我们会详细介绍它的用法。语法如下:INSERT INTO 表名 (列名1,列名2,列名3...) VALUES (数据1,数据2,数据3....);
运行结果如下:mysql> insert into user (userId,name,sex) value (1,’张三’,0);
Query OK, 1 row affected (0.00 sec)
这里我们还需要【SELECT】语句,进行数据查询,语法如下:SELECT * FROM 表名
执行结果如下:mysql> select * from user;
+——–+——+——+
| userId | name | sex |
+——–+——+——+
| 1 | 张三 | 0 |
+——–+——+——+
1 row in set (0.00 sec)
当我们做好数据准备以后,我们就可以尝试表的复制操作了;
表结构复制
这种复制方法呢,仅仅只复制了表的结构,而不会将表中的数据进行复制,具体语法如下:CREATE TABLE 新表名 LIKE 旧表名;
我们复制下【user】表试试,运行结果如下:mysql> create table user_a like user;
Query OK, 0 rows affected (0.06 sec)
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| user |
| user_a |
+—————-+
2 rows in set (0.00 sec)
mysql> desc user_a;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| userId | char(5) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
+——–+————-+——+—–+———+——-+
3 rows in set (0.00 sec)
mysql> select * from user_a;
Empty set (0.00 sec)
首先我们将复制出来的新表命名为【user_a】然后查看他的表结构与我们原来的【user】表相同,并且通过【SELECT】语句发现表中并没有任何数据;
数据复制
这种方法主要是将旧表的数据复制到新表中,所以我们就尝试着将【user】表中的数据复制到我们刚刚创建的表【user_a】中吧。语法如下:INSERT INTO 新表 SELECT * FROM 旧表
运行结果如下:mysql> insert into user_a select * from user;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from user_a;
+——–+——+——+
| userId | name | sex |
+——–+——+——+
| 1 | 张三 | 0 |
+——–+——+——+
1 row in set (0.00 sec)
我们可以看到,我们之前在【user】表中插入的数据现在已经复制到了【user_a】表中
表结构+数据复制
你看了上面两种方法,也许会说:这也太麻烦了吧,我想要完整复制一张新表居然需要敲两次命令。别急,接下来这个命令就可以解决的你的抱怨。语法如下:CREATE TABLE 新表名 SELECT * FROM 旧表名;
运行结果如下:mysql> create table user_b select * from user;
Query OK, 1 row affected (0.10 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| user |
| user_a |
| user_b |
+—————-+
3 rows in set (0.00 sec)
mysql> desc user_b;
+——–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——–+————-+——+—–+———+——-+
| userId | char(5) | NO | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | 0 | |
+——–+————-+——+—–+———+——-+
3 rows in set (0.00 sec)
mysql> select * from user_b;
+——–+——+——+
| userId | name | sex |
+——–+——+——+
| 1 | 张三 | 0 |
+——–+——+——+
1 row in set (0.00 sec)
我们可以看出,我们同时将【user】的表结构和数据都复制到了【user_b】中。
到此,我们也就已经完成MySQL基础操作中的大部分内容,接下来,我们将介绍的是MySQL基础应用中最为重要也是最常用的。
mysql 前沿表设计_史上最简单MySQL教程详解(基础篇)之表的维护和改造相关推荐
- 接地脚是什么意思_史上最全的接地系统详解,值得收藏
接地一直是很多弱电朋友的难点,主要还是做接地的工程不多,这方面一直陆陆续续的朋友在讨论过,那么今天我们一起来对接地进行详细了解. 有人问:为什么回路电流走零线不走地线,而漏电流走地线不走零线,零线地线 ...
- java二叉树原理_史上最全二叉树遍历详解(Java实现,原理相同)
二叉树遍历方法合集: 最近在LeetCode力扣上刷数据结构的二叉树合集,遇到的二叉树遍历方法,于是想理解透彻.本文讲解了二叉树遍历的四种方法,前.中.后序遍历. 对应题目: 94.二叉树的中序遍历 ...
- 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结
史上最简单MySQL教程详解(进阶篇)之索引及其失效场合总结 什么是索引及其作用 索引的种类 各存储引擎对于索引的支持 简单介绍索引的实现 索引的设置与分析 普通索引 唯一索引(Unique Inde ...
- 史上最简单MySQL教程详解(进阶篇)之视图
史上最简单MySQL教程详解(进阶篇)之视图 为什么要用视图 视图的本质 视图的作用 如何使用视图 创建视图 修改视图 删除视图 查看视图 使用视图检索 变更视图数据 WITH CHECK OPTIO ...
- 史上最简单MySQL教程详解(进阶篇)之存储过程(一)
史上最简单MySQL教程详解(进阶篇)之存储过程(一) 史上最简单MySQL教程详解(进阶篇)之存储过程(一) 什么是存储过程 存储过程的作用 如何使用存储过程 创建存储过程 DELIMITER改变分 ...
- 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置
什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...
- 史上最小白之Transformer详解
1.前言 博客分为上下两篇,您现在阅读的是下篇史上最小白之Transformer详解,在阅读该篇博客之前最好你能够先明白Encoder-Decoder,Attention机制,self-Attenti ...
- 史上最小白之BM25详解与实现
史上最小白之BM25详解与实现 原理 BM25算法是一种计算句子与文档相关性的算法,它的原理十分简单:将输入的句子sentence进行分词,然后分别计算句子中每个词word与文档doc的相关度,然后进 ...
- Xshell下载安装,史上最简单易懂教程
Xshell下载安装,史上最简单易懂教程 阿里云网盘提取码:46gw 阿里云网盘下载地址 百度网盘提取码:8888 百度网盘下载地址 1,下载完成后,得到这样的文件 2,XmanagerPowerSu ...
最新文章
- 2021襄阳谷城高考成绩查询,2021高考襄阳谷城县考生求助电话
- XPath与多线程爬虫
- java jar包 和 war包 区别
- 微软向开发者推出区块链概念验证框架
- WARNING: Ignoring invalid distribution -ip
- 域控制器服务器的管理维护,域控制器管理 向备份要安全(图)
- 多元样条函数及其应用_B样条算法(B-spline)
- git中的rebase操作
- 成都女学霸高考 692 分想当“程序媛”,网友:快劝劝孩子
- Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
- 按时间抽取的基-2 FFT算法 C语言实现(快速傅里叶变换,蝶形算法)
- 一种动态阈值白平衡算法实现
- linux拷贝4g以上文件夹,32位Ubuntu中支持超过4G的大内存的方法
- wordpress 迁移报错“Error establishing a database connection“
- php 足迹,php实现网站浏览足迹功能
- MySQL 求平均数
- 「实战」谷歌广告账户可以退款吗?怎么退款?
- powerCenter介绍
- Mybatis-plus-join连表查询
- 上周 GitHub 热点速览 vol.08:系统设计必看 The System Design Primer
热门文章
- 思科全球云指数:2010-2015预测报告
- Host '***' is blocked because of many connection errors...
- PLM 问卷调查表-A 关于公司
- 【廖雪峰官方网站/Java教程】泛型
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- 台大李宏毅Machine Learning 2017Fall学习笔记 (1)Introduction of machine Learning
- 理解Rust的所有权
- python import无法导入该脚本的父目录下的另一个子目录的模块
- L2-008. 最长对称子串
- 转帖:对linux中半增加半连接数量和防止服务器被dos攻击