1 取得表格资讯

1.1 DESCRIBE指令

「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的:

你在MySQL的工具中执行「DESC cmdev.dept」指令以后,MySQL会传回「cmdev.dept」表格的结构资讯:

1.2 栏位顺序

每一个表格在设计的时候,都会决定它有哪一些栏位,和所有栏位的详细设定。另外也会决定表格中的栏位顺序,知道表格栏位顺序在接下来的讨论中是很重要的:

注:如何建立一个新的表格会在「第八章、表格与索引」中讨论。

2 新增

2.1 基础新增叙述

新增资料到资料库的表格中使用「INSERT」叙述,下列是这个叙述的基本语法:

使用这个语法新增纪录的时候,要特别注意表格的栏位个数与顺序,下列的新增叙述会新增一笔部门的纪录到「cmdev.dept」表格中:

除了明确的指定新增纪录的每一个栏位资料外,你也可以使用「DEFAULT」关键字,让MySQL为你写入在设计表格的时候,为栏位指定的预设值。下列的新增叙述同样会新增一笔部门的纪录到「cmdev.dept」表格中,不过部门的所在位置(location)栏位值指定为使用预设值:

使用这种语法新增纪录的时候,如果资料个数与栏位个数不一样的话,就会发生错误:

资料个数虽然没有错,顺序却不对了,也有可能会造成错误:

新增叙述的另外一种语法,就提供比较灵活的新增纪录方式,你可以自己指定新增纪录的栏位个数和顺序:

在你额外为这个新增叙述指定栏位以后,指定储存资料的时候就要依照自己指定的栏位个数与顺序:

如果没有依照自己指定的栏位个数与顺序,就会发生错误:

因为这种新增叙述的语法可以自己指定栏位的个数与顺序,所以你只要指定写入栏位的资料就可以了。不过要特别注意下列两种语法的差异:

也因为这样的规定,所以下列这个新增叙述在语法上虽然没有错误,如果违反表格设计上的规定,同样会造成错误:

这种新增叙述的语法还有一个比较特别的用法,如果你要新增的纪录,所有栏位的值都要使用预设值,就可以使用下列的写法。不过要特别注意下列的新增叙述执行以后会造成错误,因为「deptno」与「dname」栏位的预设值是「NULL」,可是它们又不能储存「NULL」:

下列是新增叙述的第三种语法:

这种语法只是提供你另外一种新增纪录的写法,下列两个新增叙述的效果是一样的:

2.2 同时新增多笔纪录

上列讨论的新增叙述执行以后,都是一个叙述新增一笔纪录,如果需要的话,你也可以在一个新增叙述新增多笔纪录,差异只有在「VALUES」子句后面新增资料的指定:

如果你要新增下列三个员工资料到「cmdev.emp」表格中:

  1. ----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------
  2. **empno**   **ename**   **job**      **manager**   **hiredate**   **salary**   **comm**   **deptno**
  3. 8001        SIMON       MANAGER      7369          2001-02-03     3300         NULL       50
  4. 8002        JOHN        PROGRAMMER   8001          2002-01-01     2300         NULL       50
  5. 8003        GREEN       ENGINEER     8001          2003-05-01     2000         NULL       50
  6. ----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------

你当然可以分别执行三个新增叙述将三个员工资料新增到「cmdev.emp」表格中;你也可以使用下列一个新增叙述,这个叙述执行以后,同样会新增三笔纪录:

2.3 索引值

在设计表格的时候,通常会视需要指定表格中的某一个栏位为「主索引」栏位:

注:一个表格除了可以设定「主索引」栏位外,资料库还提供其它几种不同的「索引」,索引的应用与设定会在后面「第八章、表格与索引」中详细讨论。

如果一个表格设定了某一个栏位为主索引以后,你在新增纪录时就不可以违反主索引的规定,否则会产生错误:

