MySQL循环建表和结合两表的update
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL循环建表和结合两表的update,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1582字,纯文字阅读大概需要3分钟。
内容图文
![MySQL循环建表和结合两表的update](/upload/InfoBanner/zyjiaocheng/564/b8fdd8a829884463873fb4ba613fae78.jpg)
使用存储过程,实现循环建表 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所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。