Alo*_*n_T 20 mysql alter-table create-table
我需要运行一个安装程序,它也可以是更新程序.安装程序需要能够最终拥有mysql数据库的某个方案/结构,无论是否存在某些表,错过了几列,或者由于其结构是最新的而无需更改.
怎样才能让优雅的组合ALTER和CREATE?
我当时认为必须有"添加...如果...重复"之类的东西
假设我有表A.在一个客户端中,表有一列-A1,另一个客户端具有相同的表,但列A1和列A2.
我希望我的sql命令使两个客户端的表A保持三列:A1,A2和A3.
同样,我的脚本是一个sql文件,我转储到mysql.
我该怎么做?谢谢 :-)
Gre*_*egD 21
MySQL INFORMATION_SCHEMA数据库救援:
-- 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;
Run Code Online (Sandbox Code Playgroud)
更多信息:
更新:
另一个可能更容易的选择是删除现有表并使用新模式重新创建它.为此,您需要:
所以,在SQL代码中:
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;
Run Code Online (Sandbox Code Playgroud)
实际上最后一步,"删除临时表.",你可以跳过一段时间.为了以防万一,您可能希望对旧表进行某种备份,"只是在案例中".
更多信息:
如果您使用编码语言,请执行以下操作:
SHOW TABLES LIKE 'myTable'
Run Code Online (Sandbox Code Playgroud)
如果它返回一个值,则调用更改,否则调用创建
| 归档时间: |
|
| 查看次数: |
44808 次 |
| 最近记录: |