sql插入删除表内字段基础操作
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」表格中:
- ----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------
- **empno** **ename** **job** **manager** **hiredate** **salary** **comm** **deptno**
- 8001 SIMON MANAGER 7369 2001-02-03 3300 NULL 50
- 8002 JOHN PROGRAMMER 8001 2002-01-01 2300 NULL 50
- 8003 GREEN ENGINEER 8001 2003-05-01 2000 NULL 50
- ----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------
你当然可以分别执行三个新增叙述将三个员工资料新增到「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插入删除表内字段基础操作的更多相关文章
- SQL语句 删除表user 中字段name 内容重复的记录,
public class T01 { public static void main(String[] args) { int j=4; j=j+=j-=j*=j; System.out.printl ...
- Sqlserver2012 使用sql语句增加(或删除)表一个字段
前言 Mark在SqlServer 2012 的数据库使用sql语句增加(或删除)一张表的一个字段. 使用Sql语句增加表的一个字段 [1]语法: alter table table_name add ...
- Access sql语句创建表及字段类型
创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...
- Access sql语句创建表及字段类型(转)
http://www.cnblogs.com/hnyei/archive/2012/02/23/2364812.html 创建一张空表: Sql="Create TABLE [表名]&quo ...
- SQL查询每个表的字段数量
--SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- Oracle删除表、字段之前判断表、字段是否存在
这篇文章主要介绍了Oracle删除表.字段之前判断表.字段是否存在的相关资料,需要的朋友可以参考下 在Oracle中若删除一个不存在的表,如 “DROP TABLE tableName”,则会提示: ...
- SQL Server删除表信息的三种方法
1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student --不加where条件,删除表中的所有记录 go ...
- sql 创建表、删除表 增加字段 删除字段操作
下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...
随机推荐
- The command 'new_value' for SQLPlus
Format: column column_name new_value var_name Meaning: use the column_name of a select statment to c ...
- 如何在 Linux 中清除缓存(Cache)
如何在 Linux 中清除缓存(Cache) 方法一: http://mp.weixin.qq.com/s?__biz=MjM5ODAzODgyMQ==&am ...
- shell脚本编程-循环(for、while、until)
for命令格式:– list参数:迭代中要用的一系列值– 每个迭代中,变量var会包含列表中的当前值– do和done语句之间输入的命令可以是一条或多条标准的bash shell命令 1 2 3 ...
- SQLSERVER 数据库查看各表的记录数
select a.name as 表名,max(b.rows) as 记录条数 from sysobjects a ,sysindexes b where a. ...
- 使用HttpClient抓取网站首页
HttpClient是Apache开发的第三方Java库,可以用来进行网络爬虫的开发,相关API的可以在http://hc.apache.org/httpcomponents-client-ga/ht ...
- instruments 教程
https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started
- SQL exist
EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因SELECT ID,NAME FROM A WHERE ID IN (SELECT AID FRO ...
- spring mvc 的Controller类默认Scope是单例(singleton)的
使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(s ...
- Java基础之集合框架——使用真的的链表LinkedList<>(TryPolyLine)
控制台程序. public class Point { // Create a point from its coordinates public Point(double xVal, double ...
- JDK里的设计模式
一.Creational patterns 创建模式 Abstract factory (recognizeable by creational methods returning the facto ...