今天开始的时间比昨天晚,其实午休的时间是差不多的,只是起来后稍微看了一点新闻,10分钟时间就没有了,所以要养成一个好习惯还真不容易,另外就是工作时间少看新闻,太浪费时间。

昨天在执行一个alter SQL语句时总是提示错误,看了好久才发现忘记写表名了,这也反映出对于基本的SQL操作还是不熟练,所以今天记录一下,由于alter table的内容很多,所以今天只是分析一下和add有关的内容。

一、语法定义

还是参考官方文档,其定义如下:

从这个定义上我们可以看到,必要的语句是

alter table tbl_name [command].

同时,这条语句还支持多个命令,相信很多人在修改一个表,比如增加几列时,都会写多个alter语句,但实际上一条就搞定了。

二、语义详解:

  下面我们对add相关的语法进行详细分析

  1. ADD  [COLUMN] col_name column_definition  [FIRST | AFTER col_name ]  | ADD [COLUMN] (col_name column_definition,...)

通过这个定义我们可以知道以下知识点:

   1)column关键字是可以省略的,以前我就闹过这个笑语,有同事写了个add 语句问我哪儿错了,我说是没有写column关键字。。现在想起简直好尴尬。

2)一条语句可以写多个add语句

   3)我们可以指定把这个列添加到某一列后面,或者是让其作为第一列,相应使用after col_name或first.

4)列的定义与创建表时报定义方式一致,即我们在写create table时怎么给列进行定义的,这儿就怎么定义

  2.  ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option]

  这是添加普通索引的定义,主要有以下几点需要注意:

   1)需要使用INDEX或KEY来表明这是添加的一个索引,索引的名字可选。

   2)对于某些支持多种索引类型的引擎来说,我们可以指定索引的类型,指定的语句是使用USING 索引类型名,如果未指定,则使用第一个,具体如下:

Storage Engine Permissible Index Types
InnoDB BTREE
MyISAM BTREE
MEMORY/HEAP HASHBTREE
NDB HASHBTREE (see note in text)

     从上表我们可以看到,对于常用的InnoDB和MyISAM来说,其索引都只能是BTREE,所以这个index_type其实是没有必要指定的,通常情况下。

   3)index_col_name的定义是col_name[(length)] [ASC|DESC],即要作为索引的列及其顺序,支持多个列构成一个索引,默认情况下升序

   4)  index_option 指索引的一些附加信息,常用的是注释,形如comment 'this is a index'. 

3.  ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option]

这个语句表示添加主键约束,对于index_type,(index_col_name,..)及[index_option]来说前面已经解释过了,这里再解释一下 constraint [symbol].

   constraint 是约束的意思,后面可指定一个自定义的约束名,如果不提供,则mysql会自己生成一个约束名

4. ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...

这个语句表示添加惟一约束,如果symbol和index_name都指定的话,则索引名取index_name,否则哪个指定了就取哪个,如果都没指定取列名,如果有多个列,取第一列的列名作为索引名

5.  ADD FULLTEXT [INDEX|KEY] [index_name] (index_col_name,...) [index_option] .

本语句表示添加全文索引, 其可选项不必再解释

6. ADD SPATIAL [INDEX|KEY] [index_name(index_col_name,...) [index_option]

      本语句表示添加空间索引, 其可选项也不必再解释

7. ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

本语句表示添加外键,需要注意的是reference_definition, 其形式如下:REFERENCES tbl_name (index_col_name,...), 即要指明关联到哪个表的哪个字段,或者是哪些字段。

三、总结

通过分析我们可以发现,使用alter table add类的语句,主要用于添加新的列和新的索引,对于索引的创建来说,有专门的create index 语句,这个相当于是另一种写法。记住了这个语句,我们就可以很方便的去对表结构做一些调整。

  

强大的修改数据库修改语句ALTER TABLE(一)[20160712]的更多相关文章

  1. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  2. sql语句-ALTER TABLE

    在工作中常遇到要维护数据库表的列,这里主要介绍sql语句中的ALTER TABLE 语句.ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 如需在表中添加列,请使用下列语法: ALTE ...

  3. mysql数据库操作语句大全

    一 . 常用mysql命令行命令 1 .启动MYSQL服务  net start mysql 停止MYSQL服务  net stop mysql 2 . netstat –na | findstr 3 ...

  4. alter table 修改表结构规范

    use database_name; ) )), ADD INDEX index_time ( `timeId` ); # 添加主键: alter table table_name add prima ...

  5. sql语句修改数据库字段的长度

    修改字段的长度 alter table [OtpimizeRoute_Test].[dbo].[T_QueueFile] alter column ListFileName nvarchar()

  6. 【转】SQL 语句:Alter table

    转载自:http://www.w3school.com.cn/sql/sql_alter.asp ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. SQL ...

  7. MSSQL 修改数据库的排序规则

    1.修改数据库排序规则 ALTER DATABASE [CHARACTER] COLLATE Chinese_PRC_CI_AS ; 2.修改表中列的排序规则 如果下列其中之一当前正在引用一个列,则无 ...

  8. MSSQL2005 修改数据库的排序规则

    1.修改数据库排序规则ALTER DATABASE [DataBaseName] COLLATE Chinese_PRC_CI_AS ; 2.修改表中列的排序规则 如果下列其中之一当前正在引用一个列, ...

  9. SQL ALTER TABLE 语句

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

随机推荐

  1. 更新iOS Distribution Certificates

    1. 鑰匙圈存取 -> 憑證輔助程式 -> 從憑證授權要求憑證 email:xxx@xxxx 得到 Blia_20140129.certSigningReques 2.進入開發帳號 憑證 ...

  2. Spring4 MVC Hibernate4集成

      Spring4 MVC Hibernate4集成 一.    本文所用环境 Spring4.0.3.RELEASE Hibernate4.3.5.Final Mysql 二.    工程目录 三. ...

  3. 【转】如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...

  4. iOS开发之应用内检测手机锁屏,解锁状态

    iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...

  5. JAVA语法基础之函数的使用说明

  6. Unity3d插件汇总

    Unity3d 中的svn插件 插件下载地址:http://www.dehome.net/down/viewfile.php?file_id=53

  7. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)

    题目大意 我们说一个无向图是 p-interesting 当且仅当这个无向图满足如下条件: 1. 该图恰有 2 * n + p 条边 2. 该图没有自环和重边 3. 该图的任意一个包含 k 个节点的子 ...

  8. 使用word和pdf进行仿书编辑的经验

    一.问题的提出:    一本书扫描好,要将书中的图片转换为文字版的word文档.二.问题的分析:    1.文字的提取    2.文字的编排三.问题的解决    1.如果用的是Adobe Acroba ...

  9. csv大文件分割以及添加表头

    注:这里说的大文件也不是太大,只有60多M而已(70多万条数据),相对比较大而已. 为了减轻编辑的工作,某种情况下网站上可能用会到csv格式的文件进行数据导入,但一般网站除了有上传文件大小限制以外,还 ...

  10. 网络安装archlinux(2012.8.20)笔记

    周末闲极无聊,把烂笔记本翻出来想装个Archlinux,发现USB不能启动,光驱也挂了,只好网络安装. 我先后试了两种安装方式,一种纯互联网启动,安装,一种局域网启动,再互联网安装.分别说说. 不管哪 ...