mysql操作命令梳理(2)-alter(update、insert)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介:

在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列、创造或消去索引、改变现有列的类型、或重新命名列或表本身,也能改变表的注释和表的类型。
下面就针对alter修改命令的使用做一梳理:

在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列、创造或消去索引、改变现有列的类型、或重新命名列或表本身,也能改变表的注释和表的类型。
下面就针对alter修改命令的使用做一梳理:

1)删除列
alter table 表名 DROP 列名;               //或者  alter table 表名 drop column 列名;
-------------------------------------------------------------------------------------
drop database 库名;      //删除库
drop table 表名;           //删除表
delete from 表名;         //清空表中所有数据,但这张表没有删除,保留的是空表。
delete from 表名 where ...;          //删除表中字段
------------------------------------------------------------------------------------

2)增加列
alter table 表名 ADD 列名 列的属性(如INT NOT NULL COMMENT '注释说明')

3)修改列的类型信息。alter table 表名 CHANGE 列名 新列名 新列属性;  
alter table 表名 CHANGE 列名 新列名(这里可以用和原来列同名即可) BIGINT NOT NULL COMMENT '注释说明'

4)重命名列
alter table 表名 CHANGE 列名 新列名 BIGINT NOT NULL COMMENT '注释说明'

5)重命名表
alter table 表名 RENAME 表新名

6)删除表中主键
alter table 表名 drop primary key
-------------------------------------------------------------------------------------
如若删除带自增属性的主键,那么要先删除自增长,再删除主键
Alter table haha change id id int(10);        //删除自增长
Alter table haha drop primary key;           //删除主建
-------------------------------------------------------------------------------------

7)添加主键
alter table 表名 ADD CONSTRAINT PK_表名 PRIMARY KEY(列名1,列名2)
-------------------------------------------------------------------------------------
Alter table haha add primary key(id);               //将haha表的id列添加主键
Alter table haha change id id int(10) not null auto_increment;          //自增长属性
-------------------------------------------------------------------------------------
sql中constraint前缀的用意(PK、UK、DF、CK、FK)
--主键
constraint PK_字段 primary key(字段),
--唯一约束
constraint UK_字段 unique key(字段),
--默认约束
constrint DF_字段 default('默认值') for 字段,
--检查约束
constraint CK_字段 check(约束。如:len(字段)>1),
--主外键关系
constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段)
-------------------------------------------------------------------------------------

8)添加/创建索引
alter table 表名 add index 索引名 列名;         //普通索引
ALTER TABLE 表名 ADD UNIQUE index 索引名 (列名1,列名2);         //联合索引
ALTER TABLE 表名 ADD PRIMARY index KEY 索引名 列名;         //主键索引
-------------------------------------------------------------------------------------
SHOW INDEX FROM 表名字;       //查询索引

删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理
DROP index 索引名 ON 表名字 列名;       //删除普通索引
ALTER TABLE 表名 DROP INDEX 索引名 列名;       //删除普通索引
ALTER TABLE 表名 DROP UNIQUE 索引名 (列名1,列名2);     //删除联合索引
ALTER TABLE 表名 DROP PRIMARY KEY 索引名 列名;      //删除主键索引
-------------------------------------------------------------------------------------

9)添加唯一限制条件索引
alter table 表名 add unique emp_name2(cardnumber);             //empname 类型 为String 字符串类型

10)创建联合唯一索引
alter table 表名 ADD UNIQUE INDEX 索引名 (列名1,列名2);
alter ignore table 表名 add unique index(user_id,user_name);          //它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化.(慎用)

11)修改字段属性
alter table 表名 modify column 字段名 类型
alter table 表名 modify column 字段1 类型,字段2 类型
例如:将class表的name列属性改成varchar(100)
alter table class modify column name varchar(100);
或者:
alter table 表名 change 列名 列名 varchar(100);
alter table class change name name varchar(100);

---------------------------------------------------------------------------------------------------------------------------
上面提到了使用alter命令修改表名,修改列名;那么修改字段值,就需要使用update命令,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql>  select  from  huanqiu.haha;
+ ----+-----------+
| id |  name       |
+ ----+-----------+
|  1 | wangshibo |
| 11 | ouou      |
| 19 | hahahahha |
+ ----+-----------+
rows  in  set  (0.00 sec)
 
mysql>  update  huanqiu.haha  set  name = "wangshikui"  where  id=11;
Query OK, 1 row affected (0.00 sec)
Rows  matched: 1  Changed: 1  Warnings: 0
 
mysql>  select  from  huanqiu.haha;
+ ----+------------+
| id |  name        |
+ ----+------------+
|  1 | wangshibo  |
| 11 | wangshikui |
| 19 | hahahahha  |
+ ----+------------+
rows  in  set  (0.01 sec)

修改root登陆密码:

