Как вставить запись в таблицу с идентификатором пользователя в качестве внешнего ключа - PullRequest
0 голосов
/ 24 марта 2019

Моя структура базы данных выглядит следующим образом:

Таблица 1: клиенты

| userid | username | password      |   email           | 
|  1     | bob      | mypassword123 | bob@gmail.com     |

Обратите внимание, что 'userid' является первичным ключом в этой таблице

Таблица 2: accountbalance

| userid   | balance |
|    1     |   100   |

Обратите внимание, что 'userid' в таблице accountbalance является внешним ключом для поля 'userid' в таблице клиентов.

Когда создается новая учетная запись, я не толькохочу создать новую строку в клиентах, но я хочу, чтобы была создана соответствующая строка в балансе счета, чтобы дать начальное значение 100 ($ 100), но проблема в том, как узнать, что такое идентификатор пользователя?

Я подумал о том, чтобы выполнить запрос для поиска идентификатора с использованием имени пользователя, а затем выполнить инструкцию INSERT INTO в балансе счета.Будет ли это работать?Могу ли я получить общий план?

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Вы можете использовать trigger MySQL

delimiter |
CREATE TRIGGER temp AFTER INSERT ON customers
  FOR EACH ROW
  BEGIN
    INSERT INTO accountbalance SET userid = NEW.userid;
  END;
|  
delimiter ;

ref: https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

установить значение по умолчанию для поля balance в таблице accountbalance равным 100 при создании таблицы или последующем редактировании.

0 голосов
/ 24 марта 2019

Это зависит от того, какую базу данных вы используете.Mysql имеет функцию LAST_INSERT_INSERT_ID(), которую вы можете вызвать после вставки (просто позвоните SELECT LAST_INSERT_INSERT_ID()), и вы получите идентификатор последней вставленной строки (в случае, если ваш идентификатор определен как AUTO_INCREMENT).Если вы используете postgres, это позволяет выполнить вставку, возвращающую идентификатор.Что-то вроде INSERT INTO customerts(...) VALUES(...) RETURNING userid.

Но, как вы упомянули, если ваш username уникален, я бы использовал select, используя этот атрибут после вставки, потому что он не зависит от БД.

...