最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL循环建表和结合两表的update

来源:动视网 责编:小采 时间:2020-11-09 15:15:16
文档

MySQL循环建表和结合两表的update

MySQL循环建表和结合两表的update:使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_channel_avail() BEGIN DECLARE `@i` INT(11); DECLARE 使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_ch
推荐度:
导读MySQL循环建表和结合两表的update:使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_channel_avail() BEGIN DECLARE `@i` INT(11); DECLARE 使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_ch


使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_channel_avail() BEGIN DECLARE `@i` INT(11); DECLARE

使用存储过程,实现循环建表

DELIMITER //

CREATE PROCEDURE test.create_channel_avail()

BEGIN

DECLARE `@i` INT(11);

DECLARE `@sqlstr` VARCHAR(2800);

SET `@i`=1;

WHILE `@i` < 101 DO

SET @sqlstr = CONCAT(

"CREATE TABLE channel_avail",

`@i`, "(

`prop` VARCHAR(40) ,

`stay_date` DATE,

`roomcode` VARCHAR(40),

`channel_code` VARCHAR(40),

`status` VARCHAR(1) DEFAULT 'A' ,

`createtime` DATETIME COMMENT '创建时间戳',

`updatetime` DATETIME COMMENT '更新时间戳',

PRIMARY KEY (`prop`,`stay_date`,`roomcode`,`channel_code`)

) ENGINE=INNODB

DEFAULT CHARSET=utf8;

"

);

PREPARE stmt FROM @sqlstr;

EXECUTE stmt;

SET `@i` = `@i` + 1;

END WHILE;

END;

CALL test.create_channel_avail_db();


DROP PROCEDURE test.create_channel_avail_db;


在使用MySQL数据库,update和select相结合去更新表中数据时要注意:

如 表test1
A B
1 a
2 b
3 c

表test2
A B
2 d
3 e
4 f
简单的update与select结合,,本来是希望把test1表中的a=2和a=2两行的B列修改为d和e
update from test1 set b = (select b from a where test1.a=test2.a)
注意这个语法是有个陷阱的,此时被更新的表test1中 a=2和a=3的确实被修改为d和e,可是由于a=1行的数据不在结果集里面,所有被set为null,,,也就是说除了结果集有的被更新,没有的值会被设置为null(不允许为null的列暂未测试)

使用inner join的方法就是我们想要的结果,所以要用该方法代替上面的SQL


update test1 INNER JOIN test2 ON a.id=b.id

SET test1.B=test2.B

本文永久更新链接地址:

文档

MySQL循环建表和结合两表的update

MySQL循环建表和结合两表的update:使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_channel_avail() BEGIN DECLARE `@i` INT(11); DECLARE 使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_ch
推荐度:
标签: 更新 update 表中
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top