insert into
4 отговора
207 прегледа
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)
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)
Re: insert into
различни са начините за различните типове сървери
и също така различен е конкретният синтаксис в зависимост от средата в която го разработваш
ако ползваш примерно php+mysql, начина е горе-долу
mysql_query("INSERT INTO students ....... ");
$last_id = mysql_insert_id();
mysql_query("INSERT INTO .... VALUES ($last_id, .......");
ако това не те устройва, конкретизирай си въпроса относно сървер - среда
и също така различен е конкретният синтаксис в зависимост от средата в която го разработваш
ако ползваш примерно php+mysql, начина е горе-долу
mysql_query("INSERT INTO students ....... ");
$last_id = mysql_insert_id();
mysql_query("INSERT INTO .... VALUES ($last_id, .......");
ако това не те устройва, конкретизирай си въпроса относно сървер - среда
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
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
Re: insert into
нещата, които правя са на Access и за сега не предвиждам конкурентни заявки, всичко се работи на една машина. полетата id в таблиците са primary key и от тип autonumber. дали има аналог на last_insert_id() ?
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
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