1
mysql>  update  mysql. user  set  password = password ( "654321" where  host= '192.168.1.101'  and  user = "root" ;

--------------------------------------------------------------------------------------------------------------------------------------------------

update 表名 set 列名="新的字段值" [where 限制条件1 and 限制条件1];
update 表名 set 列名1="新的字段值",列名2="新的字段值" [where 限制条件1 and 限制条件1] [ORDER BY ...] [LIMIT row_count];

 

insert into 表名 values(所有字段的插入值);
insert into 表名(指定字段) values(指定字段);
insert into 表名 values(所有字段的插入值),(所有字段的插入值),(所有字段的插入值);                //批量插入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql>  select  from  huanqiu.haha;
+ ----+------------+
| id |  name        |
+ ----+------------+
| 11 | wangshikui |
+ ----+------------+
1 row  in  set  (0.00 sec)
 
mysql>  insert  into  huanqiu.haha  values (1, "wangshibo" ),(2, "wangshikui" ),(3, "wangjuan" ),(4, "wangman" );
Query OK, 4  rows  affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql>  select  from  huanqiu.haha;
+ ----+------------+
| id |  name        |
+ ----+------------+
|  1 | wangshibo  |
|  2 | wangshikui |
|  3 | wangjuan   |
|  4 | wangman    |
| 11 | wangshikui |
+ ----+------------+

 

--------------------------------------------------------------------------------------------------------------------------------------------------
创建表时指定AUTO_INCREMENT自增值的初始值:

1
mysql>  CREATE  TABLE  表名 (ID  INT (5)  PRIMARY  KEY  AUTO_INCREMENT)AUTO_INCREMENT=100;

通过ALTER TABLE 修改初始值(但要大于表中的AUTO_INCREMENT自增值,否则设置无效):

1
mysql>ATLER  TABLE  表名 AUTO_INCREMENT=100;

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
就是说如果表中原本有AUTO_INCREMENT属性值连续为78、100的值,但100这个数据被删除了,下此再添加数据的时候自增值为101,100被重用了。
即使在你将整个表中的所有数据delete清空后,之前的自增序列最大值还是会被重用。
解决办法是使用下面命令:

1
ATLER  TABLE  表名 AUTO_INCREMENT=0;         //重新设置自增初始值

-----------------------------------------------------------------------------------------------------------------------------------------------
设置AUTO_INCREMENT_INCREMENT以及AUTO_INCREMENT_offset用户变量值(重启MySQL之后,这些修改会恢复为初始值1):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SET  auto_increment_increment=10;     //自增量每次增加的值改为10,
mysql> SET  auto_increment_offset=2;        //第一次加载数值时的偏移值的个位值
mysql>SHOW VARIABLES  LIKE  'AUTO_INC%' ;      //查看修改后变量的值
 
mysql>SHOW  TABLE  STATUS  FROM  NAME_DB;      //显示数据库NAME_DB中所有表的信息
 
mysql>SHOW  CREATE  TABLE  NAME_TBL;       //显示表NAME_TBL创建时的信息
 
mysql>SHOW VARIABLES  LIKE  'AUTO_INC%' ;      //显示MySQL的AUTO_INC开头的用户会话变量(SHOW  GLOBAL  VARIABLES)
+ --------------------------+-------+
| Variable_name | Value |
+ --------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+ --------------------------+-------+
rows  in  set  (0.00 sec)
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
分类:  Mysql
本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/6269356.html ,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
232 0
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
693 28
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
305 5
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
426 3
|
存储 自然语言处理 关系型数据库
MySQL全文索引源码剖析之Insert语句执行过程
【8月更文挑战第17天】在MySQL中,处理含全文索引的`INSERT`语句涉及多步骤。首先进行语法解析确认语句结构无误;接着语义分析检查数据是否符合表结构及约束。随后存储引擎执行插入操作,若涉及全文索引则进行分词处理,并更新倒排索引结构。此外,事务管理确保了操作的完整性和一致性。通过示例创建含全文索引的表并插入数据,可见MySQL如何高效地处理此类操作,有助于优化数据库性能和提升全文搜索效果。
274 2
|
关系型数据库 MySQL
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
1540 2
|
存储 SQL 关系型数据库
MySQL中的update操作与锁机制
本文探讨MySQL中`UPDATE`操作的自动加锁机制及其对数据一致性的保障作用。尤其在InnoDB存储引擎下,系统会在涉及索引的更新操作中加行锁或间隙锁,防止多事务并发修改同一条记录。通过福利码兑换系统的实例展示,当线程A开启事务更新库存时,线程B试图更新相同记录会被阻塞,直至线程A提交。此外,文章还介绍了乐观锁及版本号控制等策略进一步提升并发性能的方法。作者:小明爱吃火锅,来源:稀土掘金。
897 2
|
存储 关系型数据库 MySQL
在 MySQL 中使用 Insert Into Select
【8月更文挑战第11天】
7792 0
在 MySQL 中使用 Insert Into Select

推荐镜像

更多