Вопрос по SQL
с базами не каждый год что-то делаю. а если да - то немного.
сейчас хочу связать две таблицы, например, table0, table1, чтобы одна из колонок нулевой ссылалась на праймери кии из первой. прочитал, как это можно сделать. вроде бы так
create table names (id_name integer not null primary key auto_increment, name char(10));
create table addresses (id_address integer not null primary key auto_increment, address char(100), id_name integer references table1(id1);
таблицы создаются, но:
show create table addresses;
выдает команду, где ни намека на рифэрэнс, как его и не было
могу без проблем добавить такую запись:
insert into adresses values (null, 'address', 222);
или я что-то неправильно делаю, или какой тогда смысл в этой ссязке таблиц, если она ведет себя как и без нее?
попутно еще масса вопросов возникает, например, все "заработало". как правильно добавить адрес в таблицу адресов? нужно сперва запрашивать индекс из таблицы имен, или есть некий быстрый "секрентый" способ?
Тебе надо создать foreign key: https://www.w3schools.com/sql/sql_foreignkey.asp
а как же это? из книжки martin gruber 'understanding sql':
ch. 19foreign key as a column constraintthe column-constraint version of the foreign key constraint is also called the references constraint, because it does not actually contain the words foreign key; it simply uses the word references, and then names the parent key, like this:
create table customers (cnum integer not null primary key, cname char(10, city char(10), snum integer references salespeople(snum) );
the above defines customers.snum as a foreign key whose parent key is salespeople.snum. it is equivalent to this table constraint:
foreign key (snum) referendex salespeople (snum)
я думал, раз не заругалась база при создатии таким образом, значит должно иметь какой-то эффект, а оно, как немцы говорят, ин ди хозэ : (
но проверил: если задать как foreign key as a TABLE constraint, то все красиво (пока).
я так понимаю, что должна была заругаться. а если проглотила - должна выполнить корректно. глючит, понимаю, мария.
https://mariadb.com/kb/en/foreign-keys/
1. Note: MariaDB accepts the REFERENCES clause in ALTER
TABLE and CREATE TABLE statements, but that syntax does nothing. MariaDB
simply parses it without returning any error or warning, for
compatibility with other DBMS's. However, only the syntax described
below creates foreign keys.
2. Currently, foreign keys are only supported by InnoDB.
3. Foreign key constraints can be disabled by setting the foreign_key_checks server system variable to 0.
Первый пункт как минимум.
нужно сперва запрашивать индекс из таблицы имен, или есть некий быстрый "секрентый" способ?
А как же иначе ты узнаешь ключ? Ну можно, конечно, наугад какое-нибудь число поставить...
Единственный "секретный" способ - это LAST_INSERT_ID, если непосредственно перед добавлением записи в таблицу адресов, добавил запись в таблицу имен.
спасибо, заимею ввиду.
снова непонятка. создаю одну таблицу, и другую. в обеих указываю
create table tablename (id integer not null primary key auto_increment, ...
, но когда потом show crteate table...
, то в одной таблице эта колонка int(11), в в другой - int(10) unsigned. почему, если создавались они одинаково? или что такое тогда integer?
хм... тоже не воспроизводится. пока. наверное, что-то намутил. забудем, если не всплывет.
спасибо и извините, что морочу голову примитивами. мне нужно "один раз сделать, чтоб заработало, и забыть". я так всегда с базами, с ними работать мне не нравится.
мне нужно "один раз сделать, чтоб заработало, и забыть".
а зачем тогда в SQL всё делать? Сколько с базами не работал, тоже раз на раз, никогда "вручную" таблицы не создавал
phpmyadmin для марии на сервере или какой другой тул или прямо с редактора диаграмм (ER Editor)
Вот самый любимый (до 10 таблиц бесплатно)
проблемы? сперва подумал, что это - здорово: вот сейчас возьму и наклацаю себе базу.
если просто таблички создавать, никаких проблемов. а когда захотел их связать, не нашел вообще никаких кнопок, где и как это можно сделать. ни добавить foreign key, ни убрать. а с командами можно разобраться. мне их один раз выдать нужно, и то проще поисков куда клацнуть. а если бы делал это регулярно, команды были бы единственным удобным методом : )
они, собственно, такими и остаются.
не нашел вообще никаких кнопок
еся
https://folkprog.net/sozdanie-svyazey-phpmyadmin/
команды были бы единственным удобным методом
Не переношу команды во всех их проявлениях. Только в исключительных случаях пользую. Но это мой персональный бзик
может и еся, но в описании команды прописано, как ее ввести, чтобы получить искомый результат. а в этой штучке - нужно искать кнопочки, которые с названиями, ни о чем не говорящими, нужно изучать "секретный код", в общем, осваивать какую-то новую кнопочную технологию. не люблю, как вы - команды. я - за ясность и простоту : )
но в описании команды прописано
вот вишь - нужно искать описание команды. А кнопы почти всегда можно найти без всякого описания. Просто у меня уже на автомате, что для связи нужно вначале все ключи сделать.
Хотя вручную обычно и не делаю. Рисую все в редакторе, а после просто генерирую из него SQL, который запускаю в phpmyadmin.
Создаем первую таблицу;
CREATE TABLE names(
id_name integer not null primary key auto_increment,
name char(10)
);
Создаем вторую таблицу;
create table addresses (id_address integer not null primary key auto_increment,
address char(100),
id_name integer );
Соединяем таблицы;
ALTER TABLE
addresses
ADD CONSTRAINT
fk_addresses_names_id
FOREIGN KEY (id_name) REFERENCES names(id_name);