<legend id='4VAQl'><style id='4VAQl'><dir id='4VAQl'><q id='4VAQl'></q></dir></style></legend>
<tfoot id='4VAQl'></tfoot>
  • <i id='4VAQl'><tr id='4VAQl'><dt id='4VAQl'><q id='4VAQl'><span id='4VAQl'><b id='4VAQl'><form id='4VAQl'><ins id='4VAQl'></ins><ul id='4VAQl'></ul><sub id='4VAQl'></sub></form><legend id='4VAQl'></legend><bdo id='4VAQl'><pre id='4VAQl'><center id='4VAQl'></center></pre></bdo></b><th id='4VAQl'></th></span></q></dt></tr></i><div id='4VAQl'><tfoot id='4VAQl'></tfoot><dl id='4VAQl'><fieldset id='4VAQl'></fieldset></dl></div>

    <small id='4VAQl'></small><noframes id='4VAQl'>

    • <bdo id='4VAQl'></bdo><ul id='4VAQl'></ul>

        如果存在则更改表或如果不存在则创建

        时间:2023-06-24
        <legend id='4yyJn'><style id='4yyJn'><dir id='4yyJn'><q id='4yyJn'></q></dir></style></legend>
      1. <tfoot id='4yyJn'></tfoot>

        <small id='4yyJn'></small><noframes id='4yyJn'>

          • <bdo id='4yyJn'></bdo><ul id='4yyJn'></ul>
            <i id='4yyJn'><tr id='4yyJn'><dt id='4yyJn'><q id='4yyJn'><span id='4yyJn'><b id='4yyJn'><form id='4yyJn'><ins id='4yyJn'></ins><ul id='4yyJn'></ul><sub id='4yyJn'></sub></form><legend id='4yyJn'></legend><bdo id='4yyJn'><pre id='4yyJn'><center id='4yyJn'></center></pre></bdo></b><th id='4yyJn'></th></span></q></dt></tr></i><div id='4yyJn'><tfoot id='4yyJn'></tfoot><dl id='4yyJn'><fieldset id='4yyJn'></fieldset></dl></div>

                  <tbody id='4yyJn'></tbody>

                  本文介绍了如果存在则更改表或如果不存在则创建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我需要运行一个安装程序,它也可以是一个更新程序.安装程序需要能够最终拥有 mysql 数据库的特定方案/结构,无论某些表是否存在,是否遗漏了几列,或者不需要更改,因为它们的结构是最新的.

                  I need to run an installer which can also be an updater. The installer needs to be able to end up having a certain scheme/structure of the mysql database, regardless if some of the tables existed, missed a few columns, or need not to be changed because their structure is up to date.

                  如何将 ALTERCREATE 巧妙结合起来?

                  How can I make an elegant combination of ALTER and CREATE?

                  我在想一定有类似添加...如果...重复"之类的东西

                  I was thinking there must be something like "ADD... IF... Duplicate"

                  假设我有表 A.在一个客户端中,该表有一个列 -A1,另一个客户端有相同的表,但有 A1 列和 A2 列.

                  Say I have table A. In one client the table has one column -A1, and another client has the same table but with column A1 and column A2.

                  我希望我的 sql 命令使两个客户的表 A 都包含三列:A1、A2 和 A3.

                  I want my sql command to make both clients' table A hold three columns : A1, A2, and A3.

                  同样,我的脚本是我转储到 mysql 的 sql 文件.

                  Again, my script is a sql file that I dump to mysql.

                  我该怎么做?谢谢:-)

                  How do I do it? Thanks :-)

                  推荐答案

                  MySQL INFORMATION_SCHEMA 数据库的救援:

                  MySQL INFORMATION_SCHEMA database to the rescue:

                  -- First check if the table exists
                  IF EXISTS(SELECT table_name 
                              FROM INFORMATION_SCHEMA.TABLES
                             WHERE table_schema = 'db_name'
                               AND table_name LIKE 'wild')
                  
                  -- If exists, retreive columns information from that table
                  THEN
                     SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
                       FROM INFORMATION_SCHEMA.COLUMNS
                      WHERE table_name = 'tbl_name'
                        AND table_schema = 'db_name';
                  
                     -- do some action, i.e. ALTER TABLE if some columns are missing 
                     ALTER TABLE ...
                  
                  -- Table does not exist, create a new table
                  ELSE
                     CREATE TABLE ....
                  
                  END IF;
                  

                  更多信息:

                  • MySQL 参考手册:第 19 章 INFORMATION_SCHEMA 表
                  • MySQL 参考手册:INFORMATION_SCHEMA TABLES 表
                  • MySQL 参考手册:INFORMATION_SCHEMA COLUMNS 表

                  更新:

                  另一个可能更简单的选择是删除现有表并使用新模式重新创建它.为此,您需要:

                  Another option, possibly easier, is to drop the existing table and re-create it again with the new schema. To do this, you need:

                  1. 创建临时表,现有表的精确副本
                  2. 用旧表中的数据填充临时表
                  3. 放下旧桌子
                  4. 使用新架构创建新表
                  5. 用临时表中的信息填充新表
                  6. 删除临时表.

                  所以,在 SQL 代码中:

                  So, in SQL code:

                  CREATE TABLE old_table_copy LIKE old_table;
                  
                  INSERT INTO old_table_copy
                  SELECT * FROM old_table;
                  
                  DROP TABLE old_table;
                  
                  CREATE TABLE new_table (...new values...);
                  
                  INSERT INTO new_table ([... column names from old table ...])
                  SELECT [...column names from old table ...] 
                  FROM old_table_copy;
                  
                  DROP TABLE old_table_copy;
                  

                  其实最后一步,删除临时表.",你可以跳过一段时间.以防万一,您希望对旧表进行某种备份,以防万一".

                  Actually the last step, "Drop temporary table.", you could skip for a while. Just in case, you would want to have some sort of backup of the old table, "just-in-case".

                  更多信息:

                  • MySQL 参考手册:CREATE TABLE 语法
                  • MySQL 参考手册:插入语法
                  • MySQL 参考手册:INSERT ... SELECT 语法

                  这篇关于如果存在则更改表或如果不存在则创建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:将列添加到表中,然后在事务中更新它 下一篇:MySQL:如果列不存在,如何添加?

                  相关文章

                  1. <tfoot id='vl9xc'></tfoot>

                      <bdo id='vl9xc'></bdo><ul id='vl9xc'></ul>

                    <small id='vl9xc'></small><noframes id='vl9xc'>

                    <legend id='vl9xc'><style id='vl9xc'><dir id='vl9xc'><q id='vl9xc'></q></dir></style></legend>

                      <i id='vl9xc'><tr id='vl9xc'><dt id='vl9xc'><q id='vl9xc'><span id='vl9xc'><b id='vl9xc'><form id='vl9xc'><ins id='vl9xc'></ins><ul id='vl9xc'></ul><sub id='vl9xc'></sub></form><legend id='vl9xc'></legend><bdo id='vl9xc'><pre id='vl9xc'><center id='vl9xc'></center></pre></bdo></b><th id='vl9xc'></th></span></q></dt></tr></i><div id='vl9xc'><tfoot id='vl9xc'></tfoot><dl id='vl9xc'><fieldset id='vl9xc'></fieldset></dl></div>