仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 621|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之详解MySQL数据库之更新语句

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。  用于操纵数据库的SQL一样平常分为两种,一种是查询语句,也就是我们所说的SELECT语句,别的一种就是更新语句,也叫做数据操纵语句。言外之意,就是对数据举行修正。在尺度的SQL中有3个语句,它们是INSERT、UPDATE和DELETE。在MySQL中又多了一个REPLACE语句,因而,本文以MySQL为背景来会商怎样使有SQL中的更新语句。
  1、INSERT和REPLACE
  INSERT和REPLACE语句的功效都是向表中拔出新的数据。这两条语句的语法相似。它们的次要区分是怎样处置反复的数据。
  1.INSERT的一样平常用法
  MySQL中的INSERT语句和尺度的INSERT不太一样,在尺度的SQL语句中,一次拔出一笔记录的INSERT语句只要一种情势。
  INSERTINTOtablename(列名…)VALUES(列值);
  而在MySQL中另有别的一种情势。
  INSERTINTOtablenameSETcolumn_name1=value1,column_name2=value2,…;
  第一种办法将列名和列值分隔了,在利用时,列名必需和列值的数分歧。以下面的语句向users表中拔出了一笔记录:
  INSERTINTOusers(id,name,age)VALUES(123,姚明,25);
  第二种办法同意列名和列值成对呈现和利用,以下面的语句将发生中样的效果。
  INSERTINTOusersSETid=123,name=姚明,age=25;
  假如利用了SET体例,必需最少为一列赋值。假如某一个字段利用了省缺值(如默许或自增值),这两种办法都能够省略这些字段。如id字段上利用了自增值,下面两条语句能够写成以下情势:
  INSERTINTOusers(name,age)VALUES(姚明,25);
  INSERTINTOusesSETname=姚明,age=25;
  MySQL在VALUES上也做了些变更。假如VALUES中甚么都不写,那MySQL将利用表中每列的默许值来拔出新纪录。
  INSERTINTOusers()VALUES();
  假如表名后甚么都不写,就暗示向表中一切的字段赋值。利用这类体例,不但在VALUES中的值要和列数分歧,并且按次不克不及倒置。INSERTINTOusersVALUES(123,姚明,25);
  假如将INSERT语句写成以下情势MySQL将会报错。
  INSERTINTOusersVALUES(姚明,25);
  2.利用INSERT拔出多笔记录
  看到这个题目大概人人会问,这有甚么好说的,挪用屡次INSERT语句不就能够拔出多笔记录了吗!但利用这类办法要增添服务器的负荷,由于,实行每次SQL服务器都要一样对SQL举行剖析、优化等操纵。幸亏MySQL供应了另外一种办理计划,就是利用一条INSERT语句来拔出多笔记录。这并非尺度的SQL语法,因而只能在MySQL中利用。
  INSERTINTOusers(name,age)
  VALUES(姚明,25),(比尔.盖茨,50),(火星人,600);
  下面的INSERT语句向users表中一连拔出了3笔记录。值得注重的是,下面的INSERT语句中的VALUES后必需每笔记录的值放到一对(…)中,两头利用","支解。假定有一个表table1
  CREATETABLEtable1(nINT);
  假如要向table1中拔出5笔记录,上面写法是毛病的:
  INSERTINTOtable1(i)VALUES(1,2,3,4,5);
  MySQL将会抛出上面的毛病
  ERROR1136:Columncountdoesntmatchvaluecountatrow1
  而准确的写法应当是如许:
  INSERTINTOtable1(i)VALUES(1),(2),(3),(4),(5);
  固然,这类写法也能够省略列名,如许每对括号里的值的数量必需分歧,并且这个数量必需和列数分歧。如:
  INSERTINTOtable1VALUES(1),(2),(3),(4),(5);
  3.REPLACE语句
  我们在利用数据库时大概会常常碰到这类情形。假如一个表在一个字段上创建了独一索引,当我们再向这个表中利用已存在的键值拔出一笔记录,那将会抛出一个主键抵触的毛病。固然,我们大概想用新纪录的值来掩盖本来的纪录值。假如利用传统的做法,必需先利用DELETE语句删除本来的纪录,然后再利用INSERT拔出新的纪录。而在MySQL中为我们供应了一种新的办理计划,这就是REPLACE语句。利用REPLACE拔出一笔记录时,假如不反复,REPLACE就和INSERT的功效一样,假如有反复纪录,REPLACE就利用新纪录的值来交换本来的纪录值。
  利用REPLACE的最年夜优点就是能够将DELETE和INSERT合二为一,构成一个原子操纵。如许就能够不用思索在同时利用DELETE和INSERT时增加事件等庞大操纵了。
  在利用REPLACE时,表中必需有独一索引,并且这个索引地点的字段不克不及同意空值,不然REPLACE就和INSERT完整一样的。
  在实行REPLACE后,体系前往了所影响的行数,假如前往1,申明在表中并没有反复的纪录,假如前往2,申明有一条反复纪录,体系主动先挪用了DELETE删除这笔记录,然后再纪录用INSERT来拔出这笔记录。假如前往的值年夜于2,那申明有多个独一索引,有多笔记录被删除和拔出。
  REPLACE的语法和INSERT十分的类似,以下面的REPLACE语句是拔出或更新一笔记录。
  REPLACEINTOusers(id,name,age)VALUES(123,赵本山,50);
  拔出多笔记录:
  REPLACEINTOusers(id,name,age)
  VALUES(123,赵本山,50),(134,Mary,15);
  REPLACE也能够利用SET语句
  REPLACEINTOusersSETid=123,name=赵本山,age=50;
  下面曾提到REPLACE大概影响3条以上的纪录,这是由于在表中有凌驾一个的独一索引。在这类情形下,REPLACE将思索每个独一索引,并对每个索引对应的反复纪录都删除,然后拔出这条新纪录。假定有一个table1表,有3个字段a,b,c。它们都有一个独一索引。
  CREATETABLEtable1(aINTNOTNULLUNIQUE,bINTNOTNULLUNIQUE,cINTNOTNULLUNIQUE);
  假定table1中已有了3笔记录
  abc
  111
  222
  333
  上面我们利用REPLACE语句向table1中拔出一笔记录。
  REPLACEINTOtable1(a,b,c)VALUES(1,2,3);
  前往的了局以下
  QueryOK,4rowsaffected(0.00sec)
  在table1中的纪录以下
  abc
  123
<p>  我们能够看到,REPLACE将本来的3笔记录都删除,然后将(1,2,3)拔出。<Pstyle="TEXT-INDENT:2em">
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。
不帅 该用户已被删除
沙发
发表于 2015-1-19 05:59:20 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
乐观 该用户已被删除
板凳
发表于 2015-1-25 15:56:05 来自手机 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
再见西城 该用户已被删除
地板
 楼主| 发表于 2015-2-3 06:06:54 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-8 19:58:50 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
山那边是海 该用户已被删除
6#
发表于 2015-2-26 02:16:18 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-8 11:30:00 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
深爱那片海 该用户已被删除
8#
发表于 2015-3-15 22:24:45 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-22 17:09:58 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 03:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表