给定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);
答案 0 :(得分: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);
...
答案 1 :(得分:0)
最后一行看起来像python,这会让我相信这来自pgloader,这是一个常用的python程序。或者一个ad-adhoc python程序。这不是pg或psql中有效的语法AFAIK。
references foo
,bit是表foo主键的外键。如果未指定列,则默认为主键。
查看create table上的文档了解详情。
答案 2 :(得分: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`);