【问题标题】:Create a MySQL table from a list of terms in a text file从文本文件中的术语列表创建 MySQL 表
【发布时间】:2010-10-13 02:09:02
【问题描述】:

我有一个文本文件,其中包含一长串术语(大约 800 个),按字母顺序排列,格式如下:

一个字 字 cword ...

我想使用这个文件来创建一个新的 MySQL 表,其中每个术语都是一个字段,都具有属性 VARCHAR(5)。

最好按照它们在文件中出现的顺序插入字段,因为我也在脚本中使用此文件进行内容分析,如果在需要时保持(字母)顺序会更容易将数据插入到这个新表中。

对于那些好奇的人,我是一名学生,正在做一个涉及内容分析的科学史论文项目。这些字段将用于保存频率数据。将有另一个字段作为主键并将这些字段与其他数据链接。我不是程序员,但确实有 10 年运行 linux 的经验,并且通常能够解决问题。然而,谷歌在这里让我失望了。

编辑

所以 Damoviso 指出我真正需要做的是将文件转换为 mySQL 命令。我使用 awk 和 uniq 生成以下内容:

CREATE TABLE keyterms_frq (
    filename VARCHAR(20),
    apperception VARCHAR(5),
    behaviorism VARCHAR(5),
    behavioristic VARCHAR(5),
    behaviorists VARCHAR(5),
    behaviorist VARCHAR(5),
    behavior VARCHAR(5),
    behaviour VARCHAR(5),
    brain VARCHAR(5),
    conditioned VARCHAR(5),
    conditioning VARCHAR(5),
    condition VARCHAR(5),
    consciousness VARCHAR(5),
    conscious VARCHAR(5),
    experienced VARCHAR(5),
    experiences VARCHAR(5),
    experience VARCHAR(5),
    intellect VARCHAR(5),
    introspections VARCHAR(5),
    introspection VARCHAR(5),
    introspectively VARCHAR(5),
    introspective VARCHAR(5),
    intuition VARCHAR(5),
    memoryimage VARCHAR(5),
    memory VARCHAR(5),
    mentality VARCHAR(5),
    mentally VARCHAR(5),
    mental VARCHAR(5),
    mind VARCHAR(5),
    mirrorscript VARCHAR(5),
    mirrorwriting VARCHAR(5),
    unconditioned VARCHAR(5)
);  

不幸的是,这仍然无法正常工作,因为它会生成以下内容:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“条件 VARCHAR(5)、意识 VARCHAR(5)、有意识 VARCHAR(5)、经验”附近使用正确的语法

我最初认为我可以生成的字段数量是有限的,但这似乎不是问题

【问题讨论】:

    标签: mysql database linux text field


    【解决方案1】:

    就个人而言(我知道这可能不会流行),但我倾向于使用 Excel 和类似 Textpad 或 Notepad++(甚至是普通记事本)的东西来进行一次性数据库插入和表格创建。

    导入文本文件,以便将每个单词放在新行中,根据需要对它们进行排序,然后通过在顶部和底部插入列和一行来围绕它构建 SQL 命令。

    在这种情况下,我建议:

    1. 在单元格 A1 的顶部插入一行,内容如下:
      CREATE TABLE MyTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    2. 在 B 列中与单词相邻的每个单元格中,输入以下内容:
      VARCHAR(5),
    3. 删除最后一个逗号,在下面的单元格中添加一个“);”。
    4. 另存为制表符分隔文件,然后使用您选择的文本编辑器,将制表符替换为空格。

    您将得到一个可以针对数据库运行的 SQL 文件。

    是的,很乱,不是很1337,但是很有效。

    【讨论】:

    • 这听起来很有希望。然后我将它作为一个 mySQL 批处理运行?
    • 绝对 - 输出应该只是一个文本文件,其中包含 SQL 创建表命令。我不确定您使用什么 UI 来访问 MySql,但是是的,作为批处理运行它听起来不错:) 如果您需要更多帮助,请告诉我!
    • 感谢您指出正确的方向来解决我原来的问题。我最终使用 awk 将 mySQL 元素添加到原始数据中,然后移动列。
    【解决方案2】:

    嘿弗兰克,我刚刚在你的 Facebook 页面上写了这个,但又来了:

    "condition" 在 MySQL 中是一个保留字,所以你不能用这个字命名任何列。在此处查看列表(至少对于 MySQL 5.1):

    http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

    【讨论】:

    • +1:如果我重命名“条件”列,该查询对我有效。
    【解决方案3】:

    所以基本上我认为你要求的是: 将文件读入程序。
    让程序获取每一行并生成一个列出所有单词的字符串。
    将 CREATE TABLE 语句与包含字段名称的字符串连接起来以创建 SQL 语句。
    将该 SQL 命令发送到您的 sql 服务器。
    我在这方面还太陌生,无法很好地实现这个想法,但希望如果这符合你的要求,我会给某人一个想法。

    【讨论】:

      【解决方案4】:

      我不确定我是否完全理解你的问题,但我确实有一个想法:

      如果您要计算频率数据,如果单词在插入表格之前进行排序,您可以编写更有效的内容分析算法。这将减少数据库服务器上的 CPU 压力,并且您的频率计算器也会更高效。

      也许您可以为我们详细说明您的问题?

      【讨论】:

      • 我重新编辑了它,希望现在更清楚一点。单词按字母顺序排序,如果这是您的意思。谢谢。
      【解决方案5】:

      其工作方式是使用“load data infile”将文件加载到数据库中。用 x 替换所有我前缀的变量

      mysql -uxuser -pxpass xdatabase -e "LOAD DATA INFILE '/tmp/xwordlist.cvs' INTO TABLE xtable FIELDS TERMINATED BY ',' (xcolname)"
      

      【讨论】:

      • 作者想要创建带有命名列的表。您的解决方案是导入现有数据
      猜你喜欢
      • 2015-08-14
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多