1

给定一个 Postgresql 表模式:

create table thing (
    id serial primary key,
    key text,
    type int references thing,   
    latest_revision int default 1,
    created timestamp default(current_timestamp at time zone 'utc'),
    last_modified timestamp default(current_timestamp at time zone 'utc')
);
$for name in ['key', 'type', 'latest_revision', 'last_modified', 'created']:
    create index thing_${name}_idx ON thing($name);

有两行我不明白,我想知道是否可以将它们转换为 MySql 表模式?可以将以下行转换为 MySql 可以理解的内容,因为它似乎在引用自身:

type int references thing,

另外,最后一行是否有一个 MySql 等价物:

$for name in ['key', 'type', 'latest_revision', 'last_modified', 'created']:
    create index thing_${name}_idx ON thing($name);
4

3 回答 3

2

references行是一个外键,你可以在 MySQL 中使用这样的东西:

CREATE TABLE thing (
   ...
   type int,
   FOREIGN KEY (type) REFERENCES thing (id),
   ...
);

最后两行不是 SQL,而是某种脚本语言。它只是在提到的列上创建索引:

CREATE INDEX thing_key_idx ON thing (key);
CREATE INDEX thing_type_idx ON thing (type);
...
于 2010-01-25T18:44:25.900 回答
0

最后一行看起来像 python,这让我相信这是来自pgloader,一个常用的 python 程序。或者一个临时的 python 程序。这不是 pg 或 psql 中的有效语法 AFAIK。

references foo, 位是表 foo 主键的外键。如果未指定列,则默认为主键。

查看有关创建表的文档以获取更多信息。

于 2010-01-25T18:44:14.593 回答
0

所以,从你们告诉我的来看,这将是原始 Postgresql 表的等效 MySql 表模式:

--
-- Table structure for table `thing`
--
CREATE TABLE IF NOT EXISTS `thing` (
  `id` int NOT NULL auto_increment,
  `key` text,
  `type` int,
  `latest_revision` tinyint NOT NULL default '1',
  `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `last_modified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
-- 
-- Constraints for table `thing`
-- 
ALTER TABLE `thing`
  ADD CONSTRAINT `thing_ibfk_1` FOREIGN KEY (`type`) REFERENCES `thing` (`id`);
于 2010-01-25T20:52:40.557 回答