SQL Две таблицы, два первичных ключа, как их соединить? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть две таблицы и два первичных ключа. Я хочу, чтобы один из users.id считал ++, а другой user_personal_data.id сделал то же самое, и оба идентификатора были бы одинаковыми. Как это сделать?

CREATE TABLE monster.users(
id         INTEGER AUTO_INCREMENT PRIMARY KEY,  
username    VARCHAR(256) NOT NULL,
email       VARCHAR(256) NOT NULL,
password    VARCHAR(256) NOT NULL,
role        VARCHAR(256) NOT NULL
);

CREATE TABLE monster.user_personal_data(
user_id     INTEGER AUTO_INCREMENT PRIMARY KEY, 
fname       VARCHAR(256),
lname       VARCHAR(256),
city        VARCHAR(256),
age         VARCHAR(256),
education   VARCHAR(256)
);

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Если я правильно понимаю ваш дизайн, таблица user_personal_data разверните таблицу users. В этой конструкции только одна (основная) таблица может иметь автоинкрементный столбец. В вашем случае это должен быть столбец id в таблице users. Вторая таблица user_personal_data должна иметь внешний ключ, связанный с основной таблицей. Таким образом, ваши таблицы должны иметь следующую структуру:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(256) NOT NULL,
  `email` varchar(256) NOT NULL,
  `password` varchar(256) NOT NULL,
  `role` varchar(256) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `user_personal_data` (
  `user_id` int(11) NOT NULL,
  `fname` varchar(256) DEFAULT NULL,
  `lname` varchar(256) DEFAULT NULL,
  `city` varchar(256) DEFAULT NULL,
  `age` varchar(256) DEFAULT NULL,
  `education` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  CONSTRAINT `user_personal_data_FK` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
);

Для согласования сохраненной таблицы вы можете использовать триггер на AFTER INSERT для таблицы users, например:

CREATE DEFINER=`root`@`localhost` TRIGGER users_after_insert
AFTER INSERT
ON users FOR EACH ROW
    INSERT INTO monster.user_personal_data (user_id) VALUES (NEW.id)

Решение, приведенное в MySQL синтаксис. У каждой над СУБД нет другого синтаксиса.

0 голосов
/ 11 апреля 2020

Единственный известный мне способ - реализовать триггер как таковой:

CREATE TRIGGER users_inserted ON monster.users AFTER INSERT
AS
    INSERT INTO monster.user_personal_data (user_id)
    SELECT id
    FROM inserted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...