Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: BULK INSERT при двух связанных таблицах ?

Есть 2 таблицы и интерфейс их наполнения:

Код

CREATE TABLE `serial` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `serial` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `serial` (`serial`),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `player` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mac` varchar(255) NOT NULL,
  `serial_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mac` (`mac`),
  UNIQUE KEY `serial_id` (`serial_id`),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


Проблема в том, что эти две таблицы связаны между собой (serial_id один к одному) и я не могу использовать BULK INSERT (т.к. необходимо сначала вставить запись в одну таблицу, узнав ее PRIMARY KEY, затем вставить запись в другую связанную таблицу используя полученный PRIMARY ID ). 

То есть я делаю парсинг примерно такого файла:

00:16:fb:86:d0:d7 | BW678DS78
00:16:fb:86:d0:c5 | JFH76GJH
00:16:fb:87:af:2e | JKKJHD767
00:16:fb:87:af:36 | STF67JG67

где соответственно надо добавить серийник (BW678DS78) в таблицу serial, мак (00:16:fb:86:d0:d7) в таблицу player и связать их друг с другом. Строк в таких файлах может насчитывать несколько тысяч.

А это получается цикл из нескольких тысячей INSERT друг за другом. 

Как можно оптимизировать этот процесс? 



Это сообщение отредактировал(а) martin88 - 3.8.2015, 17:58
Ответ:
Есть 2 таблицы и интерфейс их наполнения:

Код

CREATE TABLE `serial` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `serial` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `serial` (`serial`),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `player` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mac` varchar(255) NOT NULL,
  `serial_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mac` (`mac`),
  UNIQUE KEY `serial_id` (`serial_id`),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


Проблема в том, что эти две таблицы связаны между собой (serial_id один к одному) и я не могу использовать BULK INSERT (т.к. необходимо сначала вставить запись в одну таблицу, узнав ее PRIMARY KEY, затем вставить запись в другую связанную таблицу используя полученный PRIMARY ID ). 

То есть я делаю парсинг примерно такого файла:

00:16:fb:86:d0:d7 | BW678DS78
00:16:fb:86:d0:c5 | JFH76GJH
00:16:fb:87:af:2e | JKKJHD767
00:16:fb:87:af:36 | STF67JG67

где соответственно надо добавить серийник (BW678DS78) в таблицу serial, мак (00:16:fb:86:d0:d7) в таблицу player и связать их друг с другом. Строк в таких файлах может насчитывать несколько тысяч.

А это получается цикл из нескольких тысячей INSERT друг за другом. 

Как можно оптимизировать этот процесс? 



Это сообщение отредактировал(а) martin88 - 3.8.2015, 17:58
Вопрос: Обновить данные в таблице excel на основе даннх из Access

Уважаемые форумчане.

Помогите пожалуйста решить следующую проблему.

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

Но вот возникла необходимость обновлять ежедневно несколько полей в таблице ексель на основе таблицы акссес так как ето делается в запросах на обновление аксес (UPDATE ТаблицаЕксель.Лист1 INNER JOIN ТаблицаАксес ON ТаблицаЕксель.Лист1.А = ТаблицаАксес.Поле1
SET ТаблицаЕксель.Лист1.В = ТаблицаАксес.Поле2.
Но данные связанной таблицы не редактируются ни в ручную, путем ввода данных, ни запросами на изменение, ни при открытом, ни при закрытом файле ексель.

Подскажите как ето можно сделать.
Заранее благодарен
пс. Офис 2003.
Ответ:
Сообщение от Eugene-LS
по ячейкам большие таблы Excel - отрабатывать довольно долго. Хорошо когда их 200 000 - а если на порядок больше?
Это совершеннейшая правда. Равно как и сложное форматирование больших файлов. Тоже занимает уйму времени.
Вопрос: Связанные таблицы

Мне приходят несколько файлов csv/ xlsx. Каждый файл - будущая таблица в бд.
В файлах нет первичных ключей.
Создаю в access связанные таблицы. Они получаются без первичных ключей.
У всех таблиц(файлов) есть общее поле(текстовое).
По этому полю можно связать таблицы.
Как это сделать?
Ответ:
Сообщение от saikle
Создаю в access связанные таблицы.
Присоединенные таблицы можно связать в схеме данных, без обеспечения целостности, естественно, в запросах. Но обычно такие присоединенные таблицы используются для добавления новых данных в таблицы Аксесса, в которых уже есть ключи. И основная работа уже с этими таблицами.
Вопрос: Создать базу данных ''Служба занятости''

СЛУЖБА ЗАНЯТОСТИ. ПОДСИСТЕМА УЧЕТА ВАКАНСИЙ.
Разрабатываемая подсистема «Учет вакансий» является частью автоматизированной информационной системы «Служба занятости» и решает задачи:
• регистрация работодателей и их требований к кандидатам на вакансию;
• учет вакансий;
• поиск вакансий;
• печать отчетов.
При первичном обращении работодателя для внесения в базу данных информации об организации, необходимо личное присутствие работодателя или его представителя. При регистрации работодателя так же используется регистрационный лист «Сведения о потребности в работниках», в котором необходимо указать информацию о предприятии и требования, предъявляемые к кандидату на вакансию, а именно:
• адрес предприятия, организации;
• фамилия, имя, отчество руководителя;
• адрес непосредственного места работы;
• контактный телефон;
• наименование профессии (должности) в соответствии с ведомственным классификатором;
• сведения об образовании, квалификации, навыках, знаниях, режиме и опыте работы;
• заработная плата, надбавки, премии и т.д.;
• наличие командировок, необходимость работать сверхурочно и в выходные дни.

На основании полученных данных формируются таблицы. По соответствующим запросам печатаются отчеты.
Спроектировать информационную систему учета вакансий в службе занятости.
Ответ:
Сообщение от Владимир51
На основании полученных данных формируются таблицы. По соответствующим запросам печатаются отчеты.
Спроектировать информационную систему учета вакансий в службе занятости.
У тебя всё выше написано, могу скинуть методичку, если нужно)

