Как я могу добавить внешний ключ при составлении новой таблицы?

Вы можете использовать оконные функции. Логика будет такой:

select principal, apellido, nombre
from (select t.*, count(*) over (partition by principal) as cnt
      from t
     ) t
where cnt = 1;

Это вернет строки, где principal равно NULL; такие строки исключены в NOT EXISTS.

Однако, самый быстрый метод, если у вас есть первичный ключ и индекс на (principal, pk), это, вероятно,:

select principal, apellido, nombre
from t
where not exists (select 1
                  from t t2
                  where t2.principal = t.principal and t2.pk <> t.pk
                 );
10
задан Kerrigan Joseph 8 August 2018 в 22:41
поделиться

3 ответа

Я предложу иметь уникальный ключ для платежной таблицы. На он - сторона, внешний ключ не должен быть auto_increment, поскольку это относится к уже существующему ключу.

CREATE TABLE GUEST(
    id int(15) not null auto_increment PRIMARY KEY, 
    GuestName char(25) not null
)  ENGINE=INNODB;

CREATE TABLE PAYMENT(
    id int(15)not null auto_increment, 
    Guest_id int(15) not null, 
    INDEX G_id (Guest_id), 
    Foreign Key(Guest_id) references GUEST(id),
    BillNr int(15) not null
)  ENGINE=INNODB;
5
ответ дан 3 December 2019 в 22:02
поделиться

Удостоверьтесь, что Вы используете механизм InnoDB или для базы данных, или для обеих таблиц. От MySQL Reference:

Для механизмов устройства хранения данных кроме InnoDB MySQL Server анализирует синтаксис FOREIGN KEY в операторах CREATE TABLE, но не использует или хранит его.

0
ответ дан 3 December 2019 в 22:02
поделиться

Ответ на Ваш вопрос является почти тем же как ответом этому.

Необходимо указать в таблице, содержащей внешний ключ название таблицы, содержащей первичный ключ и название поля первичного ключа (использующий "ссылки").

Это имеет некоторый код, показывающий, как создать внешние ключи собой, и в CREATE TABLE.

Вот один из более простых примеров от этого:

CREATE TABLE parent (id INT NOT NULL,
   PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
   INDEX par_ind (parent_id),
   FOREIGN KEY (parent_id) REFERENCES parent(id)
   ON DELETE CASCADE
) ENGINE=INNODB;
12
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: