Будет ли инструкция MYSQL Insert когда — нибудь возвращать что-то, кроме 1?

#java #mysql #jdbc

Вопрос:

Я пытаюсь придумать несколько сценариев ошибок, и давайте предположим, что у нас есть простое утверждение, например:

 INSERT INTO CAT_TABLE (NAME, BREED, AGE) VALUES ("Henry", "Siamese", 2)
 

Первичным ключом здесь является имя кошки. В большинстве, если не во всех обстоятельствах, это должно вернуть 1. С точки зрения API JDBC, есть ли время, когда он может вернуть что-то, что не является 1? Я знаю, что если есть проблема с самими значениями, это просто вызовет исключение SQL, но когда оно выдаст 0 или какое-то числовое значение, а не 1?

Обновить:

Java-код для использования этого оператора будет выглядеть примерно так:

 Connection connection = getConnection(...);
PreparedStatement ps = connection.prepareStatement(sql);
int result = ps.executeUpdate();
connection.commit();
return resu<
 

Комментарии:

1. Из интереса, как бы вы справились с 2-летним кошкой пурсиан, которую также зовут Генри?

2. Что вы подразумеваете под тем, что это должно вернуть 1 ? Операторы SQL не являются функциями, возвращающими значения.

3. dev.mysql.com/doc/refman/8.0/en/insert.html

4. @forpas Я добавил обновление

5. @Stu Я бы либо выдал исключение с возвращающейся ошибкой sql, либо использовал select, и если оно существует, выдал исключение

Ответ №1:

Я предполагаю, что вы имеете в виду строки, затронутые оператором INSERT. Инструкция INSERT сама по себе не дает результата. Строки, на которые влияет оператор INSERT, будут соответствовать количеству вставленных строк.

Вы можете ВСТАВИТЬ из ВЫБРАННОГО набора результатов:

 INSERT INTO mytable (col1, col2, col3) SELECT col1, col2, col3 FROM ...
 

Этот ВЫБОР может иметь результат в виде нуля строк, или одной строки, или нескольких строк.

Это также может быть не количество строк в результате ВЫБОРА, если вы используете INSERT IGNORE, и некоторые строки выполняются успешно, в то время как другие строки игнорируются из-за ошибок.

Вы также можете создать инструкцию INSERT, которая вставляет несколько строк без инструкции SELECT:

 INSERT INTO mytable (col1, col2, col3) 
VALUES (1,2,3), (4,5,6), (7,8,9), ...
 

Это также может сообщить о строках, затронутых более чем 1.

Комментарии:

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

2. @stackerstack Нет

3. Исключения-это дело клиентского языка. Если ему не удастся вставить строку, то затронутые строки будут равны нулю.

4. @BillKarwin Вопрос задан в контексте API JDBC.

5. Если вы учитываете только сценарии, в которых будет указана 1 затронутая строка, то, конечно, они вернут только 1! 🙂