你可以在使用「INSERT」叙述的时候,加入「IGNORE」关键字,它可以在执行一个违反主索引规定的新增叙述时,自动忽略新增的动作,这样就不会产生错误讯息了:

2.4 索引值与ON DUPLICATE KEY UPDATE

使用「INSERT」叙述新增纪录的时候,还可以视需要在最后搭配一串关键字「ON DUPLICATE KEY UPDATE」,它可以用来指定在违反重复索引值的规定时要执行的修改:

需要为「INSERT」叙述搭配「ON DUPLICATE KEY UPDATE」的情况会比较特殊一些,所以接下来会使用「cmdev.travel」这个表格来讨论它的用法,「cmdev.travel」是员工资料库中用来储存出差资料的表格,每一个员工到某个地方出差的资料,都会储存在这个表格中:

因为这个表格的设计方式,所以如果要处理编号「7900」的员工到「BOSTON」出差资料的话,你就要执行下列的动作:

注:修改叙述「UPDATE」在下一节讨论。

你会发现要处理员工出差资料会是一件不算简单的工作,搭配「ON DUPLICATE KEY UPDATE」的「INSERT」叙述,可以让处理这类需求的叙述比较简单一些:

这个「INSERT」叙述执行以后,资料库会帮你执行需要的检查,根据检查的结果执行不同的动作:

2.5 「REPLACE」叙述

除了使用「INSERT」叙述新增纪录外,「REPLACE」叙述同样可以新增纪录,它们的语法几乎相同:

「INSERT」叙述的另一种写法也可以套用给「REPLACE」叙述:

会使用「REPLACE」叙述新增纪录的原因,主要还是考虑索引值的情况,「REPLACE」叙述在没有违反索引值的规定时,效果跟「INSERT」叙述一样,同样会新增纪录到表格中。

在发生重复索引值的时候,「INSERT」叙述会发生错误:

「INSERT」叙述搭配「IGNORE」关键字的时候:

同样的情况改用「REPLACE」叙述的话,它会执行修改纪录的动作:

3 修改

修改已经储存在表格中的纪录使用「UPDATE」叙述,下列是它的基本语法:

使用「UPDATE」叙述的时候,通常会搭配使用「WHERE」子句,用来指定要修改的纪录:

所以你在执行「UPDATE」叙述的时候,一定要依照实际的需求,正确的设定修改的条件。以下列两个修改叙述来说,它们执行后的差异是很大的:

3.1 搭配「IGNORE」

在使用「UPDATE」叙述的时候,也可以视需要加入「IGNORE」关键字,它可以防止错误的修改叙述出现错误讯息:

除了上列的情况外,你还必须特别注意修改多个栏位值的情况。首先是没有「IGNORE」关键字的时候,错误的资料会在执行修改叙述的时候产生错误讯息,当然也不会执行任何修改的动作:

同样的修改叙述加入「IGNORE」关键字后,执行后的结果可能会跟你想得不太一样了:

3.2 搭配「ORDER BY」与「LIMIT」

执行修改的时候使用「WHERE」子句是一般最常见的用法,在处理一些比较特殊的修改需求时,也会搭配「ORDER BY」与「LIMIT」子句:

「LIMIT」子句也可以在查询叙述中使用,不过在「UPDATE」叙述中使用「LIMIT」子句会有一个限制:

以同样为员工加薪一百的需求来说,搭配「ORDER BY」与「LIMIT」子句,可以完成许多不同的情况:

4 删除

4.1 「DELETE」叙述

删除表格中不再需要的纪录使用「DELETE」叙述,下列是它的语法:

使用「DELETE」叙述的时候,通常也会使用「WHERE」子句设定要删除哪些纪录:

执行删除的时候也可以搭配「ORDER BY」与「LIMIT」子句:

4.2 「TRUNCATE」叙述

如果要删除一个表格中所有的纪录,你可以选择使用「TRUNCATE」叙述,下列是它的语法:

