1

我对数据库很陌生,所以如果这是一个非常愚蠢的问题,我深表歉意。我在电子邮件正文中收到了 mysql 表的架构。它看起来像这样,除了它有更多行:

+-------------------------+---------------+------+-----+---------+-------+
| Field                   | Type          | Null | Key | Default | Extra |
+-------------------------+---------------+------+-----+---------+-------+
| _id                     | varchar(40)   | NO   | FOO | NULL    |       |
| foo                     | text          | YES  |     | NULL    |       |
| bar                     | text          | YES  |     | NULL    |       |
| baz                     | text          | YES  |     | NULL    |       |
| qux                     | datetime      | YES  |     | NULL    |       |
+-------------------------+---------------+------+-----+---------+-------+

在读入实际数据之前,我需要在本地创建表,该数据位于随附的 tsv 文件中。我宁愿不手动创建表模式,因为它有很多列。有没有办法使用我发送的模式自动执行此操作?

4

2 回答 2

1

无法自动将这种形式的 ASCII 艺术表转换为 SQL CREATE 语句。

如果您感到无聊并倾向于这样做,我想您可以编写一个实用程序来解析该输入并生成一个输出。

您要么必须使用查询创建表(请参阅 参考资料CREATE),要么使用管理前端(例如phpMyAdmin)以更人性化的方式输入信息(我相信phpMyAdmin现在还具有图形设计器功能)。

其他一些 DBMS 的前端也内置了表格生成工具,例如 MS SQL Server Management Studio 有一个很好的图形表格生成器。

顺便说一句,要挑选尼特,你的意思是说它是很多,而不是行。


编辑:只是为了好玩,这是一个快速的 Linux shell 脚本,它将表的大部分信息部分转换为 SQL 语句(命令行参数是输入文件名):

#!/bin/sh
echo "CREATE TABLE myTable ("
cat "$1" | awk '{ split($0,a,"|"); print a[2] a[3] (match(a[4],"NO")?"NOT NULL":"") " DEFAULT" a[6] ","; }' | tr -s " "
echo ");"

以下输入文件:

| _id                     | varchar(40)   | NO   | FOO | NULL    |       |
| foo                     | text          | YES  |     | NULL    |       |
| bar                     | text          | YES  |     | NULL    |       |
| baz                     | text          | YES  |     | NULL    |       |
| qux                     | datetime      | YES  |     | NULL    |       |

生成以下输出:

CREATE TABLE myTable (
 _id varchar(40) NOT NULL DEFAULT NULL ,
 foo text DEFAULT NULL ,
 bar text DEFAULT NULL ,
 baz text DEFAULT NULL ,
 qux datetime DEFAULT NULL ,
);

但是您仍然必须foo手动删除该行并替换_idfoo(这NOT NULL DEFAULT NULL很奇怪,我实际上不知道 MySQL 是否会在非空列上接受空默认值)。它不关心您的 KEY 列。您还必须手动删除最后一个逗号。不过,它确实完成了大部分工作。

于 2013-08-15T18:46:40.440 回答
1

你可以从一个好的文本编辑器开始,通过智能替换操作来运行你的模式。但最终它仍将主要是手动过程。

于 2013-08-15T18:52:02.357 回答