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);

私が理解していない2つの行があり、それらを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),
   ...
);

最後の2行は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のように見えます。これは、これが一般的に使用されるpythonプログラムであるpgloaderからのものであると私に信じさせるでしょう。または、アドホックな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 に答える