我是靠谱客的博主 过时羊,最近开发中收集的这篇文章主要介绍mysql循环建表_MySQL 循环建表和结合两表的update,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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循环建表_MySQL 循环建表和结合两表的update的全部内容,希望文章能够帮你解决mysql循环建表_MySQL 循环建表和结合两表的update所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部