1 建立表格

在建立好数据库以后,就可以根据储存资料的需求,使用SQL叙述建立所有需要的表格(table)。建立表格的设定非常多,以建立“world.city”表格来说,它的叙述会像这样:

根据不同的需求,建立表格的语法有好几种,下列是建立表格基本的语法:

MySQL规定一个表格中至少要有一个字段,在设定表格中的字段时,至少要明确的决定字段的名称与型态,其它的字段设定都是选择性的,如果有一个以上字段,要使用逗号隔开:

使用需要的资料型态,就可以建立一个可以储存亲友通讯录的表格:

建立表格的时候可以使用“IF NOT EXISTS”选项,预防发生表格已存在的错误:

2 修改表格

使用“CREATE TABLE”叙述建立表格以后,如果发现某个字段或设定打错,或是在使用一阵子以后,发觉表格中有一些设定不太对。在这些情况下,你可以使用“ALTER TABLE”叙述来修改一个表格的结构:

2.1 增加字段

你可以使用下列的修改定义增加一个本来没有的字段:

如果你在增加字段的时候,没有指定新增字段的位置,MySQL会把这个字段放在最后一个:

你可以搭配使用“FIRST”关键字,把新增的字段放在第一个:

或是使用“AFTER”关键字,指定新增的字段要放在哪一个字段后面:

如果需要增加多个字段的话,也可以使用下列的语法一次把需要新增的字段,全部加到表格中;不过这种语法加入的新字段,都会放在最后面的位置:

注:“ALTER TABLE”叙述也可以用来增加索引,在这一章后面索引的部份一起讨论。

2.2 修改字段

如果需要修改字段的名称、型态、大小范围或其它字段属性,你可以使用下列两种修改定义来执行修改的工作。“CHANGE”可以修改字段的名称与定义,“MODIFY”只能修改字段的定义,不能修改字段名称:

以下列使用“CHANGE”关键字修改表格的叙述来说,它将“one”字段的名称修改为“changecolumn”,型态从“INT”修改为“BIGINT”,而且把修改后的字段位置放在“two”字段后面:

下列使用“MODIFY”关键字修改表格的叙述,它将“two”字段的型态从“INT”修改为“BIGINT”,而且把修改后的字段位置放在“three”字段后面:

2.3 删除字段

如果要删除一个表格中不需要的字段,可以使用下列的修改定义:

下列格的叙述会删除“two”字段:

2.4 修改表格名称

如果需要修改表格的名称,你可以使用下列两种叙述,包含在“ALTER TABLE”叙述中使用修改表格名称的修改定义;或是使用“RENAME TABLE”叙述:

下列两个叙述都可以把“mytable”表格名称修改为“mynewtable”:

3 删除表格

你可以使用下列的叙述删除一个不需要的表格:

注:使用“DROP TABLE”叙述执行删除表格的工作时,MySQL并不会再次跟你确认是否真的要删除,而是真的就直接删除了,表格储存的纪录资料当然也不见了。

5 建立索引

MySQL提供许多不同的方式让你建立需要的索引。通常在规划一个数据库的时候,会把表格所需要的索引一并规划好,在这样的情况下,你可以把建立索引的定义,加在“CREATE TABLE”叙述中,建立表格的时候就一起把索引建立好;不过也有可能在使用表格一阵子以后,才发觉有建立索引的需求,在这样的情况下,你可以使用“ALTER TABLE”或“CREATE INDEX”建立需要的索引。

5.1 在建立表格的时候建立索引

在建立表格的叙述中,你会定义出许多表格所需要的字段,在字段的定义中,除了名称、型态与属性,还可以加入“唯一索引”与“主索引键”的定义:

以下列这个建立储存联络簿的表格来说,你可以使用这样的语法在“id”字段后面加入“PRIMARY KEY”,指定“id”字段为主索引键,这表示“id”字段的值不可以重复,而且不可以储存“NULL”值;另外在“email”字段加入“UNIQUE KEY”,指定“email”字段为唯一索引,这表示“email”字段的值不可以重复:

