insert into

4 отговора 207 прегледа
#1

insert into

здравейте! моля за съвет по следния въпрос: имам таблица students с полета id, student_id, name и таблица izpiti с полета id, st_id, izpit_id. двете таблици са свързани с полето id и st_id. как е най-добре да се въвеждат данните в таблицата izpiti? сега го правя така

insert into students(student_id, name) values (10, 'ime')
select max(id) from students
insert into izpiti(st_id, izpit_id) values(стойността на max(id), 10)

Отговор
в отговор на student #2

Re: insert into

различни са начините за различните типове сървери

и също така различен е конкретният синтаксис в зависимост от средата в която го разработваш

ако ползваш примерно php+mysql, начина е горе-долу

mysql_query("INSERT INTO students ....... ");
$last_id = mysql_insert_id();
mysql_query("INSERT INTO .... VALUES ($last_id, .......");

ако това не те устройва, конкретизирай си въпроса относно сървер - среда

Отговор
в отговор на student #3

Re: insert into

Същото което phpGuru ти предлага, но изцяло на сървъра (т.е. SQL) и с малко повече обяснения.

insert into students(student_id, name) values (10, 'ime');
insert into izpiti(st_id, izpit_id) values(LAST_INSERT_ID(), 10)

1. Това работи само в MySQL
2. Само ако колоната students.id е auto_increment

3. Разликата между MAX(id) и LAST_INSERT_ID() е в това, че MAX(id) винаги ще ти върне най-големия номер докато LAST_INSERT_ID() връща последната стойност вмъкната в таблицата от текущата сесия

Ако ямаш няколко конкурентни процеса които изпълняват тази последователност не можеш да предвидиш каква стойност ще връща MAX() - може някой друг да е вмъкнал нов(и) ред(ове) между INSERT .. и SELECT MAXI(id)

точно това е и ролята на LAST_INSERT_ID() - да изолира сесиите в това отношение.

salle.online.bg/sig
Отговор
в отговор на salle #4

Re: insert into

нещата, които правя са на Access и за сега не предвиждам конкурентни заявки, всичко се работи на една машина. полетата id в таблиците са primary key и от тип autonumber. дали има аналог на last_insert_id() ?

Отговор
в отговор на student #5

Re: insert into

emulirai sequence, algoritymyt nqma da e mnogo efficient, no pyk shte bachka i bez table lock /prawish sequence tablica s edno id i funkciika generate_id, koqto da ti selectwa id za polzwane i da update-wa sys sledwashtoto i tyi kato si s access, twa go puskash w edin while s nqkwa loop stoinost, primerno 100, da si opitwa, ako ne moje, i fyrlqsh greshka, ako ne moje/

P.S. kato se polzwa mysql_insert_id, a ne LAST_INSERT_ID w sql-a, e hubavo da se podawa connection-a kato parametyr, za da ne stavat infekcii

Отговор