Re: PostgreSQL 8.1 vs. MySQL 5.0?

Поиск
Список
Период
Сортировка
От Robert Treat
Тема Re: PostgreSQL 8.1 vs. MySQL 5.0?
Дата
Msg-id 200510071045.07249.xzilla@users.sourceforge.net
обсуждение исходный текст
Ответ на Re: PostgreSQL 8.1 vs. MySQL 5.0?  (Michael Fuhr <mike@fuhr.org>)
Ответы Re: PostgreSQL 8.1 vs. MySQL 5.0?  (David Fetter <david@fetter.org>)
Список pgsql-general
On Thursday 06 October 2005 17:31, Michael Fuhr wrote:
> On Thu, Oct 06, 2005 at 12:35:38PM -0700, CSN wrote:
> > Scott Marlowe <smarlowe@g2switchworks.com> wrote:
> > > But what really bugs me is that some things that ARE bugs simply aren't
> > > getting fixed and probably won't.  Specifically, while mysql
> > > understands fk references made at a table level, it simply ignores,
> > > without error, warning, or notice, fk references made in a column.
> > > arg...  Very frustrating.  If they just didn't support that syntax it
> > > would be much less bothersome, since I'd try it, get an error, and try
> > > the other syntax.  Instead, I spent an afternoon trying to figure out
> > > why it wasn't doing ANYTHING when I declared an FK reference at column
> > > level.
> >
> > What's the difference between a fk at the table level
> > vs. column level? The only fk's I've used are one
> > column referencing another.
>
> He means the way the foreign key constraint is defined.  In MySQL,
> defining the constraint as part of column definition has no effect:
>
> CREATE TABLE bar (
>     fooid  integer NOT NULL REFERENCES foo (id)
> ) TYPE innodb;
>
> The database accepts the above without warning but won't enforce
> the foreign key constraint.  One must write this instead:
>
> CREATE TABLE bar (
>     fooid  integer NOT NULL,
>     FOREIGN KEY (fooid) REFERENCES foo (id)
> ) TYPE innodb;
>
> Also, notice the "TYPE innodb" clause of the CREATE TABLE statement.
> The default table type in MySQL is MyISAM, which doesn't support
> foreign key contraints at all, but which will silently allow you
> to declare them.  If you haven't changed the default table type,
> then you must remember to specify that you want an InnoDB table,
> or else your REFERENCES clauses are nothing but documentation.

I'm working on porting mediawiki to postgresql and was really puzzled by the
following:

CREATE TABLE trackbacks (
        tb_id           INTEGER AUTO_INCREMENT PRIMARY KEY,
        tb_page         INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
        tb_title        VARCHAR(255) NOT NULL,
        tb_url          VARCHAR(255) NOT NULL,
        tb_ex           TEXT,
        tb_name         VARCHAR(255),

        INDEX (tb_page)
);

I couldn't figure out why they weren't specifying type = innodb for the table,
but then figured they must have declared it some place else or something...
but now I see that even that wouldn't work. Makes you wonder if my$ql users
realize this behavior or not....I would have to guess not because otherwise
why would you use this type of syntax at all?

(And people claim my$ql is eaiser to use? I still don't get that one)
--
Robert Treat
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL

В списке pgsql-general по дате отправления:

Предыдущее
От: Stephan Szabo
Дата:
Сообщение: Re: multiple default values specified for column?
Следующее
От: Robert Treat
Дата:
Сообщение: Re: PostgreSQL 8.1 vs. MySQL 5.0?