下列是另外一种在“CREATE TABLE”叙述中建立索引的语法:

同样以建立储存联络簿的表格来说,下列两种建立索引语法的效果是一样的:

如果你要建立一般索引(可以重复的索引),或是要建立包含多个字段的索引时,就一定要把建立索引的定义加在所有字段定义后面:

在建立索引的时候,你可以指定某一个字段为建立索引的字段,不过有时候你只想要为一个字串型态字段的部份资料建立索引,或是指定建立的索引资料,是要依照由小到大,还是由大到小排列。有这样的需求时,你可以依照下列的语法来指定:

以建立联络簿的表格来说,为地址资料“address”字段建立索引的时候,如果你希望建立地址前五个字符的索引资料,而且依照由大到小的顺序。下列的叙述就可以建立这样的索引:

注:只有“CHAR”、“VARCHAR”、“BINARY”与“VARBINARY”型态的字段可以指定制作索引的长度。“ASC”或“DESC”可以使用在任何型态的字段。

如果一个表格使用的储存引擎是“MEMORY”的话,建立索引的时候还可以额外指定索引使用的“算法、algorithm”。使用其它储存引擎的表格,MySQL会忽略这个设定。索引使用的算法有“BTREE”与“HASH”两种,你可以使用下列的语法来指定索引使用的算法:

默认的“HASH”算法适合用在主索引键和唯一索引,这种算法在搜寻不能重复的资料时,效率会比较好;而“BTREE”算法适合用在可以允许重复资料的一般索引,在搜寻上会比“HASH”有更好的效率。

注:“FULLTEXT”索引只能用在“CHAR”、“VARCHAR”与“TEXT”型态的字段,而且表格使用的储存引擎必须是“MyISAM”。“SPATIAL”索引是“SPATIAL”型态字段专用的,而且表格使用的储存引擎必须是“MyISAM”。这两种索引不会在这里讨论。

5.2 在修改表格的时候建立索引

如果你想要为一个已经存在的表格建立索引的话,你可以在修改表格“ALTER TABLE”中建立索引:

以下列的范例来说,在建立联络簿表格时没有建立索引,你可以使用“ALTER TABLE”叙述建立需要的索引,不过一个“ALTER TABLE”叙述只能建立一个索引:

5.3 使用“CREATE INDEX”建立索引

需要为一个已经存在的表格建立索引,除了使用“ALTER TABLE”叙述建立索引外,还可以使用“CREATE INDEX”叙述建立唯一索引与一般索引:

使用“CREATE INDEX”叙述只能建立唯一索引与一般索引,你还是要使用“ALTER TABLE”叙述建立主索引键:

为一个已经存在的表格建立索引时,要特别注意主索引键与唯一索引这两种索引。如果这个表格没有任何纪录资料的话,那就不会有问题;可是如果表格中已经有纪录了,而且你想要建立一个主索引键时,有可能会发生下列的错误:

为一个已经存在、而且已经有纪录的表格建立唯一索引时,也有可能会发生下列的错误:

6 索引的名称

在“CREATE TABLE”或是“ALTER TABLE”叙述中建立索引的话,你可以为建立的索引取一个名称:

如果你在使用上列的语法建立索引的时候没有指定索引名称,MySQL会帮你取一个,索引的名称就是字段名称,如果是多个字段的索引,就会使用第一个字段当作索引名称。

使用“CREATE INDEX”建立索引的时候,就一定要指定一个索引名称:

注:在一般的操作中,你并不会用到索引名称;不过在删除索引的时候就会用到。

7 删除索引

如果一个已经建立好的索引已经不需要了,为了节省储存的空间,你可以使用下列的语法删除索引:

下列的叙述使用修改表格“ALTER TABLE”叙述删除不需要的索引:

你也可以使用下列的“DROP INDEX”叙述删除不需要的索引:

