我对数据库很新,所以如果这是一个令人难以置信的愚蠢问题,请道歉。我在电子邮件正文中发送了一个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文件中。我宁愿不手动创建表模式,因为它有很多列。有没有办法使用我发送的架构自动执行此操作?
答案 0 :(得分: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
行并将_id
替换为foo
(NOT NULL DEFAULT NULL
是奇怪的,我实际上并不知道MySQL会不会在非空列上接受null默认值。它不关心你的KEY列。您还必须手动删除最后一个逗号。不过,它确实完成了大部分工作。
答案 1 :(得分:1)
您可以通过使用智能替换操作运行模式来开始使用优秀的文本编辑器。但最终它仍将是一个主要的手动过程。