Добавлено через 1 минуту
Сообщение от Владимир51
«Учет вакансий»
Такая лёгкая база.. Мне вот на практике попалась база "Банк" - вот там много интересного было)
Вопрос: MS Access и, возможно, VBA :копировать данные из таблицы

Помогите чайнику! MS Access 2013
Есть заполненная таблица 1 с полями:
--№, Номер зачетки, ФИО, E-mail, Телефон (ключевое поле "номер зачетки");
и пустая таблица 2 с полями:
--№, Номер зачетки, ФИО, 1 модуль, 2 модуль, ... , Итого.

Необходимо: копировать данные из таблицы 1 (из полей №, Номер зачетки, ФИО) в таблицу 2 (в поля с теми же именами).

Как?? В распоряжении только возможности access и встроенный VBA...
Ответ:
Сообщение от Tesa
Есть заполненная таблица 1 с полями:
--№, Номер зачетки, ФИО, E-mail, Телефон (ключевое поле "номер зачетки");
и пустая таблица 2 с полями:
--№, Номер зачетки, ФИО, 1 модуль, 2 модуль, ... , Итого.
Необходимо: копировать данные из таблицы 1 (из полей №, Номер зачетки, ФИО) в таблицу 2 (в поля с теми же именами).
Как?? В распоряжении только возможности access и встроенный VBA...
SQL
1
INSERT INTO target [(field1[, field2[,]])] [IN externaldatabase]     SELECT [SOURCE.]field1[, field2[,]     FROM tableexpression
SQL
1
2
3
INSERT INTO tbl2([],[Номер зачетки],[ФИО],[1 модуль],[2 модуль], [ Итого]) 
    SELECT [],[Номер зачетки],[ФИО],[соотноси номер столбца],[соотноси номер столбца], [ Итого]
    FROM tab1
SQL
1
... [IN externaldatabase] ...
- это если в другой базе данных
Вопрос: создание формы с изменением данных в таблице - MS Access

Нужно создать таблицу склад(с книгами) и заказов. Вывести запрос на остаток, общее количество книг и затем создать форму с автоматическим изменением данных в таблице "склад" (пыталась, не выходит).
сказали сделать что-то типо чека(в магазине).
Ответ:
ks68
Нужно создать таблицу склад(с книгами) и заказов. Вывести запрос на остаток, общее количество книг и затем создать форму с автоматическим изменением данных в таблице "склад" (пыталась, не выходит).
сказали сделать что-то типо чека(в магазине).


какой тип работы
--производственная
--студенческая

--локальная
--сетевая
Вопрос: История изменения данных в таблице

Здравствуйте.

Подскажите пожалуйста как можно просмотреть историю по изменению данных в таблице к примеру определенного поля?

Спасибо!
Ответ:
Nechto
Здравствуйте.

Подскажите пожалуйста как можно просмотреть историю по изменению данных в таблице к примеру определенного поля?

Спасибо!


CT, CDC
Вопрос: Запрос их нескольких связанных таблиц (один ко многим).

Здравствуйте!
Ни могу разобраться, как получить данные из нескольких, связанных между собой таблиц (один ко многим).
Есть Головная таблица, состоящая из нескольких столбцов:
A1; B2; C3; D4 и т.д.
И есть несколько других таблиц, например, таблица A1.
В таблице A1 имеются свои столбцы.
Как правильно создать запрос, чтобы получить сводную таблицу, где в А1 головной таблицы, поставлялись значения из таблицы A1 и.т.д.

PS. Я новичок. В SQL не нашёл графических запросов, как было в MS Access.
Ответ: что за тип поля A1 в вашей [головной таблице]? оно обязательное или нет?
а в поле id в табличке A1 какие значения?

попробуйте LEFT OUTER JOIN
Вопрос: Вывод данных из связанных таблиц

Добрый день, Уважаемые Форумчане!
Помогите разобраться с одной проблемой.
Есть 3 таблицы, связанные между собой:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE table1(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table1 varchar(60),
PRIMARY KEY (ID)) ENGINE = InnoDB;
 
CREATE TABLE table2(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table2 varchar(60),
ID_table1 INT(11) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_table1) REFERENCES table1(ID)
ON UPDATE CASCADE
ON DELETE CASCADE) ENGINE = InnoDB;
 
 
CREATE TABLE table3(
ID INT(11) NOT NULL AUTO_INCREMENT,
Name_table3 varchar(60),
ID_table1 INT(11) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_table1) REFERENCES table1(ID)
ON UPDATE CASCADE
ON DELETE CASCADE) ENGINE = InnoDB;
Во всех таблицах записаны данные.
Table1
ID|Name_table1
1 |one
2 |two
3 |three

