繁体   English   中英

从创建表 sql 获取表名

[英]Get table name from create table sql

现在我想从创建表 sql 中获取表名,比如

CREATE TABLE `engineers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `birth` datetime,
  PRIMARY KEY (`id`),
  INDEX(`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

或者

CREATE TABLE IF NOT EXISTS .....

如果您可以查询数据库服务器的information_schema ,那么您可以从以下查询的结果中访问您的表名。

select  table_name,
        create_time AS `Time` 
from information_schema.tables 
where table_schema = @dbName
order by create_time desc 
limit 1

这应该在表创建完成后立即运行

table_name      Time
table_20200815  15.08.2020 12:06:25

演示

这是在 php 中,但应该很容易转换为 ruby。 假设 Create 语句在 $sql...

[编辑允许“(”跟随表名,并修复 strpos()中的参数顺序]

    $tablename = trim(substring($sql,strpos($sql,"TABLE IF NOT EXISTS") === 0 ? strpos($sql,"TABLE") + 5 : strpos($sql,"TABLE IF NOT EXISTS") + 20));
    $tablename = substring($tablename,0,strpos($tablename,strpos($tablename," ") < strpos($tablename,"(") ? " " : "("));

然后测试并去除反引号(如果有的话)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM