mysql中alter命令的用法

摘要:
当您想要更改表的名称、表的字段,或者想要在现有表中添加或删除列时,MySQL的ALTER命令非常有用。让我们开始创建一个名为tester_ tbl的用例:?123456789101112131415161718root@host#mysql uroot ppassword;输入密码:*******mysql˃useTUTORIALS;数据库changedmysql˃createtablestalter_tbl-˃;查询OK,0rowsafexpectedmysql˃SHOWCOLUMNSFOMTestater_tbl;+--------+--------+-----+--------+----------+|Field | Type | Null | Key | Default | Extra |+-------+-------+------+---------+-------+------+------+|||int | YES | | Null | | c|char | YES ||Null | |+-------+------+------+-------+-------+-------+2 rowinset放弃、添加或重新定位字段:假设您想从上面的MySQL表中删除现有列i,然后按如下方式在ALTER命令中使用DROP子句?

MySQL的ALTER命令是非常有用的,当想改变表的名称,表的字段,或者如果要添加或删除一个现有的表中的列。

让我们开始创建一个表名为testalter_tbl的用例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table testalter_tbl
  -> (
  -> i INT,
  -> c CHAR(1)
  -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type  | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i   | int(11) | YES |   | NULL  |    |
| c   | char(1) | YES |   | NULL  |    |
+-------+---------+------+-----+---------+-------+
2 rows inset(0.00 sec)

丢弃,添加或重新定位字段:

假设要删除一个现有的第i列从上面的MySQL表,那么使用DROP子句一起使用ALTER命令如下

1
mysql> ALTERTABLEtestalter_tbl DROPi;

如果该表中剩下唯一的一个字段,DROP命令是不起作用的。

要添加一列,使用“添加”ADD“指定的列定义。下面的语句恢复?列的testalter_tbl

1
mysql> ALTERTABLEtestalter_tbl ADDi INT;

testalter将包含相同的两列,当第一次创建表不会有相同的结构。这是因为新列添加到默认情况下,该表结束。即使ioriginally是第一列MYTBL,现在是最后一条:

1
2
3
4
5
6
7
8
mysql> SHOW COLUMNS FROMtestalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type  | Null| Key| Default | Extra |
+-------+---------+------+-----+---------+-------+
| c   | char(1) | YES |   | NULL  |    |
| i   | int(11) | YES |   | NULL  |    |
+-------+---------+------+-----+---------+-------+
2 rowsinset (0.00 sec)

想指定的表中的一列位置,可以使用第一个它的第一列,,或ALTER COL_NAME到指示新列应该放在后COL_NAME。请尝试以下ALTER TABLE语句中,使用SHOW COLUMNS后,每个人都有不同的影响:

1
2
3
4
ALTER TABLEtestalter_tbl DROPi;
ALTER TABLEtestalter_tbl ADDi INT FIRST;
ALTER TABLEtestalter_tbl DROPi;
ALTER TABLEtestalter_tbl ADDi INT AFTERc;
第一和AFTER符只能与ADD子句。这意味着,如果要重新定位现有的列在一个表中,必须先删除它,然后将它添加在新的位置。
更改列定义或名称:

要更改列的定义,修改或变更条款,连同ALTER命令。例如,要更改列c从CHAR(1)为CHAR(10),这样做:

1
mysql> ALTERTABLEtestalter_tbl MODIFYc CHAR(10);
CHANGE语法是有点不同。变更后的关键字,要更改的列的名字,然后指定新的定义,其中包括新的名称。试试下面的例子:
1
mysql> ALTERTABLEtestalter_tbl CHANGE i j BIGINT;

如果现在使用转换j字段的BIGINT为int而不改变列名,该声明应该是:

1
mysql> ALTERTABLEtestalter_tbl CHANGE j j INT;

ALTER TABLE的影响,NULL和默认值属性:

当修改或更改列,也可以指定是否该列可以包含NULL值,它的默认值是什么。事实上,如果不这样做,MySQL会自动分配给这些属性的值。

下面是示例默认情况下,NOT NULL列的值将是100。

1
2
mysql> ALTERTABLEtestalter_tbl
  -> MODIFYj BIGINTNOTNULL DEFAULT100;

如果不使用上面的命令,那么MySQL将填补所有的列中的NULL值。
更改列的默认值:

可以使用ALTER命令更改任何列的默认值。试试下面的例子。

1
2
3
4
5
6
7
8
9
mysql> ALTERTABLEtestalter_tbl ALTERi SETDEFAULT1000;
mysql> SHOW COLUMNS FROMtestalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type  | Null| Key| Default | Extra |
+-------+---------+------+-----+---------+-------+
| c   | char(1) | YES |   | NULL  |    |
| i   | int(11) | YES |   | 1000  |    |
+-------+---------+------+-----+---------+-------+
2 rowsinset (0.00 sec)

可以从任何一列中删除默认约束通过使用DROP子句一起使用ALTER命令。

1
2
3
4
5
6
7
8
9
mysql> ALTERTABLEtestalter_tbl ALTERi DROPDEFAULT;
mysql> SHOW COLUMNS FROMtestalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type  | Null| Key| Default | Extra |
+-------+---------+------+-----+---------+-------+
| c   | char(1) | YES |   | NULL  |    |
| i   | int(11) | YES |   | NULL  |    |
+-------+---------+------+-----+---------+-------+
2 rowsinset (0.00 sec)

更改表类型:

可以使用ALTER命令及TYPE子句一起使用的修改表类型。试试下面的示例中,改变testalter_tbl 为InnoDB类型。

要找出一个表的当前类型,使用SHOW TABLE STATUS语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> ALTERTABLEtestalter_tbl TYPE = InnoDB;
mysql> SHOW TABLESTATUS LIKE'testalter_tbl'G
*************************** 1. row ****************
      Name: testalter_tbl
      Type: InnoDB
   Row_format: Fixed
      Rows: 0
 Avg_row_length: 0
  Data_length: 0
Max_data_length: 25769803775
  Index_length: 1024
   Data_free: 0
 Auto_increment: NULL
  Create_time: 2007-06-03 08:04:36
  Update_time: 2007-06-03 08:04:36
   Check_time: NULL
 Create_options:
    Comment:
1 row inset(0.00 sec)

重命名表:

要重命名表,使用ALTER TABLE语句中RENAME选项。试试下面的例子,重命名testalter_tbl为alter_tbl

1
mysql> ALTERTABLEtestalter_tbl RENAME TOalter_tbl;

可以使用ALTER命令来创建和删除索引在MySQL文件。在下一章中,我们将看到此功能。

免责声明:文章转载自《mysql中alter命令的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等goland上gin无代码自动提示下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用sonar进行代码质量检查

最近公司要求,学习了一下使用sonar进行代码分析检查。其中走了许多坑,配置也崩溃好几次。。。因此写下详细步骤以防以后再碰到这样的坑 一、安装Sonar 环境:Windows10,sonarqube6.7,java1.8,MySQL5.7.1  (注:用来检查java1.8以下的项目依旧可以使用,但是环境变量得是1.8的才能启动,我本次使用检查的项目就是j...

mysql创建触发器

首先,我们来了解一下什么是触发器,触发器,就是在对一张表数据进行增(insert),删(delete),改(update)的时候,为了保持数据的一致性,对别的表也要进行相应的数据修改。 我们都知道mysql最后事务提交后,数据是会保存到磁盘上的,那么每次在insert,delete,update时候旧数据和新数据,会在内存中生成临时的行数据,分别叫old和...

非root用户 开机而启动mysql服务【转】

开机自动运行脚本,可以将脚本的执行命令放在 /etc/rc.d/rc.local 文件中,但是这样开机自动运行这个脚本的用户默认为root。 如果想以某个非root用户运行脚本,可以使用如下命令: su - user -c /home/user/run.sh 注意格式: su(空格)-(空格)-c(空格)命令路径.... 开机启动脚本start.sh...

MySql免安装版安装配置,附MySQL服务无法启动解决方案

文首提要: 我下载的MySQL版本是:mysql-5.7.17-winx64.zip Archive版;系统:Windows7 64位。 一、解压文件 下载好MySQL后,解压到D盘下,也可以根据个人喜好解压在其他盘符的路径下,解压后的路径是:D:mysql-5.7.17-winx64。解压好后不要太兴奋,需要配置默认文件呢! 二、配置默认文件 解压后的文...

Spring Boot 连接MySql数据库

Spring Boot 以后也许会成为入门Spring的首选! 记一下Spring Boot 成功连接Mysql数据库的方法步骤! 一、新建Maven工程,不全Maven所需文件夹,在pom.xml引入SpringBoot的依赖包!可以参照:http://www.cnblogs.com/liangblog/p/5207855.html 二、有两种方法与数据...

mysql-community-server-5.7.24 & 5.7.31 (5.6.35 升级到 5.7.24)

阶段1: rpm -qa | grep mysql wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.24-1.el6.x86_64.rpm-bundle.tar wget https://cdn.mysql.com/archives/mysql-5.7/mysql-community-serv...