FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Flitig postare
|
Jag fattar inte riktigt varför detta inte går, vet inte om jag missar något, men visst ska väl två fält kunna referera till samma fält i en annan tabell? Och auto_increment räknas väl inte som data type på det sättet att det måste vara samma på både FK och det som FK pekar på?
#1005 - Can't create table './test/crm9_person.frm' (errno: 150) Kod:
DROP TABLE IF EXISTS `crm9_address`; CREATE TABLE `crm9_address` ( `id` int(255) NOT NULL auto_increment, `address1` varchar(255) NOT NULL default '', `address2` varchar(255) NOT NULL default '', `zipcode` varchar(7) NOT NULL default '', `city` varchar(40) NOT NULL default '', `country` varchar(40) NOT NULL default '', `mail` varchar(255) NOT NULL default '', `gatecode` text, `notes` text, PRIMARY KEY (`id`) )ENGINE=INNODB; DROP TABLE IF EXISTS `crm9_person`; CREATE TABLE `crm9_person` ( `id` int(255) NOT NULL auto_increment, `companyname` varchar(255) NOT NULL default '', `contactname` varchar(255) NOT NULL default '', `securitynumber` varchar(12) NOT NULL default '', `cellphone` varchar(16) NOT NULL default '', `telephone` varchar(16) NOT NULL default '', `telefax` varchar(16) NOT NULL default '', `on_call_address` int(255) NOT NULL default '0', `invoice_address` int(255) NOT NULL default '0', `custtype` int(11) default '3', `granskad` int(255) default NULL, `fakturatyp` int(10) default NULL, `notes` text, PRIMARY KEY (`id`), INDEX (on_call_address, invoice_address), CONSTRAINT person_has_address FOREIGN KEY (`on_call_address`, `invoice_address`) REFERENCES crm9_address(id, id) ON UPDATE CASCADE ON DELETE RESTRICT )ENGINE=INNODB AUTO_INCREMENT=20; ![]() |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Kolla checkarna här: http://sql-info.de/mysql/referential-integrity.html
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Kan inte detta något vidare jag skulle prova med 2 constraints; 1 på varje.
Jag provade med följande. Korrekt, men Du kanske inte uppnår Dina syften. DROP TABLE IF EXISTS `crm9_address`; CREATE TABLE `crm9_address` ( `id` int(255) NOT NULL auto_increment, `address1` varchar(255) NOT NULL default '', `address2` varchar(255) NOT NULL default '', `zipcode` varchar(7) NOT NULL default '', `city` varchar(40) NOT NULL default '', `country` varchar(40) NOT NULL default '', `mail` varchar(255) NOT NULL default '', `gatecode` text, `notes` text, PRIMARY KEY (`id`) )ENGINE=INNODB; DROP TABLE IF EXISTS `crm9_person`; CREATE TABLE `crm9_person` ( `id` int(255) NOT NULL auto_increment, `companyname` varchar(255) NOT NULL default '', `contactname` varchar(255) NOT NULL default '', `securitynumber` varchar(12) NOT NULL default '', `cellphone` varchar(16) NOT NULL default '', `telephone` varchar(16) NOT NULL default '', `telefax` varchar(16) NOT NULL default '', `on_call_address` int(255) NOT NULL default '0', `invoice_address` int(255) NOT NULL default '0', `custtype` int(11) default '3', `granskad` int(255) default NULL, `fakturatyp` int(10) default NULL, `notes` text, PRIMARY KEY (`id`), INDEX (on_call_address, invoice_address), CONSTRAINT person_has_address_for_ONK FOREIGN KEY (`on_call_address`) REFERENCES crm9_address(id) ON UPDATE CASCADE ON DELETE RESTRICT , CONSTRAINT person_has_address_for_INV FOREIGN KEY ( `invoice_address`) REFERENCES crm9_address(id) ON UPDATE CASCADE ON DELETE RESTRICT ) ENGINE=INNODB AUTO_INCREMENT=20; HAVE IT! |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Bara ett inlägg till!
|
Om det skulle lösa problemen så fundera över om du kan klara dig utan dina FOREIGN KEYs. Vet att FOREIGN KEY låter bra i teorin, men behövs sällan i praktiken. :-)
|
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Flitig postare
|
Citat:
|
|||
![]() |
![]() |
Svara |
|
|