求一条mysql 语句,update 的语句
首先,单表的UPDATE语句:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
其次,多表的UPDATE语句:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。
如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。
LIMIT子句用于给定一个限值,限制可以被更新的行的数目。
UPDATE语句支持以下修饰符:
1,如果您使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。
2,如果您使用IGNORE关键词,则即使在更新过程中出现错误,更新语句也不会中断。
如果出现了重复关键字冲突,则这些行不会被更新。如果列被更新后,新值会导致数据转化错误,则这些行被更新为最接近的合法的值。
如果您在一个表达式中通过tbl_name访问一列,则UPDATE使用列中的当前值。
例如,把年龄列设置为比当前值多一:
代码如下:
mysql> UPDATE persondata SET age=age+1;
UPDATE赋值被从左到右评估。
例如,对年龄列加倍,然后再进行增加:
代码如下:
mysql> UPDATE persondata SET age=age*2, age=age+1;
如果您把一列设置为其当前含有的值,则MySQL会注意到这一点,但不会更新。
如果您把被已定义为NOT NULL的列更新为NULL,则该列被设置到与列类型对应的默认值,并且累加警告数。
对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于日期和时间类型,默认值为“zero”值。
UPDATE会返回实际被改变的行的数目。Mysql_info() C API函数可以返回被匹配和被更新的行的数目,以及在UPDATE过程中产生的警告的数量。
您可以使用LIMIT row_count来限定UPDATE的范围。LIMIT子句是一个与行匹配的限定。
只要发现可以满足WHERE子句的row_count行,则该语句中止,不论这些行是否被改变。
如果一个UPDATE语句包括一个ORDER BY子句,则按照由子句指定的顺序更新行。
您也可以执行包括多个表的UPDATE操作。table_references子句列出了在联合中包含的表。
例子:
代码如下:
SQL>UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
说明:以上代码显示出了使用逗号操作符的内部联合,但是multiple-table UPDATE语句可以使用在SELECT语句中允许的任何类型的联合,比如LEFT JOIN。
注释:不能把ORDER BY或LIMIT与multiple-table UPDATE同时使用。
在一个被更改的multiple-table UPDATE中,有些列被引用。您只需要这些列的UPDATE权限。有些列被读取了,但是没被修改。您只需要这些列的SELECT权限。
如果您使用的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同。
在此情况下,语句无效并被 回滚。同时,更新一个单一表,并且依靠ON UPDATE功能。
该功能由InnoDB提供,用于对其它表进行相应的修改。
目前,不能在一个子查询中更新一个表,同时从同一个表中选择。
update语句的几种基本用法
A. 使用简单的 UPDATE
下列示例说明如果从 UPDATE 语句中去除 WHERE 子句,所有的行会受到什么影响。
下面这个例子说明,如果表 publishers 中的所有出版社将总部搬迁到佐治亚州的亚特兰大市,表 publishers 如何更新。
代码如下:
UPDATE publishers
SET city = 'Atlanta', state = 'GA'
本示例将所有出版商的名字变为 NULL。
复制代码 代码如下:
UPDATE publishers
SET pub_name = NULL
也可以在更新中使用计算值。本示例将表 titles 中的所有价格加倍。
代码如下:
UPDATE titles
SET price = price * 2
B.把 WHERE 子句和 UPDATE 语句一起使用
WHERE 子句指定要更新的行例如,在下面这个虚构的事件中,北加利福尼亚更名为 Pacifica(缩写为 PC),而奥克兰的市民投票决定将其城市的名字改为 Bay City。这个例子说明如何为奥克兰市以前的所有居民(他们的地址已经过时)更新表 authors。
代码如下:
UPDATE authors
SET state = 'PC', city = 'Bay City'
WHERE state = 'CA' AND city = 'Oakland'
必须编写另一个语句来更改北加利福尼亚其它城市的居民所在的州名。
C.通过 UPDATE 语句使用来自另一个表的信息
本示例修改表 titles 中的 ytd_sales 列,以反映表 sales 中的最新销售记录。
复制代码 代码如下:
UPDATE titles
SET ytd_sales = titles.ytd_sales + sales.qty
FROM titles, sales
WHERE titles.title_id = sales.title_id
AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
这个例子假定,一种特定的商品在特定的日期只记录一批销售量,而且更新是最新的。如果不是这样(即如果一种特定的商品在同一天可以记录不止一批销售量),这里所示的例子将出错。例子可正确执行,但是每种商品只用一批销售量进行更新,而不管那一天实际销售了多少批。这是因为一个 UPDATE 语句从不会对同一行更新两次。
对于特定的商品在同一天可销售不止一批的情况,每种商品的所有销售量必须在 UPDATE 语句中合计在一起,如下例所示:
代码如下:
UPDATE titles
SET ytd_sales =
(SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titles.title_id
AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales))
FROM titles, sales
D. 将 UPDATE 语句与 SELECT 语句中的 TOP 子句一起使用
这个例子对来自表 authors 的前十个作者的 state 列进行更新。
代码如下:
UPDATE authors
SET state = 'ZZ'
FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1
WHERE authors.au_id = t1.au_id
以上就是mysql update语句用法的全部内容
update是不支持在同一个表中先SELECT再UPDATE的操作的。可以采用创建临时表的方法,将你查找出来的值存入临时表,再从临时表中调值来UPDATE你要修改的表。
如表名为tb2第一步先去除所有空格
update tb2 set value=REPLACE(value,' ','');
第二步去除所有已有的'.'
update tb2 set value=REPLACE(value,'.','');
1位字母的:
update tb2 set value=CONCAT(value,'.') where length(value)=1 and value!='.';
2位字母的:
update tb2 set value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.') where length(value)=2 and value not like '%.%';
3位字母的:
update tb2 set value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.',SUBSTRING(value,3,1),'.') where length(value)=3 and value not like '%.%';
4位字母的:
..................
以些类推。
如果由程序控制的话,可以从以下规律着手:
变量t为字母位数,m为累加变量为1到t,先去除空格和已有'.'后的更新语句为:
update tb2
set
value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.',................,SUBSTRING(value,t,1),'.')
where length(value)=t and value not like '%.%';
即:value的值为CONCAT()里面重复SUBSTRING(value,m,1),'.',重复的次数由字母位数t决定,第一次m为1,第二次m为2,。。。。第t次m=t,然后结束CONCAT()。条件为 length(value)=t且value里本身没有'.'。
首先update 不会执行两次,检查程序是不是有两次执行的逻辑问题,排除页面二次提交的情况。祝你好运。 mysql不会无故执行两次的,应该是你的程序里有
update @temp
set s = s+'.'
where s not like '%.'
and isnull(s ,' ')!=' '
最简单的方法:直接写update语句
$sql=update a set a= b= c= where value!='';
有点个复杂的方法----搜出来一个个的修改 ,当然,还是针对没有value的修改。
$sql1=select * from biaoming where value !='';
$query=mysql_query($sql1);
while($rs=mysql_fetch_array($query)){
$value=$rs['value'];
$sql2=update。。。。。。
mytsql_query($sql2);
}
$sql2=update value set
带/的直接replace好像不行
因为/在sql语句中用于转义字符中,一般与escape同用
所以要转化的时候,额
你先查查select * from A where record like '%'的条数是不是和select * from A where record like 'http%'查出来的一样多,并且确认是否select * from A where record like '%'是你要修改的那些数据
如果是的话
最好用:
update A set record=replace(record,'xxx','abc') where record like '%'
伏裕冠心: 如表名为tb2 第一步先去除所有空格 update tb2 set value=REPLACE(value,' ',''); 第二步去除所有已有的'.' update tb2 set value=REPLACE(value,'.','');1位字母的:update tb2 set value=CONCAT(value,'.') where length(value)=1 and value!='.';2位...
定兴县13571645122: MYSQL 环境 sql update语句 - 把table中一个字段中所有为null的数值改为0(用一条sql语句) - ?
伏裕冠心: 语句解释:update 表名 ---更新表 set state = '0' ---设置更新结果 where state is null ---判断state是否为null 用 is null 判断
定兴县13571645122: mysql update 语句如何更新多条数据?
伏裕冠心: update加上limit就只更新符合条件的第一条数据了,要更新所有符合条件的数据,需要去掉limit 1.
定兴县13571645122: MySQL数据库;求一句SQL语句写法,高手帮忙. - ?
伏裕冠心: update mysql.lw_full_search ,mysql.lw_archives set mysql.lw_full_search.addinfos=mysql.lw_archives.description where mysql.lw_full_search.aid=mysql.lw_archives.ID
定兴县13571645122: 求一条sql语句 - ?
伏裕冠心: update [A] set [B]=[B]+'_XXXX' SQL SERVER2008R2 表名和字段名都可以加[],注意不能随便加引号,此处字段B的数据类型应该是字符型
定兴县13571645122: 一条MySql语句 求帮忙换成sqlserver语句 - ?
伏裕冠心: update _Table set ext3=case charindex(',1,', (','+ext19)) when 0 then replace((','+ext19),',1,','') else ext3 end ,ext6=case ext6 when '4' then '2' when '1' then '1' else '3' end where id in (79) 说明: SELECT LOCATE('bar', 'foobarbar'); -> 4 ,类似 sql中 ...
定兴县13571645122: 求一条sql语句,把数据库表中一个字段里面的数据数字和文字都分开,并且生成一个相对应的列 - ?
伏裕冠心: 思路大概是这样:实用ltrim或者rtrim函数去掉左边或右边符合条件的字符.如果是oracle环境,看你这里都是字母在前数字在后的格式,假设旧列叫 col_old,新的字母列是col_str,新的数字列是col_num update table1 set col_str=rtrim(col_old,'...
定兴县13571645122: 求一条MYSQL语句?
伏裕冠心: select * from [table] where riqi>getdate() order by riqi desc union select * from [table] where riqi<=getdate() order by id desc
定兴县13571645122: 求一条mysql查询语句 - ?
伏裕冠心: 楼上的回答者:villion571回答问不对题 MYSQL根本没有TOP这个关键字 那是MICRO$OFT的语法 getdate()是SQLSERVER的内置函数 跟MYSQL没关系 默认是按auto_increasement的列(比如ID排序的吧) 你可以这样 SELECT * FROM `character_action` LIMIT 0,1000 order by id desc 这样就是按id降序的 也就是跟正常id升序的反向 前1000就是正向的最后1000条啦 经过实际测试通过 补充 楼上错误 LIMIT关键字是MYSQL自己定义的 他的作用就是加速 能使得MYSQL的查询速度大大增加 而不是降低
定兴县13571645122: mysql 中怎样取一个日期字段的年月?比如signDate字段的值为2013 - 12 - 19,我只要2013 - 12,求一条sql语句 - ?
伏裕冠心: 方法一:select date_format(日期字段,'%Y-%m') as '日期' from 表 方法二:mysql有日期函数 date_format SELECT date_format(signDate,'%Y-%m') AS MY_YM FROM tablename WHERE 1; 方法三:对这个字段使用函数left或者substring 例...