要执行删除表格中所有的纪录,下列两个叙述的效果是一样的:

「TRUNCATE」叙述在执行删除纪录的时候,会比使用「DELETE」叙述的效率好一些,尤其是表格中的纪录非常多的时候会更明显。

sql插入删除表内字段基础操作的更多相关文章

  1. SQL语句 删除表user 中字段name 内容重复的记录,

    public class T01 { public static void main(String[] args) { int j=4; j=j+=j-=j*=j; System.out.printl ...

  2. Sqlserver2012 使用sql语句增加(或删除)表一个字段

    前言 Mark在SqlServer 2012 的数据库使用sql语句增加(或删除)一张表的一个字段. 使用Sql语句增加表的一个字段 [1]语法: alter table table_name add ...

  3. Access sql语句创建表及字段类型

    创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...

  4. Access sql语句创建表及字段类型(转)

    http://www.cnblogs.com/hnyei/archive/2012/02/23/2364812.html 创建一张空表: Sql="Create TABLE [表名]&quo ...

  5. SQL查询每个表的字段数量

    --SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...

  6. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  7. Oracle删除表、字段之前判断表、字段是否存在

    这篇文章主要介绍了Oracle删除表.字段之前判断表.字段是否存在的相关资料,需要的朋友可以参考下 在Oracle中若删除一个不存在的表,如 “DROP TABLE tableName”,则会提示: ...

  8. SQL Server删除表信息的三种方法

    1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go ...

  9. sql 创建表、删除表 增加字段 删除字段操作

    下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...

随机推荐

  1. SQLServer如何处理数据集的维度变化

    Student表有三列,分别是姓名.课程.成绩 Name Curricula Mark 张三 语文 70 李四 数学 80 王朝 英语 59 城南 马哲 70 王朝 语文 90 我想得到的效果是,列出 ...

  2. jQuery 插件 获取URL参数

    jQuery 获取URL参数的插件 jQuery Url Query String 下载地址:http://plugins.jquery.com/getUrlQueryString.js/   var ...

  3. TRUNCATE引起CPU异常上涨

    13:05 2015/9/11 午睡醒来收到几封CPU使用率预警邮件.登录对应服务器,打开资源监视器,看到sqlservr.exe进程的CPU达到40%(平常服务器CPU消耗在10%以内).查看CPU ...

  4. throw 子句

    throws是声明方法时抛出可能出现的异常,但不能捕获异常,也就是说并不直接处理异常,而是把它向上传递.其格式如下: 方法声明 throws 异常类名列表 若一个方法声明抛出异常,则表示该方法可能会抛 ...

  5. 让show parameter显示隐含参数(12C)

    1.创建视图show_hidden_v$parameter create or replace view show_hidden_v$parameter (inst_id,NUM , NAME , T ...

  6. arm跑飞 分析

    当arm跑飞后,可以用ICE 追踪是哪边出错了: 1. 链接ICE, 修改Ice的mode,由 udf -> system. (因为跑飞了,在UDF) 2. 查看寄存器: LR对应callbac ...

  7. SSM框架搭建

    http://blog.csdn.net/gebitan505/article/details/44455235/

  8. Java命令参数说明大全

    Java 在运行已编译完成的类时,是通过 java 虚拟机来装载和执行的,java 虚拟机通过操作系统命令 JAVA_HOME\bin\java –option 来启动,-option 为虚拟机参数, ...

  9. 河南省第八届ACM程序设计大赛总结

    简单的对这次省赛做个总结:总体来说这个比赛过程中做的还算比较顺利,虽然中间多多少少遇到一些坑,正式比赛开始后,我们就开始找水题,当然了我首先把英文题目翻译了一遍,发现了一道水题,这道题目其实就是判断点 ...

  10. yii中sphinx索引配置解析

    #MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/#请先将var/test/documents.sql导入数据库,并配置好 ...