هل يمكن تحويل جدول postgresql هذا إلى جدول MySQL؟
-
22-09-2019 - |
سؤال
بالنظر إلى مخطط جدول ما بعد GRESQL:
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);
المحلول
ال 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);
...
نصائح أخرى
يبدو هذا السطر الأخير مثل بيثون ، مما سيؤديني إلى الاعتقاد بأن هذا جاء من ذلك pgloader, ، برنامج بيثون شائع الاستخدام. أو برنامج Python Adhoc. هذا غير صالح بناء الجملة AFAIK في PG ، أو PSQL.
و ال references foo
, ، BIT هو مفتاح خارجي للمفتاح الأساسي للجدول FOO. إذا لم يتم تحديد أي عمود ، فهذا افتراضي للمفتاح الأساسي.
تحقق من المستندات اصنع جدول لمزيد من المعلومات.
لذا ، مما تخبرني جميعًا ، سيكون هذا مخططًا معادلاً لجدول MySQL لجدول PostgreSQL الأصلي:
--
-- 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`);