Задавайте вопросы, мы ответим
Вы не зашли.
Написал вот такую храниму продцедуру:
Код SQL
CREATE DEFINER=`root`@`localhost` PROCEDURE `prAddFullName`(IN inLastname varchar(20),
IN inFirstname varchar(20),
IN inSecondname varchar(20))
BEGIN
INSERT INTO
lastname(Lastname)
VALUES
(inLastname);
INSERT INTO
firstname(Name)
VALUES
(inFirstname);
INSERT INTO
secondname(Secondname)
VALUES
(inSecondname);
INSERT INTO
fullname(LastnameID,NameID,SecondnameID)
SELECT
lastname.id,firstname.id,secondname.id
FROM
lastname,firstname,secondname
WHERE
Lastname = inLastname
AND Name = inFirstname
AND Secondname = inSecondname;
END
Знаю что коряво! Подскажите как правильно?
И вот косяк вылазит- если поля Lastname, Name или Secondname сделать уникальными может вызваться ексепшн Duplicated - как быть в таком случае?? Есть ли какой-то аналог блоков try{}catch{}(перехвата ексепшенов) в SQL?
Неактивен
А зачем такая хитрая организация данных, если не секрет?
Дублей можно избежать, если использовать INSERT IGNORE вместо простого INSERT.
Неактивен
Спасибо.
А в чём эта хитрость проявляется? В 3х таблицах текстовые данные с соотвтственными им id - в 4ой ссылки на определенные id к первым 3м.
Неактивен
«Зачем?»
Можно же хранить для каждого пользователя ФИО строками. Данных не сильно больше, вроде бы...
+ Ваш вариант неустойчив к «атакам на регистр»: если первый человек зарегистрировал имя «иван» с
маленькой буквы, то все остальные «Иван»ы будут писаться с маленькой буквы...
Неактивен
Хмм. Спасибо.
Но это тестовый пример. Взял первое что в голову пришло. Хотел просто разобратся в работе в/с БД MySQL.
Неактивен