如果存在,我该如何删除表

时间:2016-06-06 14:50:12

标签: mysql sql

如果存在于MySql中,我们如何创建表。 我想创建一个表,如果存在然后删除它,并创建它。 换句话说,我想原子地做这两个查询。

drop table if exists `tbl_Name`;

create table `tbl_Name` (c1 int, c2 text);

**我们无法确定这两个查询的顺序是否会下降。

感谢

3 个答案:

答案 0 :(得分:1)

您可以使用MySQL DROP TABLE IF EXISTS

DROP TABLE IF EXISTS tbl_Name;

CREATE TABLE tbl_Name (
  c1       INT,
  c2       TEXT
);

答案 1 :(得分:0)

IF OBJECT_ID('[dbo].[YourTable]') IS NOT NULL
DROP TABLE [dbo].[YourTable]

答案 2 :(得分:0)

在MySQL中,所有数据定义语句(例如创建或删除表)都运行in their own, specific transaction

  

目的是在自己的特殊事务中处理每个这样的语句,因为它无论如何都无法回滚。

您的问题不是这些语句不是以原子方式执行的,您的问题是由于并行执行指令而在执行相应的删除表之前可能会执行create table语句。在这种情况下你要么

  1. 需要强制执行drop table的序列化 - 创建表命令对
  2. 或者您使用create table命令的create table if not exists tablename版本:
  3.   

    如果表存在,关键字IF NOT EXISTS可防止发生错误。但是,没有验证现有表的结构与CREATE TABLE语句指示的结构相同。

    但是,即使你使用了后者,你仍然必须确保没有后续的drop table语句会删除你创建的表。请注意,如果不存在,则纯粹检查表名,但不检查表结构!

    所以,说实话,我会选择选项1:你必须序列化DDL语句的执行。