Чтобы проверить, не возвратил ли JavaScript в nonexistant.js
ошибки, необходимо добавить переменную в http://fail.org/nonexistant.js
как var isExecuted = true;
и затем проверить, существует ли он, когда тег script загружается.
Однако, если Вы только хотите проверить, что эти nonexistant.js
возвратился без 404 (значение его существует), можно попробовать isLoaded
переменная...
var isExecuted = false;
var isLoaded = false;
script_tag.onload = script_tag.onreadystatechange = function() {
if(!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete") {
// script successfully loaded
isLoaded = true;
if(isExecuted) // no error
}
}
Это покроет оба случая.
Я не думаю, что вы когда-нибудь можете быть уверены в следующем идентификаторе, потому что кто-то может вставить новую строку сразу после того, как вы запросили следующий идентификатор. По крайней мере, вам понадобится транзакция, и, если я не ошибаюсь, вы можете получить фактический используемый идентификатор только после его вставки, по крайней мере, это обычный способ обработки - см. http : //dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
Если это используется вместе для ВСТАВКИ новой записи, вы можете использовать что-то вроде этого.
(Вы указали в своих комментариях, что идентификатор увеличивается автоматически, а для другой таблицы требуется следующий ID + 1)
INSERT INTO TABLE2 (id, field1, field2, field3, etc)
VALUES(
SELECT (MAX(id) + 1), field1, field2, field3, etc FROM TABLE1
WHERE condition_here_if_needed
)
Это псевдокод, но вы поняли идею
Один из способов сделать это - установить автоматическое приращение индекса. Затем ваш оператор SQL просто указывает NULL, а затем синтаксический анализатор SQL сделает все остальное за вас.
INSERT INTO foo VALUES (null);
Если вы хотите выбрать первый пробел, используйте следующее:
SELECT @r
FROM (
SELECT @r := MIN(id) - 1
FROM t_source2
) vars,
t_source2
WHERE (@r := @r + 1) <> id
ORDER BY
id
LIMIT 1;
Существует синтаксическая версия ANSI
тот же запрос:
SELECT id
FROM mytable mo
WHERE (
SELECT id + 1
FROM mytable mi
WHERE mi.id < mo.id
ORDER BY
mi.id DESC
LIMIT 1
) <> id
ORDER BY
id,
LIMIT 1
однако он будет медленным из-за ошибки оптимизатора в MySQL
.
Насколько я понимаю, если есть id: 1,2,4,5, он должен вернуть 3.
SELECT t1.id + 1
FROM theTable t1
WHERE NOT EXISTS (
SELECT *
FROM theTable t2
WHERE t2.id = t1.id + 1
)
LIMIT 1
вы сказали:
мой столбец идентификатора - автоинкремент, у меня есть чтобы получить идентификатор и преобразовать его в другая база. так что мне нужно получить следующую идентификатор перед вставкой вызывает преобразованный код также будет вставлен.
то, что вы просите, очень опасно и приведет к состоянию гонки. если ваш код запускается дважды одновременно разными пользователями, они оба получат 6, и их обновления или вставки будут перебирать друг друга.
Я предлагаю вам вместо INSERT
в таблицу , получите значение auto_increment, используя LAST_INSERT_ID ()
, а затем UPDATE
строку, чтобы установить любое имеющееся у вас значение, которое зависит от значения auto_increment.
Учитывая то, что вы сказали в комментарии:
мой столбец идентификатора автоматически увеличивается, мне нужно получить идентификатор и преобразовать его в другую базу. Поэтому мне нужно получить следующий идентификатор перед вставкой потому что преобразованный код тоже будет вставлен.
Есть способ сделать то, что вы просите, а именно спросить таблицу, какой идентификатор следующей вставленной строки будет перед вы фактически вставляете:
SHOW TABLE STATUS WHERE name = "myTable"
в этом наборе результатов будет поле с именем «Auto_increment», которое сообщает вам следующее значение автоматического увеличения.
Обновление 2014-12-05: Я не рекомендую этот подход по причинам, изложенным в (принятом) ответе Саймона, а также в комментарии Диего. Пожалуйста, используйте приведенный ниже запрос на свой страх и риск.
Самый короткий, который я нашел на сайте разработчика mysql:
SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want'
имейте в виду, если у вас несколько баз данных с одинаковыми таблицами, вы также должны указать имя базы данных, например:
SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want' AND table_schema='the_database_you_want';
Если вы действительно хотите вычислить ключ следующей вставки перед вставкой строки (что, на мой взгляд, не очень хорошая идея), я бы посоветовал вам использовать максимум, используемый в настоящее время id плюс один:
SELECT MAX(id) + 1 FROM table
Но я бы посоветовал вам позволить MySQL создать сам id (используя столбец с автоинкрементом) и использовать LAST_INSERT_ID ()
для его получения из СУБД. Для этого используйте транзакцию, в которой вы выполняете вставку, а затем запрашиваете идентификатор, например:
INSERT INTO table (col1) VALUES ("Text");
SELECT LAST_INSERT_ID();
Теперь набор возвращаемых данных содержит только один столбец, содержащий идентификатор вновь созданной строки.