Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

InnoDB i foreign kljucevi (can't create table)

[es] :: MySQL :: InnoDB i foreign kljucevi (can't create table)

[ Pregleda: 2240 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon InnoDB i foreign kljucevi (can't create table)04.08.2009. u 16:03 - pre 179 meseci
uzeh danas MySQL Workbench da se malo igram u njemu (olaksava dizajn baze dosta, moram priznati :D), uradim export u sql i pokusam da izvrsim generisani script ali dobijem error Can't create table

SQL:
Code:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';


DROP TABLE IF EXISTS `Player` ;
CREATE  TABLE IF NOT EXISTS `Player` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `tag_id` INT UNSIGNED NOT NULL ,
  `name` VARCHAR(80) NOT NULL ,
  `birthday` DATETIME NULL ,
  `birthplace` VARCHAR(100) NULL ,
  `country` VARCHAR(50) NULL ,
  `metadata` TEXT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `name` (`name` ASC) ,
  INDEX `tag_id` (`tag_id` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COMMENT = 'Player entity';


DROP TABLE IF EXISTS `Team` ;
CREATE  TABLE IF NOT EXISTS `Team` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `tag_id` INT UNSIGNED NOT NULL ,
  `name` VARCHAR(80) NOT NULL ,
  `desc` TEXT NULL ,
  `flag` VARCHAR(200) NULL ,
  `country` VARCHAR(50) NULL ,
  `status` SMALLINT NOT NULL DEFAULT 1 ,
  `metadata` TEXT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `name` (`name` ASC) ,
  INDEX `tag_id` (`tag_id` ASC) )
ENGINE = InnoDB
COMMENT = 'Team entity';


DROP TABLE IF EXISTS `Transfer` ;
CREATE  TABLE IF NOT EXISTS `Transfer` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `player_id` INT UNSIGNED NOT NULL ,
  `team_from` INT UNSIGNED NOT NULL ,
  `team_to` INT UNSIGNED NOT NULL ,
  `date` DATETIME NOT NULL ,
  `price` INT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_Transfer_TeamFrom` (`team_from` ASC) ,
  INDEX `fk_Transfer_TeamTo` (`team_to` ASC) ,
  INDEX `fk_Transfer_Player` (`player_id` ASC) ,
  CONSTRAINT `fk_Transfer_Player`
    FOREIGN KEY (`player_id`)
    REFERENCES `Player` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Transfer_TeamFrom`
    FOREIGN KEY (`team_from` )
    REFERENCES `Team` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Transfer_TeamTo`
    FOREIGN KEY (`team_to` )
    REFERENCES `Team` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Player transfer details';


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;



> mysql test < test.sql
ERROR 1005 (HY000) at line 41: Can't create table './test/Transfer.frm' (errno: 150)


a zatim u mysql konzoli:

mysql> show engine innodb status;


i izmedju ostalog dobijem:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
090804 16:59:23 Error in foreign key constraint of table test/Transfer:

FOREIGN KEY (`player_id`)
REFERENCES `Player` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Transfer_TeamFrom`
FOREIGN KEY (`team_from` )
REFERENCES `Team` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Transfer_TeamTo`
FOREIGN KEY (`team_to` )
REFERENCES `Team` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Player transfer details':
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refma...b-foreign-key-constraints.html
for correct foreign key definition.


i nije mi jasno kako se buni da Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint
kad Player.id ima PRIMARY KEY?

da li moze neko da mi objasni zasto se ovo desava i sta to radim pogresno?

btw, ja sam samo sklonio CONSTRAINT na Player tabelu i upit je prosao bez problema, ali me interesuje zasto sam morao da sklonim fk?

hvala unapred.
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)05.08.2009. u 07:26 - pre 179 meseci
Možda što player.id nije UNSIGNED? Ostali ključevi jesu pa si to verovatno zaboravio.
"Common sense is not so common." - Voltaire
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)05.08.2009. u 08:53 - pre 179 meseci
ne mogu da verujem da je to bilo u pitanju :)

hvala, zaboravio sam da cekiram UNSIGNED u mwb...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)05.08.2009. u 09:05 - pre 179 meseci
ako ti je WB izgenerisao SQL koji ne moze da se ucita u mysql - molim te, prijavi bug.. WB je ok proizvod ali jos uvek ima dosta debilnih bagova, pritom, treba da preuzme ulogu administratora i query browsera (koji su vec neko duze vreme deprecated i na kojima se ne radi vec jako dugo)... dakle - napravis nalog na bugs.mysql.com i kako naletis na neki bug a ti lepo prijavis - najbitnije je da napravis "repeatable test case" - dakle objasnjenje po stavkama kako da ponovis problem na koji si naisao ..


sto se tice samog sql-a i pitanja za koji djavo nece da prodje .. player.id i transfer.player_id nisu istog tipa (jedan je int a drugi je unsigned int, kako ti je kolega napisao u prethodnom postu)

ovo je nesto sto je WB trebao da "primeti" ...

pogledaj, malo po meniju wb-a ima negde (mada moguce da je to samo u ovoj verziji za pare) da mu kazes da "pregleda model" pa ti on onda izbaci greske tipa "ova dva polja nisu istog tipa" ...


 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)05.08.2009. u 09:43 - pre 179 meseci
koliko sam ja video Validate opcije su disabled u ovoj free verziji tako da nista od validacije. a generisao je sql koji ne prolazi verovatno zbog moje greske (player tabela je prva koju sam napravio pa jedino na njoj izgleda nisam cekirao UNSIGNED a posle sam sva polja koja su id-evi forsirao da budu UNSIGNED) tako da nije wb-ov bug (mada bi bilo lepo da mi kaze nesto prilikom generisanja sql-a, ali verovatno to radi u koemrcijalnoj verziji...)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)05.08.2009. u 10:21 - pre 179 meseci
nema veze sto si ti zaboravio - on treba da primeti gresku ... no ako je validatizacija ugasena u dzaba verziji ... onda je to verovatno razlog sto je izgenerisao takav sql ...

videcemo kako ce se wb dalje razvijati, trenutno se prilicno pi*karaju medjusobno svi vezano za njega ... jedni su da skoro sve opcije budu dzaba, drugi oce da dzaba verzija bude osakacena extra ... svadjaju se oko toga kako ce ici podrska, kako se odlucuje dal ce biti GA ili ne .... (posto je realno sadasnji GA pun bagova i ne bi mogao ni po jednom mysql standardu da se zove GA) etc etc ....

za sada vidim da vodi ova opcija koja je za "sto vise funkcija u dzaba verziji" ... i polako dosta stvari koje su zamisljene da budu samo u verziji za pare se vec nalaze u dzaba verziji .. .kako ce to sve da ispadne na kraju - pojma nemam ... da ne spominjem na to sta ce biti kada najzad ova prica sa oraklom bude zavrsena (koliko sam skapirao bitan deo ce biti zavrsen krajem septembra - posle toga ce biti malo vise informacija)... mozda orakle resi da baci wb u smece posto ima (da li ima?) bolje resenje...

sve u svemu .. dosadasnji gui tools (administrator i query browser) su proslost, ne radi se na njima vec duuuuuuuugo, bagovi se ni ne citaju, dakle jos pre godinu dana su developeri rekli da nece vise to da razvijaju ... mislim da u narednih mesec dana (nadam se malo ranije) treba da ide i zvanicni info da su to dva mrtva proizvoda ... wb je zamena (kakva takva) ... tako da .. kada naletis na bug (a realno ako ti izgenerise kod koji baca gresku - to je bug) odes na bugs.mysql.com i prijavis ga :)
 
Odgovor na temu

tarla

Član broj: 15527
Poruke: 1648



+42 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)06.08.2009. u 09:39 - pre 179 meseci
Izvinjavam se što miniram temu ali šta osim WB-a preporučujete...

Koristim WB i meni radi ok ...


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)06.08.2009. u 09:58 - pre 179 meseci
za manji broj tabela WB je super ..
za veci broj tabela ... ja licno koristim ErWin .. on ne ume da prica sa mysql-om, kosta mnogo para i mnogo je ruzan ... ali je mnoooooooooogo brzi i mocniji od wb-a (i svega ostalog sto sam ja licno ikad video)... nacrtan u njemu bazu, exportujem u neki "standardan sql" pa onda prepravim da to radi i na mysql-u ..
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
..132.242-dsl.net.metronet.hr.



+19 Profil

icon Re: InnoDB i foreign kljucevi (can't create table)06.08.2009. u 21:06 - pre 179 meseci
ja preporučam sybase power desinger.
podržava gotovo sve baze i lijepog je dizajna i nije relativno skup.


mysql, sql server, oracle, postgresql, interbas/firebird, teradata, db2 i još neke druge.

 
Odgovor na temu

[es] :: MySQL :: InnoDB i foreign kljucevi (can't create table)

[ Pregleda: 2240 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.