如何判断表存在?不存在则创建表?

samansakk 2009-11-08 01:32:58
用 show tables like 'xx' 可以知道表有没存在。

不过要怎么用呢?

我想在存储过程中判断xx表是否存在,如果不存在就创建之,要怎么写?

如果在mysql命令行下判断的话,又要怎么写呢?

谢谢
...全文
1637 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
samansakk 2009-11-08
  • 打赏
  • 举报
回复
谢谢各位。结帖。
daiyan_2008 2009-11-08
  • 打赏
  • 举报
回复
谢谢楼上解决了我的问题
ACMAIN_CHM 2009-11-08
  • 打赏
  • 举报
回复
[Quote]还有个问题:
有个表名存在变量中:
declare tablename varchar(50);
set tablename='aa';

--本来用下面这句是可以删除aa表的,
drop table if exists aa;
但现在用tablename变量,要怎么写呢? 谢谢
[/Quote]

使用动态语句。

set @sql = concat ("drop table ", tablename);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
ACMAIN_CHM 2009-11-08
  • 打赏
  • 举报
回复
[Quote]我想在存储过程中判断xx表是否存在,如果不存在就创建之,要怎么写?[/Quote]

直接 create table IF NOT EXISTS xxxx (id int , ....

阿_布 2009-11-08
  • 打赏
  • 举报
回复
判断表是否存在:


存储过程中:
set @sign=0;
select 1 into @sign from information_schema
where table_name='aa' and table_schema='表aa所在数据库名称';
if @sign=0 then
create table aa .....
end if;

命令行:
create table if not exists aa(
表定义
);

daiyan_2008 2009-11-08
  • 打赏
  • 举报
回复
我测试了下,我也晕了

delimiter $$
create procedure table_create(IN tablename varchar(100))
begin
create table if not exists tablename
(num int );
end$$
delimiter ;
]

这段代码就是不能用,居然建立了一个表名叫tablename的表,向楼主借一个地盘求助下
samansakk 2009-11-08
  • 打赏
  • 举报
回复
还有个问题:
有个表名存在变量中:
declare tablename varchar(50);
set tablename='aa';

--本来用下面这句是可以删除aa表的,
drop table if exists aa;
但现在用tablename变量,要怎么写呢? 谢谢
daiyan_2008 2009-11-08
  • 打赏
  • 举报
回复
在5楼的帮助下写的一个存储过程,谢谢ACMAIN_CHM,学习了
在create table 存储过程的形式参数是无效的,使用预处理后就能够执行了

delimiter $$
create procedure table_create(IN tablename varchar(100))
begin
set @sql=concat("create table if not exists ",tablename,"(num int )");
prepare darwin FROM @sql;
execute darwin;
drop prepare darwin;
end$$
delimiter ;

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