在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之alter和upate相关推荐

  1. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  2. Mysql之alter用法汇总

    为实现数据库中表规范化设计的目的,有时候需要对之前已经创建的表进行结构修改或者调整. 在MySQL中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列.创建或取消索引.更改原有 ...

  3. MySQL中alter命令知识

    MySQL中alter命令知识 文章目录 MySQL中alter命令知识 (一) 删除.添加.修改字段 1.删除表中的字段数据 2.添加新字段 指定字段插入位置 3.修改字段类型和名称 (二).修改表 ...

  4. MySQL使用ALTER USER修改密码

    MySQL使用ALTER USER修改密码 alter user修改密码 使用user()可以获取当前用户名 alter user修改密码 alter user test identified by ...

  5. MySQL中alter table range partition

    最近在用MySQL开发新功能时,使用到了alter table range partition的功能,在此总结下mysql innodb支持的alter table range partition相关 ...

  6. mySQL用alter使列为空_我可以配置MySQL,以便新添加的列默认允许空值吗?

    默认情况下,MySQL的默认行为是在alter table命令中允许空值.它可能与PHPMyAdmin有关. mysql> desc foo; +-----------+---------+-- ...

  7. Mysql学习总结(6)——MySql之ALTER命令用法详细解读

    MySql语法中Alter命令的用法,这是一个用法比较多的语法,而且功能还是很强大的. [sql] 

  8. mysql sqlserver alter语句区别_SQL ALTER

    SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下面 ...

  9. mysql 的alter table操作

    1.如下的语句,预期是执行后回滚,表里面并不会新增这个字段.实际情况却是新增了.因为alter table带有隐式提交的操作.在回滚前已经提交了. BEGIN; alter table XXX add ...

最新文章

  1. java spring 服务器关闭_通过springboot怎么停止服务器??
  2. 96.总线里的异步通信
  3. python中configparser_python中confIgparser模块学习
  4. 关于css加div布局和表格布局,菜鸟学习笔记:表格布局和div+css布局
  5. python3安装过程中出现的ssl问题,No module named _ssl或者renaming “_ssl“ since importing it failed
  6. SQLServer 维护脚本分享(08)临时数据库(tempdb)
  7. elasticsearch查询文档数量
  8. J2EE如何生成验证码图片和点击刷新验证码
  9. strstr 函数的实现
  10. mongodb常用语句(集合操作)
  11. UNIX环境高级编程——创建与打开IPC通道
  12. [转载] python输入一个年份、输出是否为闰年_Python程序检查给定年份是否为闰年
  13. javascript 日期时间函数(经典+完善+实用)
  14. python画图怎么确定坐标_像素坐标与绘图坐标
  15. MaxProxy代理可以替代911s5代理吗?还有哪些软件可以使用
  16. ONF与天地互连共同成立开放SDN推广中心(OSPC)
  17. html5 canvas消除锯齿,HTML5 Canvas 如何取消反锯齿绘图
  18. 伪装请求头伪装useragent比fake-useragent库好用的伪装请求头库: anti-useragent
  19. vs的oxc000007b错误和key valid错误
  20. CentOS集群上安装Ganglia-3.6.1监控

热门文章

  1. 2-29 while
  2. 把接口作为函数的参数,那么任何实现了接口的类的实例都可以作为此函数的参数传递...
  3. 前端构建工具gulp之基本介绍
  4. JavaScript学习总结(二)数组和对象部分
  5. 【自译】八步成为数据科学家
  6. 如何让div水平垂直居中
  7. win7 IIS7.5配置伪静态
  8. PCMCIA接口采集卡系列
  9. android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用
  10. 趣链 BitXHub跨链平台 (1)技术架构