MySQL Issues

peque
Antal: 849
Tilmeldt:
20-04-2005
User is offline
MySQL Issues

Hey.
Jeg er ved at oprette en MYSQL database , som jeg skal have nogle forskellige tabeller i, og enkelte tabeller skal have Foreign Keys - Men jeg kan ganske enkelt ikke se mig ud af dette
Jeg har følgende 2 tabeller - hvor den ene har FK

CREATE TABLE shipping
(
sid SERIAL UNIQUE NOT NULL,
name VARCHAR(50) NOT NULL,
address VARCHAR(50) NOT NULL,
postal VARCHAR(10) NOT NULL,
city VARCHAR(50) NOT NULL,
contact VARCHAR(50) NOT NULL,
o_phone VARCHAR(20) NOT NULL,
m_phone VARCHAR(20) NOT NULL,
email VARCHAR(50) NOT NULL,
PRIMARY KEY (sid)
);

CREATE TABLE vessels
(
id SERIAL UNIQUE NOT NULL,
imo VARCHAR(7) NOT NULL,
name VARCHAR(50) NOT NULL,
sid BIGINT(20) ,
PRIMARY KEY (id),
    FOREIGN KEY (sid) REFERENCES shipping(`sid`)
);

Query OK, 0 rows affected (0,55 sec)
Query OK, 0 rows affected (0,68 sec)
ERROR 1215 (HY000): Cannot add foreign key constraint

Jeg har prøvet at benævne FK med og uden quotes - Men jeg får denne fejl uanset hvad:

Det sjove er at jeg i alt har 5 tabeller jeg skal have oprettet - men den første fungerer uden problemer:

CREATE TABLE login
(
    uid VARCHAR(4) PRIMARY KEY,
    password VARCHAR(20) NOT NULL,
    role VARCHAR(1) NOT NULL
);

CREATE TABLE users
(
   uid VARCHAR(4) NOT NULL,
   id SERIAL PRIMARY KEY,
   name VARCHAR(30) NOT NULL,
   lastname VARCHAR(30) NOT NULL,
   company  VARCHAR(50) NOT NULL,
   email VARCHAR(50) NOT NULL,
   phone VARCHAR(30) NULL,
   created VARCHAR(4) NOT NULL,
   FOREIGN KEY (uid) REFERENCES login(uid)
);

Jeg kan ganske enkelt ikke se hvad og hvor jeg gør noget forkert her - og hvad der skal til for jeg kan oprette denne Foreign Key

PFT


phoenix
Antal: 17
Tilmeldt:
23-03-2004
User is offline
Forskellige typer

Jeg tror problemet er at din foreign key ikke er af samme type i de to tabeller.
vessels.sid er af typen BigInt og den referer shipping.sid som er en unsigned BigInt (Serial).

https://dev.mysql.com/doc/refman/5.7/en/numeric-ty...
SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.


peque
Antal: 849
Tilmeldt:
20-04-2005
User is offline
Jeg har rodet en hel del med

Jeg har rodet en hel del med det - og netop også prøvet med unsigned.

Løsningen var reelt at sætte Primary key til sidst inden jeg oprettede goreign key - så godkendte den det:

CREATE TABLE users
(
   uid VARCHAR(4) NOT NULL,
   id SERIAL NOT NULL,
   name VARCHAR(30) NOT NULL,
   lastname VARCHAR(30) NOT NULL,
   company  VARCHAR(50) NOT NULL,
   email VARCHAR(50) NOT NULL,
   phone VARCHAR(30) NULL,
   created VARCHAR(4) NOT NULL,
   PRIMARY KEY (id),
   FOREIGN KEY (uid) REFERENCES login(uid)
);