当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-01-25 22:43:00  来源:本站整理

MySQL数据库之更新语句精解[MySQL防范]

赞助商链接



  本文“MySQL数据库之更新语句精解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

用于操作数据库SQL普通分为两种,一种是查询语句,也就是我们所说的SELECT语句,别的一种就是更新语句,也叫做数据操作语句.言外之意,就是对数据举行改正.在尺度的SQL中有3个语句,它们是INSERT、UPDATE以及DELETE.在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为后台来谈论若何使有SQL中的更新语句.

  1、INSERT和REPLACE

  INSERT和REPLACE语句的功效都是向表中插入新的数据.这两条语句的语法近似.它们的主要辨别是若何处理反复的数据.

  1. INSERT的普通用法

  MySQL中的INSERT语句和尺度的INSERT不太一样,在尺度的SQL语句中,一次插入一条记录的INSERT语句只有一种情势.

  INSERT INTO tablename(列名…) VALUES(列值);

  而在MySQL中还有别的一种情势.

  INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;

  第一种办法将列名和列值脱离了,在利用时,列名必须和列值的数一致.以下面的语句向users表中插入了一条记录:

  INSERT INTO users(id, name, age) VALUES(123, '姚明', 25);

  第二种办法答应列名和列值成对呈现和利用,以下面的语句将产生中样的效果.

  INSERT INTO users SET id = 123, name = '姚明', age = 25;

  假如利用了SET方法,必须至少为一列赋值.假如某一个字段利用了省缺值(如默许或自增值),这两种办法都可以省略这些字段.如id字段上利用了自增值,上面两条语句可以写成以下情势:

  INSERT INTO users (name, age) VALUES('姚明',25);

  INSERT INTO uses SET name = '姚明', age = 25;

  MySQL在VALUES上也做了些改变.假如VALUES中什么都不写,那MySQL将利用表中每一列的默许值来插入新记录.

  INSERT INTO users () VALUES();

  假如表名后什么都不写,就表示向表中全部的字段赋值.利用这种方法,不但在VALUES中的值要和列数一致,并且次序不能倒置. INSERT INTO users VALUES(123, '姚明', 25);

  假如将INSERT语句写成以下情势MySQL将会报错.

  INSERT INTO users VALUES('姚明',25);

  2. 利用INSERT插入多条记录

  看到这个标题大概大家会问,这有什么好说的,调用多次INSERT语句不便可以插入多条记录了吗!但利用这种办法要增添服务器的负荷,因为,履行每一次SQL服务器都要一样对SQL举行解析、优化等操作.好在MySQL供应了另一种办理筹划,就是利用一条INSERT语句来插入多条记录.这并非尺度的SQL语法,因此只能在MySQL中利用.

  INSERT INTO users(name, age) VALUES('姚明', 25), ('比尔.盖茨', 50), ('火星人', 600);

  上面的INSERT 语句向users表中持续插入了3条记录.值得注意的是,上面的INSERT语句中的VALUES后必须每一条记录的值放到一对(…)中,中间利用","分割.假定有一个表table1

  CREATE TABLE table1(n INT);

  假如要向table1中插入5条记录,下面写法是错误的:

  INSERT INTO table1 (i) VALUES(1,2,3,4,5);

  MySQL将会抛出下面的错误

  ERROR 1136: Column count doesn't match value count at row 1

  而精确的写法应当是这样:

  INSERT INTO table1(i) VALUES(1),(2),(3),(4),(5);

  当然,这种写法也可以省略列名,这样每一对括号里的值的数目必须一致,并且这个数目必须和列数一致.如:

  INSERT INTO table1 VALUES(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语句是插入或更新一条记录.

  REPLACE INTO users (id,name,age) VALUES(123, '赵本山', 50);

  插入多条记录:

  REPLACE INTO users(id, name, age) VALUES(123, '赵本山', 50), (134,'Mary',15);

  REPLACE也可以利用SET语句

  REPLACE INTO users SET id = 123, name = '赵本山', age = 50;

  上面曾提到REPLACE大概影响3条以上的记录,这是因为在表中有超越一个的唯一索引.在这种情形下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的反复记录都删除,然后插入这条新记录.假定有一个table1表,有3个字段a, b, c.它们都有一个唯一索引.

  CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);

  假定table1中已经有了3条记录

  a b c

  1 1 1

  2 2 2

  3 3 3

  下面我们利用REPLACE语句向table1中插入一条记录.

  REPLACE INTO table1(a, b, c) VALUES(1,2,3);

  返回的后果以下

  Query OK, 4 rows affected (0.00 sec)

  在table1中的记录以下

  a b c

  1 2 3

  我们可以看到,REPLACE将原先的3条记录都删除了,然后将(1, 2, 3)插入.


  以上是“MySQL数据库之更新语句精解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .