English 中文(简体)
a MYSQL将栏目改为下级的文字
原标题:a MYSQL script to convert the column names to lowercase
  • 时间:2009-10-23 09:31:26
  •  标签:

我正在寻找一个单一的MYSQL书写器,将数据库中的所有栏目名称转换为一栏。

我继承了一个MYSQL数据库,该数据库有许多不同的案件栏目名称(150个表格,有划一的命名公约),我不想按表格逐字逐字逐字逐字逐字逐行。

是否有任何人去过这种文字?

增 编

最佳回答

从本说明的产出开始,你可以通过编写文字来完成这项任务:

SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema =  dbname ;
ORDER BY table_name

这方面的详细情况见“

然后可以使用ALTER TABLE。 更改栏目名称

e.g.

ALTER TABLE mytable CHANGE old_name new_name varchar(5);

另见“。 MYSQL:ALTER TABLEyntax

不同的数据类型有不同的要求,因此,你们需要联合国意见:

SELECT  ALTER TABLE  ||table_name||  CHANGE  || column_name||   ||lower(column_name)||   ||datatype|| ( ||CHAR(character_maximum_length)|| );  AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in (  CHAR ,  VARCHAR  )
    ORDER BY table_name
    UNION
SELECT  ALTER TABLE  ||table_name||  CHANGE  || column_name||   ||lower(column_name)||   ||datatype|| ( ||CHAR(numeric_precision)|| );  AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in (  INTEGER  )
    ORDER BY table_name
    UNION
SELECT  ALTER TABLE  ||table_name||  CHANGE  || column_name||   ||lower(column_name)||   ||datatype|| ( ||CHAR(numeric_precision)|| , ||CHAR(numeric_scale)| );  AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in (  FLOAT  )
    ORDER BY table_name
    UNION
SELECT  ALTER TABLE  ||table_name||  CHANGE  || column_name||   ||lower(column_name)||   ||datatype|| );  AS Line
    FROM information_schema.columns
    WHERE table_schema = dbname and datatype in (  DATE  )
    ORDER BY table_name
问题回答

如果有其他人想这样做,请在您使用之前进行测试。

∗∗∗∗∗

SELECT CONCAT(
 ALTER TABLE  , table_name, 
  CHANGE  , column_name,    , 
LOWER(column_name),    , column_type,    , extra,
CASE WHEN IS_NULLABLE =  YES  THEN    NULL  ELSE   NOT NULL  END,  ; ) AS line
FROM information_schema.columns
WHERE table_schema =  <DBNAME>  
AND data_type IN ( char ,  varchar , INT ,  TINYINT ,  datetime , text , double , decimal )
ORDER BY line;

HTH somebody in the future... BTW views are also scripted here so you may need to take them out of your final SQL code

您可以把所有表格和栏目的名称重新命名为下级,将以下定期表述应用到KQ堆放场(例如,mysqldump生成的倾销):

s/`(w+)`/L&/g

之所以这样做,是因为所有表格和栏目都按“(附标)”加以总结。 最好是在表象上做到这一点,与数据分开(仅与表结构合作,然后加插)。

在Vim这样做,打开车库并进入以下指挥系统:

:%s/`(w+)`/L&/g

或使用<条码>的<<>条/代码>从指挥线照射:

sed  s/`(w+)`/L&/g  input.sql > output.sql

如果你需要一再这样做,则在案文档案中储存这一表述,并援引如下:

sed -f regex.txt input.sql > output.sql

pe提出的解决办法实际上是唯一的安全途径。 描述方法太危险,很容易出口或处理错误的数据定义。 上述所有实例说明都排除了几种数据类型,因此不完整。

我做了一次推土机,在桌子和栏目上贴上背书,然后用附注pad++搜索(`.*'),并以L1取代。 这使我的所有表格和栏目都减少了。

然后,我支持我的数据库,把所有表格全部删除,然后执行我的文件,重建。 我并不担心与数据分离的结构,因为我发现我的任何数据都不存在背书符号。

就我而言,我需要一栏列出所有下级案件,因为我的发展环境将首先——姓名改为第一名:作为我的外地数据输入标签。 如果我把他们作为帽子(我继承下来),他们就会改写为非我所希望的飞行情报和安全局,那么我不得不改变我的所有外地标签。





相关问题
热门标签