我想向mysql表中添加新列,但是如果该列已存在,我想忽略该列的添加
我目前正在使用
ALTER IGNORE TABLE `db`.`tablename` ADD COLUMN `column_name` text NULL;
但这抛出了一个错误,说: "ERROR 1060 (42S21): Duplicate column name 'column_name'"
即使我正在使用IGNORE,这也无法正常工作
我希望它使用普通的SQL语句而不是存储过程来工作
根据文档:
IGNORE是标准SQL的MySQL扩展。如果新表中的唯一键上有重复项,或者在启用严格模式时发生警告,则它控制ALTER
TABLE的工作方式。如果未指定IGNORE,则在发生重复键错误的情况下,副本将中止并回滚。如果指定了IGNORE,则只有一行用于唯一键重复的行。其他冲突的行将被删除。不正确的值将被截断为最接近的匹配可接受值。
也就是说,它用于不同的目的,而不是所有的错误。您想要的是类似的东西ALTER TABLE ADD IF NOT EXISTS
,并且该语法不存在。
在存储过程中,您可以使用一条if
语句查看该列是否已经存在(使用INFORMATION_SCHEMA.COLUMNS
)。
这是一个显示相同问题的SQL Fiddle。
问题内容: 我的脚本很长,我希望能够在需要时仅运行整个文件,而不用担心它的某些部分是否已经运行。但是下面的脚本给我带来了问题。由于某些原因,即使列’EntityID’和’EntityType’不存在,它也将通过IF语句,在这种情况下,它不应通过IF语句。有人可以告诉我怎么了吗? 表的脚本 错误: 问题答案: 马丁绝对是有东西的。里面的东西是由在分析时解析器处理,而忽略你是否会做成。这是您不能执行的
问题内容: 该查询允许对结果进行过滤,而不是对我将如何更新的结果进行过滤,因此它仅严格显示大学= 2时的结果 我将全文搜索与LIKE结合使用的原因是,由于全文搜索具有的最小字母数,并且由于我处于共享主机计划中,因此无法修改设置。结果,我将全文和LIKE结合在一起以适应 问题答案: 修正括号 具有比更高的优先级,因此只能与结合使用,而不能与测试结合使用。
问题内容: 我的研究和实验还没有得到答案,所以我希望能有所帮助。 我正在修改一个应用程序的安装文件,该应用程序在以前的版本中没有我想立即添加的列。我不想手动添加列,而是要在安装文件中并且仅在表中不存在新列的情况下才添加。 该表如下创建: 如果我在create table语句下面添加以下内容,那么我不确定如果该列已经存在(可能已填充)会发生什么情况: 因此,我尝试了在某处找到的以下内容。这似乎不起作
问题内容: 我有一个这样的SQL选择语句: 这将为我返回类似表格的内容: 我想要的是将列标题插入第一行,例如: 有人可以建议如何实现吗? 您能否用标题创建一个临时表并将数据附加到此表? 问题答案: 除非您的所有名字都按排序顺序在“ first”之后,否则上述两个答案都不会起作用。 如果您也想对所有非varchar列执行此操作,则CONS(至少)为: 您所有的数据都将成为VARCHAR。例如,如果您
问题内容: 我看了很多例子。但是此查询不起作用,出现以下错误: 错误1064(42000):您的SQL语法有错误;在第1行的’IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =’)附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。 问题答案: 您可以为查询创建一个过程,
问题内容: 嗨,我想运行一个if语句,但是在我所有的AS别名附近都会不断出现语法错误,我在做什么错? 问题答案: 有两个问题。缺少BEGIN以及SELECT都需要在每个IF语句内。您不能在SELECT中包含内联IF,如果需要执行此操作,则可以使用CASE语句。