如何正确解析SQL CREATE TABLE语句

3
我需要解析SQL的“CREATE TABLE”语句,以获取字段列表及其属性。
它主要是MySQL语法,应该是这样的(带有不可控制的嵌套括号,如此例所示:
CREATE TABLE 'tablename' (
field1 INT,
field2 VARCHAR(10),
field3 FLOAT NOT NULL DEFAULT 0,
PRIMARY KEY (field1, field2),
(CONSTRAINT fk FOREIGN KEY whatever)
) options;

我可以轻松地分离列定义,但我想拆分这些定义。在嵌套的括号中,逗号无法进行拆分。
我可以迭代字符串以计算打开和关闭字符串定界符(引号等),计算打开和关闭括号,以便可以检测“第一级”逗号并在其上拆分。
但我想知道是否有更有效的方法,例如使用正则表达式,但我对它们不够熟练,无法确定某些正则表达式是否能匹配此类复杂语法...
2个回答

0

或许会很有用。你可以像使用SQL解析器一样使用它。而这个则是用于正则表达式。


和上面一样,所以我决定自己动手写一个新的“IndexOf”函数,它可以找到逗号作为分隔符,并注意它们是否在嵌套的括号或字符串内(指定一个字符串分隔符,可以是双引号,或者著名的MySQL反引号)。 也许它可能会有性能问题,但这只是一个偶尔使用的解析器,所以没关系... 无论如何,感谢正则表达式链接,非常有用!!! - Sierramike
这是关于小字符串解析的内容。如果您不做10000次,您不会感到性能问题。祝您好运。 - Victor Tomaili
我更在寻找良好的实践和更易维护的代码,而不是追求性能,但最终它能够工作,所以我会采用它,感谢你的友善评论,Victor。 - Sierramike

0
你需要的是一个分词器。实际上,微软在 SQL Server 中包含了一个(Microsoft.Data.Schema.Dom)。我不确定这是否仅适用于 SQL Server,但根据你要解析的内容,即使只支持 SQL Server 也可能足够了。
此外,link 这个链接指向了一些备选的解析 SQL 的方法。

许多链接与Select语句相关,或仅与SQL Server特定语法相关,在我的情况下,它基本上是MySQL创建表,因此可能效果不佳... - Sierramike
链接是一个我知道的示例分词器。你需要为MySQL找到一个。这是一个支持MySQL的商业产品:http://www.sqlparser.com/index.php - Giovanni Galbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接