我正在寻找一个单一的MYSQL书写器,将数据库中的所有栏目名称转换为一栏。
我继承了一个MYSQL数据库,该数据库有许多不同的案件栏目名称(150个表格,有划一的命名公约),我不想按表格逐字逐字逐字逐字逐字逐行。
是否有任何人去过这种文字?
增 编
我正在寻找一个单一的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);
不同的数据类型有不同的要求,因此,你们需要联合国意见:
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取代。 这使我的所有表格和栏目都减少了。
然后,我支持我的数据库,把所有表格全部删除,然后执行我的文件,重建。 我并不担心与数据分离的结构,因为我发现我的任何数据都不存在背书符号。
就我而言,我需要一栏列出所有下级案件,因为我的发展环境将首先——姓名改为第一名:作为我的外地数据输入标签。 如果我把他们作为帽子(我继承下来),他们就会改写为非我所希望的飞行情报和安全局,那么我不得不改变我的所有外地标签。