使用“ALTER TABLE”叙述可以一次删除多个索引,“DROP INDEX”叙述一次只能删除一个索引:

8 数值字段型态与AUTO_INCREMENT

在数据库的应用中,很常会遇到为纪录“编流水号”的需求,如果资料表中的每一笔纪录都需要一个递增的数值编号,你可以选择整数型态的字段后,再使用“AUTO_INCREMENT”字段属性:

如果一个公司想要储存员工开会的资料,你可以在建立开会资料表格的时候,为这个表格定义一个储存开会编号的字段,这个字段需要自动递增,而且会为它建立主索引键:

建立开会资料表格以后,另外建立一个储存参加会议的员工资料表格:

设定为“AUTO_INCREMENT”的整数字段,在新增资料的时候可以不用指定数值,MySQL会为你自动编制一个流水号并储存在纪录中;而接着要新增参加这次开会的员工资料到“participate”表格时,你需要用到MySQL刚才会为你在“meeting”表格中自动编制的流水号,这样的需求可以使用“LAST_INSERT_ID()”函式来取得:

新增这些开会与参加会议的员工资料后,就可以使用结合查询来查询开会资料了:

在新增资料时,要让MySQL为你自动编制一个流水号,并储存到纪录中的方式有下列几种:

MySQL是一个可以让多人同时使用的数据库,使用“LAST_INSERT_ID()”函式来取得自动编制的流水号数值,并不会因为不同的用户端同时使用而造成混乱:

“AUTO_INCREMENT”字段的一般用法通常是用来储存从“1”开始的流水号,每一笔新增的纪录都会自动加一成为新的编号。可是如果在新增纪录的时候,自己指定“AUTO_INCREMENT”字段一个数值,就会造成下列的情况:

“AUTO_INCREMENT”字段在你删除纪录以后,也不会帮你重新使用已经用过的编号:

注:使用“TRUNCATE TABLE”叙述删除包含“AUTO_INCREMENT”字段表格的所有纪录,编号会重新从头开始。

不要指定值,或是指定“NULL”值给“AUTO_INCREMENT”字段,都可以让MySQL为你自动编制一个流水号,并储存到纪录中,这两种也是比较好的方式;另外指定“AUTO_INCREMENT”字段值为“0”的方式也可以,不过会因为MySQL数据库服务器的环境设定而有不同的效果:

如果你需要编制的流水号范围是非常大的,你应该选择“AUTO_INCREMENT”字段的型态为“BIGINT”;MySQL另外提供一个“SERIAL”关键字,让你在定义这种字段时可以比较方便一些:

使用“MyISAM”储存引擎的表格,可以使用下列这种比较特殊的“AUTO_INCREMENT”字段:

这样的设定同样是请MySQL为你自动编制流水号,不过因为“AUTO_INCREMENT”字段包含在主索引键中,编制流水号的动作会不太一样:

注:在上列的范例中,是把“empno,location,counter”设定为主索引键;如果设定为唯一索引的话,也会有一样的效果;设定为一般索引的话,会造成错误。

使用“AUTO_INCREMENT”字段属性有下列几个重点:

  • 一个表格只能有一个“AUTO_INCREMENT”字段,而且要为它建立一个索引,而且通常是建立主索引键或唯一索引,这样可以防止重复的编号;不过MySQL也允许你建立可重复的索引
  • 只有整数型态才可以使用“AUTO_INCREMENT”字段属性,你可以根据编号大小的需求,选择使用“TINYINT”、“SMALLINT”、“MEDIUMINT”、“INT”或“BIGINT”,而且因为只会使用到正数,所以你可以加入“UNSIGNED”来增加编号的范围
  • 如果编号已经到字段型态的最大范围,例如一个“SMALLINT”型态,而且是指定为“UNSIGNED”的“AUTO_INCREMENT”字段,编号已经到“65535”了,如果再执行新增的叙述,就会造成“Duplicate entry ’65535′ for key ‘字段名称’”的错误

