2010-01-25 3 views
1

un schéma Étant donné la table Postgresql:Est-ce que cette table PostgreSQL peut être convertie en une table MySQL?

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

Il y a deux lignes je ne comprends pas et je me demande s'il est même possible de les convertir à un schéma de la table MySql? la ligne suivante peut être converti en quelque chose MySql comprendrait, comme cela semble être lui-même le référencement:

type int references thing, 

Plus, est-il un équivalent MySql pour la dernière ligne:

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

Répondre

2

La ligne references est une clé étrangère, vous pouvez utiliser quelque chose comme ça dans MySQL:

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

Les deux dernières lignes ne sont pas dans SQL, il est un langage de script. Il crée simplement des index sur les colonnes mentionnées:

CREATE INDEX thing_key_idx ON thing (key); 
CREATE INDEX thing_type_idx ON thing (type); 
... 
0

qui ressemble dernière ligne comme python, ce qui me conduirait à croire que cela venait de pgloader, un programme python couramment utilisé. Ou un programme python an-adhoc. Ce n'est pas la syntaxe valide AFAIK en pg, ou psql.

Et le bit references foo est une clé étrangère à la clé primaire de la table foo. Si aucune colonne n'est spécifiée, la valeur par défaut est la clé primaire.

Vérifiez les documents sur create table pour plus d'informations.

+0

MySQL ne prend en charge la colonne implicite en tant que cible d'une clé étrangère. MySQL ne supporte pas non plus la déclaration de clé étrangère au niveau de la colonne; vous devez le faire au niveau de la table. –

+0

Vous l'ajoutez dans CREATE TABLE en dehors de la déclaration de colonne mais il reste attaché à la colonne et est une contrainte de colonne, pas une contrainte de table. –

0

Alors, de ce que vous tous me dites, ce serait un schéma de table équivalent MySql de la table Postgresql originale:

-- 
-- 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`); 
Questions connexes