|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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">
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。 |
|