sql创建删除修改表的基本操作的更多相关文章

  1. 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍

    第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...

  2. hive 学习系列二(数据库的创建删除修改) 拿走,不谢。

    database 相当于一个目录或者命名空间,用来更好地进行表的管理 在hdfs 的目录位置大致如下: [root@iZbp12vtv76y9q3d633bh6Z /]# hadoop fs -ls ...

  3. Mysql的基础使用之SQL原生语句的使用:表的 创建 删除 修改 (一)

    上一篇主要讲的是关于Mysql的分支MariaDB在Linux下的安装 顺利安装完成的小伙伴,就可以接着来试试SQL的魅力了 红色为命令 蓝色为自定义名 查看数据库 MariaDB [(none)]& ...

  4. oracle创建、删除 数据库、建立表空间以及插入 删除 修改表

    一.创建.删除数据库 oracle OraDb11g_home->配置和移植工具->Database configration  Assistant->...然后可以创建或者删除数据 ...

  5. [No000005]C#注册表操作,创建,删除,修改,判断节点是否存在

    //用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除.键值的创建(设置值.修改),读取和删除.判断注册表项是否存在.判断键值是否存在. //准备工作: //1:要操作注册表 ...

  6. c# 注册表操作,创建,删除,修改,判断节点是否存在

    用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除.键值的创建(设置值.修改),读取和 删除.判断注册表项是否存在.判断键值是否存在. 准备工作: 1:要操作注册表,我们必须 ...

  7. MySQL学习(二)——SQL语句创建删除修改以及中文乱码问题

    一.对数据库的操作 1.创建一个库 create database 库名; 创建带有编码的:create database 库名 character set 编码; 查看编码:show create ...

  8. SQL基础(1)-创建及修改表

    1. 建表语句 CREATE TABLE fdh_client_info ( id varchar2(50) primary key, name varchar2(30) not null, sex ...

  9. SQL语句(四)可视化创建和修改表

    可视化创建修改表 数据库(teaching)->表->新建表 数据库(teaching)->表->(右键)设计->CHECK约束->添加---->标识(名称) ...

随机推荐

  1. MVC4怎么设置@Html.TextBoxFor这样的输入框的css样式

    在传统webForm中,输入框的这样的: <input id="userName" name="userName" type="text&quo ...

  2. Java Final, Finally, Finalize

    Final is a Keyword, final can be used in three different ways: final variable final method final cla ...

  3. Python-S13作业-day5-之 ATM

    Python-S13作业-day5-之 ATM 需求: 模拟实现一个ATM + 购物商城程序    额度 15000或自定义     实现购物商城,买东西加入 购物车,调用信用卡接口结账   其实是两 ...

  4. js的运算

    1.表达式 表达式是EMCAscript中的一个“短语”,解释器会通过计算把它转换成一个值.最简单的表达式是字面量或者变量名. 2.前置递增(++box)和后置递增(box++)的区别 看下面一段代码 ...

  5. CentOS6.5Minimal安装Gitlab7.5

    文章出处:http://www.restran.net/2015/04/09/gilab-centos-installation-note/ 在 CentOS 6.5 Minimal 系统环境下,用源 ...

  6. php 表单提交

    <?php header("Content-Type:text/html; charset=utf8"); class config{ public static funct ...

  7. 使用NSURLSession请求需要AD认证的HTTPS服务器

    关键代码:使用后台下载PDF文件 - (void)startDownloadPDF{ NSURLSession *session = [self session]; NSString *downloa ...

  8. ADO.net 实体类 、数据访问类

    程序分三层:界面层.业务逻辑层.数据访问层 比较规范的写程序方法,要把业务逻辑层和数据访问层分开,此时需要创建实体类和数据访问类 实体类: 例 using System; using System.C ...

  9. ADO.net 防止SQL 字符串注入攻击

    规避SQL注入 如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入Code值 p001' union select * from Info where '1'='1 //这样可 ...

  10. JS小练习 留言功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...