当前位置: Oracle DBA培训网-优技培训 >> MySQL培训 > MySQL培训教程 >

MySQL基础教程:update alert replace修改语句

MySQL基础教程:update alert replace修改语句

MySQL基础教程:update alert replace修改语句,你可以使用几个不同的方法修改表中的数据,最基本的、可能也是最常用的方法就是使用UPDATE语句了。使用这个语句,你能够修改所有的行或是基于WHERE子句的指定记录中的数据。回顾一下以前显示的查询结果,我们可以看到GrahamGreene的作品BrightonRock的版权年份是1937年。这是错误的,实际年份应该是1938年。我们将输入下面的SQL语句,来修改更新这个错误信息:

  1. UPDATE books  
  2. SET pub_year = '1938' 
  3. WHERE book_id = '2';  
  4.  
  5. Query OK, 1 row affected (0.00 sec)  
  6. Rows matched: 1 Changed: 1 Warnings: 0 

首先,我们要声明即将被更新的表名。接下来我们要在SET关键字后面指定将要修改的列以及相应的新值。如果想修改的列不止一列,那么应提供一个由逗号分开的列表,列表中每个列后跟随着等号操作符以及各自的新值。SET只需输入一次即可。

前面的SQL语句中通过WHERE子句指定必需的匹配条件,限定了将要更新的行。在这种情况下,限定条件是针对于不同列的特定值的,因此只修改了一行数据。查询结果显示只有一行数据受影响,一行记录符合条件,一行记录被修改,没有任何问题引发警告信息。

有时,在向表中插入数据时,如果表中已存在此数据,则会引发重复行的问题。例如,假设我们想执行SQL语句,将几本书的相关数据添加到books表中,而其中一本书的数据已存在于表中。如果我们使用INSERT语句,重复行会引发拒绝添加的警告信息。为防止这种情况发生,可以使用REPLACE语句,该语句向表中插入一行新数据,并可以用新数据替代已存在的数据。

从MySQL的角度看,一般情况下,只有在列被定义成惟一值的情况下才会发生重复数据的错误。由于book_id列的值是自动分配的,我们添加记录时不用指定它的值,所以不可能发生重复值的现象。在图书交易中,每本书的唯一性是根据它的ISBN码来区分的,ISBN码就是书后面的条形码。为了确保不会有ISBN码相同的行,我们将再次修改books表,将ISBN列设置成UNIQUE列,该列的值必须是唯一的。使用此种方式,我们就不会在不经意中多次为一本书添加数据了:

  1. ALTER TABLE books  
  2. CHANGE COLUMN isbn isbn VARCHAR(20) UNIQUE

现在我们已经准备好添加更多图书的数据,而不必担心由于ISBN码重复而带来的重复行问题。下面的例子中,我们试图将GrahamGreene的二个作品数据添加到books表中,而其中一本已经存在于表中:

  1. REPLACE INTO books  
  2. (title, author_id, isbn, genre, pub_year)  
  3. VALUES('Brighton Rock',1,'0099478471','novel','1938'),  
  4. ('The Quiet American',1,'0099478393','novel','1955'); 

REPLACE语句与INSERT语句的语法是相同的。注意,我们在一条语句中添加了二行记录。如果想使用INSERT语句添加更多的记录,使用的语法和上面的相同。如上面显示的,每行数据都列在圆括号中,并且值与值间用逗号分隔。在上例中,表中已存在ISBN码为0099478471的图书数据(例如:BrightonRock),因此新数据会替代表中已存在的数据。目前表中没有Greene的作品TheQuietAmerican的记录,因此,该数据将被添加到表中。

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