Table2
ID|Name_table2|ID_table1
1 |new |1
2 |old |1
3 |modern |2


Table3
ID|Name_table3|ID_table2
1 |people |2
2 |dogs |2
3 |cat |3


Я пытаюсь получить данные следующим запросом:


MySQL
1
2
3
Select Name_table1, Name_table2, Name_table3 
FROM table1, table2, table3
WHERE table1.ID = 1
В итоге он мне выводит слишком много полей:

Name_table1| Name_table2|Name_table3
one |new |people
one |old |people
one |modern |people
one |new |dogs
one |old |dogs
one |modern |dogs
one |new |cat
one |old |cat
one |modern |cat


А хотелось бы увидеть следующий результат:
Name_table1| Name_table2|Name_table3
one |new |people
one |old |people


И еще вопрос. Как вывести значения при следующем запросе:
MySQL
1
2
3
Select Name_table1, Name_table2, Name_table3 
FROM table1, table2, table3
WHERE table1.ID=table2.ID_table1 and table1.ID = table3.ID_table1 and table1.ID = 3;
Т.к. в таблице table2 ID_table1 = 3 не существует, то вся выборка вышла пустой. А как сделать так, чтобы выводило поля, в которых table1.ID = 3, без учета пустых столбцов?
Хочу увидеть следующий результат:
Name_table1| Name_table2|Name_table3
three | |cat
Ответ: Благодарю за ответ!
А как-нибудь можно совместить 1 и 2 пункты?
Как можно вывести и null строки и без декартова произведения
Выполняю следующий запрос:
MySQL
1
2
3
4
5
SELECT Name_table1, Name_table2, Name_table3
FROM table1
LEFT JOIN table2 ON table1.ID=table2.ID_table1
LEFT JOIN table3 ON table1.ID=table3.ID_table1
where table1.ID=3;
Но в данном запросе декартово произведение остается.
А если прописать к условию что-то типа:
MySQL
1
 where table1.ID=table2.ID_table1 and table1.ID=table3.ID_table1 and table1.ID=3
То выходит пустая таблица.
Вопрос: TRUNCATE TABLE связанных таблиц

Здравствуйте. Использую на сайте базу данных MySQL.
Сайт большой и использует множество таблиц с огромным количеством данных. Я хочу очисть несколько из этих таблиц, но при вызове команды
MySQL
1
TRUNCATE TABLE `sometable`;
MySQL говорит, что делать этого не будет, так как:
Code
1
table referenced in a foreign key
то есть данная таблица связанная с другой.

Вопрос: Как очистить (TRUNCATE) целую кучу связанных таблиц. Их в связке может быть много.
Вопрос: Как узнать как таблицы связаны между собой? Первая таблица может быть связана со второй, вторая с третей и четвертой. Те в свою очередь тоже могут быть с вязаны с другими. Как проследить цепочку?

Заранее спасибо!
Ответ: спасибо большое. Но все-равно не получается.

Есть две таблицы:
crm_company_contact - главная.
crm_company_user_data - дочерняя.

Таблицу crm_company_user_data получилось очистить при помощи TRUNCATE. но на нее все равно ссылается главная таблица при попытке очистки:
Code
1
#1701 - Cannot truncate a table referenced in a foreign key constraint (`saljarstod.dev`.`crm_company_user_data`, CONSTRAINT `crm_company_user_data_FK_3` FOREIGN KEY (`company_contact_id`) REFERENCES `saljarstod.dev`.`crm_company_contact` (`id`))
Что я делаю не так?