Home  >  Article  >  Database  >  MySQL数据库的更新语句DELETE与TRUNCATE TABLE

MySQL数据库的更新语句DELETE与TRUNCATE TABLE

WBOY
WBOYOriginal
2016-06-07 16:13:401315browse

以前我们讲过关于MySQL数据库的更新语句中INSERT与REPLACE的两条语句的介绍,今天我们要介绍的是UPDATE,DELETE与TRUNCATE TABLE这几条语句,以及对这些语句的实际应用功能的介绍。 UPDATE UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似

以前我们讲过关于MySQL数据库的更新语句中INSERT与REPLACE的两条语句的介绍,今天我们要介绍的是UPDATE,DELETE与TRUNCATE TABLE这几条语句,以及对这些语句的实际应用功能的介绍。

UPDATE

UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似。必须提供表名以及SET表达式,在后面可以加WHERE以限制更新的记录范围。

<ol class="dp-xml">
<li class="alt"><span><span>UPDATE table_anem SET </span><span class="attribute">column_name1</span><span> = </span><span class="attribute-value">value1</span><span>, </span><span class="attribute">column_name2</span><span> = </span><span class="attribute-value">value2</span><span>, ...  </span></span></li>
<li><span>WHERE ... ;  </span></li>
</ol>

如下面的语句将users表中id等于123的记录的age改为24

<ol class="dp-xml"><li class="alt"><span><span>UPDATE users SET </span><span class="attribute">age</span><span> = </span><span class="attribute-value">24</span><span> WHERE </span><span class="attribute">id</span><span> = </span><span class="attribute-value">123</span><span>; </span></span></li></ol>

同样,可以使用UPDATE更新多个字段的值 UPDATE users SET age = 24, name = 'Mike' WHERE id = 123;

上面的UPDATE语句通过WHERE指定一个条件,否则,UPDATE将更新表中的所有记录的值。

在使用UPDATE更新记录时,如果被更新的字段的类型和所赋的值不匹配时,MySQL数据库(和PHP搭配之最佳组合)将这个值转换为相应类型的值。如果这个字段是数值类型,而且所赋值超过了这个数据类型的最大范围,那么MySQL(和PHP搭配之最佳组合)就将这个值转换为这个范围最大或最小值。如果字符串太长,MySQL(和PHP搭配之最佳组合)就将多余的字符串截去。

如果设置非空字段为空,那么将这个字段设置为它们的默认值,数字的默认值是0,字符串的默认值是空串(不是null,是"")。
 
有两种情况UPDATE不会对影响表中的数据。

1. 当WHERE中的条件在表中没有记录和它匹配时。

2. 当我们将同样的值赋给某个字段时,如将字段abc赋为'123',而abc的原值就是'123'。

和INSERT、REPLACE一样,UPDATE也返回所更新的记录数。但这些记录数并不包括满足WHERE条件的,但却未被更新的记录。如下同的UPDATE语句就未更新任何记录。

<ol class="dp-xml">
<li class="alt"><span><span>UPDATE users SET </span><span class="attribute">age</span><span> = </span><span class="attribute-value">30</span><span> WHERE </span><span class="attribute">id</span><span> = </span><span class="attribute-value">12</span><span>;  </span></span></li>
<li><span>Query OK, 0 rows affected (0.00 sec) </span></li>
</ol>

需要注意的时,如果一个字段的类型是TIMESTAMP,那么这个字段在其它字段更新时自动更新。

在有些时候我们需要得到UPDATE所选择的行数,而不是被更新的行数。我们可以通过一些API来达到这个目的。如MySQL数据库(和PHP搭配之最佳组合)提供的C API提供了一个选项可以得到你想要的记录数。而MySQL(和PHP搭配之最佳组合)的JDBC驱动得到的默认记录数也是匹配的记录数。

UPDATE和REPLACE基本类似,但是它们之间有两点不同。

1. UPDATE在没有匹配记录时什么都不做,而REPLACE在有重复记录时更新,在没有重复记录时插入。

2. UPDATE可以选择性地更新记录的一部分字段。而REPLACE在发现有重复记录时就将这条记录彻底删除,再插入新的记录。也就是说,将所有的字段都更新了。

DELETE和TRUNCATE TABLE

在MySQL(和PHP搭配之最佳组合)中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。

如果要清空表中的所有记录,可以使用下面的两种方法:

<ol class="dp-xml">
<li class="alt"><span><span>DELETE FROM table1  </span></span></li>
<li><span>TRUNCATE TABLE table1 </span></li>
</ol>

其中第二条记录中的TABLE是可选的。

如果要删除表中的部分记录,只能使用DELETE语句。

<ol class="dp-xml"><li class="alt"><span><span>DELETE FROM table1 WHERE ...; </span></span></li></ol>

如果DELETE不加WHERE子句,那么它和TRUNCATE TABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。

如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。

<ol class="dp-xml"><li class="alt"><span><span>DELETE FROM table1 WHERE 1; </span></span></li></ol>

上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。

DELETE和TRUNCATE TABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。

和标准的SQL语句不同,DELETE支持ORDER BY和LIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIB,如果要删除后几条记录,可以通过ORDER BY和LIMIT配合使用。假设我们要删除users表中name等于"Mike"的前6条记录。可以使用如下的DELETE语句:

<ol class="dp-xml"><li class="alt"><span><span>DELETE FROM users WHERE </span><span class="attribute">name</span><span> = </span><span class="attribute-value">'Mike'</span><span> LIMIT 6; </span></span></li></ol>

一般MySQL数据库(和PHP搭配之最佳组合)并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDER BY对记录进行排序。

<ol class="dp-xml"><li class="alt"><span><span>DELETE FROM users WHERE </span><span class="attribute">name</span><span> = </span><span class="attribute-value">'Mike'</span><span> ORDER BY id DESC LIMIT 6;  </span></span></li></ol>

以上的相关内容就是对透视MySQL数据库之更新语句的介绍,望你能有所收获。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn