Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопрос по SQL

2535  1 2 3 все
koder патриот05.06.20 07:15
koder
NEW 05.06.20 07:15 
в ответ koder 05.06.20 07:11, Последний раз изменено 05.06.20 07:20 (koder)

insert into addresses values (null, 'address', 222);


Пытаемся положить адрес к имени, которого не существует. Получаем ошибку

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails


Защита работает.

................................................................................

insert into names values (null, 'aaaaa');
insert into addresses values (null, 'bbbbbb', 1);


так сработает


#21 
koder патриот05.06.20 07:19
koder
NEW 05.06.20 07:19 
в ответ koder 05.06.20 07:15, Последний раз изменено 05.06.20 07:26 (koder)

Для работы с базами данных существует ряд как бы нотаций. Во первых имена таблиц в единственном числе address, а не addresses. Во вторых поле с primary key всегда просто id. Не id_name, а просто id. Но это на любителя и имхо. Хотя подобные правила потом очень облегчают жизнь кодерам.


Для меня база данных это просто хранилище и я, как программист, вообще как правило в программах использую персистентный слой, который и базы даннвх строит и sql сам генерирует и за целостьностью данных следит.


SQL как язык знать надо. Имхо. Это стандарт. Хотя бы потому, что на многих фирмах просто запрещено пользоваться какими то тулами. Есть предписаные проги и все. Выдадут db developer и радуйся.

#22 
Murr патриот05.06.20 13:17
Murr
NEW 05.06.20 13:17 
в ответ koder 05.06.20 07:19

Во вторых поле с primary key всегда просто id.

------

IDs - не все базы разрешают id - где-то зарезервированно.

#23 
koder патриот05.06.20 13:21
koder
NEW 05.06.20 13:21 
в ответ Murr 05.06.20 13:17
IDs - не все базы разрешают id - где-то зарезервированно.

Например?

#24 
Murr патриот06.06.20 03:17
Murr
NEW 06.06.20 03:17 
в ответ koder 05.06.20 13:21

Например?

-----

Не помню. Спотыкался об это в 2005.

#25 
koder патриот06.06.20 12:16
koder
NEW 06.06.20 12:16 
в ответ Murr 06.06.20 03:17
Спотыкался об это в 2005.


Понятно. Но это наверно год был такой 😁

#26 
MrSanders коренной житель06.06.20 16:27
NEW 06.06.20 16:27 
в ответ koder 06.06.20 12:16

если уж DB2 zOS разрешало ID использовать, то точно всё что сейчас на рынке есть переварит такое имя. Разве в 90-х какой-нибудь foxpro или clipper запрещал. Не помню чтобы с ними проблемы были. Имена полей максимум 10 символов, это помню :)

#27 
Murr патриот06.06.20 20:24
Murr
NEW 06.06.20 20:24 
в ответ MrSanders 06.06.20 16:27

то точно всё что сейчас на рынке есть переварит такое имя.

-----

Все.

За исключением того, что имеет предефенированное поле с тем же именем.

Изменилось это или нет не знаю, не смотрел - просто поменяли ИД на ИДС и забыли...

#28 
koder патриот07.06.20 07:36
koder
NEW 07.06.20 07:36 
в ответ Murr 06.06.20 20:24
За исключением того, что имеет предефенированное поле с тем же именем.

Стандартное имя поля это соглашение. Если соглашение невозможно технически, то его просто меняют. Но до тех пор, пока нет проблем, нет смысла проблемы придумывать и придумывать исключения-решения этих высосанных из пальцы проблем.


На крайняк можно погуглить. Например здесь

https://www.petefreitag.com/tools/sql_reserved_words_check...

#29 
Murr патриот07.06.20 18:16
Murr
NEW 07.06.20 18:16 
в ответ koder 07.06.20 07:36

Если соглашение невозможно технически, то его просто меняют.

-----

Именно это мы и сделали когда наткнулись на проблему.

#30 
  moose коренной житель07.06.20 21:26
NEW 07.06.20 21:26 
в ответ koder 05.06.20 07:19

спасибо, не знал этих всех вещей. почитал это, там очень много всякого, для меня нерелевантного. но постараюсь придерживаться, если вспомню. наверняка выработано практикой.

#31 
  moose коренной житель08.06.20 21:25
NEW 08.06.20 21:25 
в ответ koder 05.06.20 07:11

кстати, не сработало. как не срабатывает и это. докумунтированное (говорят)


alter table tablename rename column oldname to newname;


текст сообщения как всегда идиотский. т.е. все равно что его бы вообще не было. возможно, было бы даже лучше.

как народ работает с этими субд? повбивавби (с)

#32 
NightWatch коренной житель08.06.20 23:05
NightWatch
NEW 08.06.20 23:05 
в ответ moose 08.06.20 21:25
как не срабатывает и это. докумунтированное (говорят)
alter table tablename rename column oldname to newname;

https://mariadb.com/kb/en/alter-table/

Проверяем версию: select version();

#33 
koder патриот09.06.20 07:08
koder
NEW 09.06.20 07:08 
в ответ moose 08.06.20 21:25
кстати, не сработало. как не срабатывает и это. докумунтированное (говорят)

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

#34 
  moose коренной житель09.06.20 22:08
NEW 09.06.20 22:08 
в ответ koder 09.06.20 07:08
Если нужно восстановить вселенскую справедливость, то пожалуй я для этого слабоват.

на форумах фраз нахватались, или сами составлять такое умеете?


Рожей не вышел.

а что с ней не так? выставляйте фото, обсудим. может что-то предпринять не поздно : )


#35 
koder патриот10.06.20 07:19
koder
NEW 10.06.20 07:19 
в ответ moose 09.06.20 22:08
на форумах фраз нахватались, или сами составлять такое умеете?

Ок. Я просто хотел сказать, что многие продукты нелогичны или кажутся таковыми при первом использовании. И что я привык просто искать решения таких проблем в инете. Не особо заморачиваясь вопросом, как вообще жить в таких условиях.

Если будет нужна конкретная помощь по SQL, я попробую помочь, чем смогу.

#36 
  moose коренной житель18.06.20 20:50
NEW 18.06.20 20:50 
в ответ koder 10.06.20 07:19

вы мне уже конкретно помогли, спасибо!

я просто, как заглядывающий изредка, полагал, что здесь все как в газете: если написано - все правда : )


#37 
  moose коренной житель10.10.20 19:54
NEW 10.10.20 19:54 
в ответ moose 18.06.20 20:50

возникла проблема при работе с mysql.

собственно, не SQL касается, но тему не хочу новую открывать.

есть у меня прога, которая связывается с сервером (mariaDB), читает оттуда что-то и показывает, в общем это не важно. она вдруг перестала работать.

использую в C# библиотеку MySQL Connector Net 6.9.11.

_connection = new MySqlConnection(connectionString);

проходит на ура, а
_connection.Open();

бросается прерывание

System.IO.IOException: 'The handshake failed due to an unexpected packet format.'

если запускаю в консоли mysql.exe и соединяюсь с базой - никаких проблем, как и раньше.

что такого могло случиться?


#38 
AlexNek патриот10.10.20 21:36
AlexNek
NEW 10.10.20 21:36 
в ответ moose 10.10.20 19:54

А база и клиент на разных серверах?

Обновы были какие то в последнее время?

Порты/ фаервол не менялись?


Я вот только не помню отчего я энту штуку не пользовал, или еще не было или что то не получалось смущ

#39 
  moose коренной житель10.10.20 22:57
NEW 10.10.20 22:57 
в ответ AlexNek 10.10.20 21:36

клиент - на моем компе.

как часто случается, стоит позвать на помощь, как проблема тут же сама собой разрулёвывается : )

гоголь все выводил на какие-то SSL проблемы, сертификаты и пр. решил побаловаться с параметрами, и вот, указав просто SSL Mode=None, удалось все решить. видимо, на сервере что-то подкрутили за это время, раньше что-то было по умолчанию, даже слушать и знать не хочу что именно. важно, что все теперь идет замечательно. до следующего раза : )

#40 
1 2 3 все