Подтвердить что ты не робот

Поле 'id' не имеет значения по умолчанию?

Я новичок в этом SQL; Я видел аналогичный вопрос с гораздо большими программами, которые я не могу понять на данный момент. Я делаю базу данных для карточных игр, которые можно использовать на моей домашней странице.

Я использую MySQL Workbench в Windows. Ошибка, которую я получаю:

Код ошибки: 1364. Поле 'id' не имеет значения по умолчанию

CREATE TABLE card_games
(
nafnleiks varchar(50), 
leiklysing varchar(3000), 
prentadi varchar(1500), 
notkunarheimildir varchar(1000), 
upplysingar varchar(1000), 
ymislegt varchar(500), 
id int(11) PK
);

insert into card_games (nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)

values('Svartipétur',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.',
'Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum',
'Aðrar upplýsingar',
'ekkert hér sem stendur'
);

values('Handkurra',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.',
'Heimildir um notkun', 
'Aðrar upplýsingar',
'ekkert her sem stendur'
);

values('Veiðimaður',
'Leiklýsingu vantar',
'Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil. Reykjavík: Bókafélagið. Bls. 19-20.',
'vantar',
'vantar',
'vantar'
);
4b9b3361

Ответ 1

Есть 2 решения, упомянутые ниже:

Решение 1

MySQL, скорее всего, работает в режиме STRICT SQL. Попробуйте выполнить SQL-запрос SET GLOBAL sql_mode='' или отредактируйте my.cnf/my.ini, чтобы убедиться, что вы не устанавливаете STRICT_ALL_TABLES и/или STRICT_TRANS_TABLES.

Решение 2

Если Решение-1 не работает, попробуйте Решение-2, как указано в следующих шагах:

  1. Запустите инструмент администрирования MySQL от имени администратора.
  2. Затем перейдите к переменной запуска.
  3. Затем перейдите на вкладку Advance.
  4. найдите режим SQL и удалите STRICT_ALL_TABLES и/или STRICT_TRANS_TABLES а затем нажмите "Применить изменения".
  5. Перезапустите MySQL Server.
  6. Готово.

Примечание. Я тестировал эти решения в MySQL Server 5.7.

Ответ 2

Поскольку id - первичный ключ, вы не можете иметь разные строки с одинаковым значением. Попытайтесь изменить таблицу так, чтобы id автоматически увеличивалось:

id int NOT NULL AUTO_INCREMENT

а затем установите первичный ключ следующим образом:

PRIMARY KEY (id)

Все вместе:

CREATE TABLE card_games (
   id int(11) NOT NULL AUTO_INCREMENT,
   nafnleiks varchar(50),
   leiklysing varchar(3000), 
   prentadi varchar(1500), 
   notkunarheimildir varchar(1000),
   upplysingar varchar(1000),
   ymislegt varchar(500),
   PRIMARY KEY (id));

В противном случае вы можете указать id в каждой вставке, стараясь каждый раз устанавливать другое значение:

insert into card_games (id, nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)

values(1, 'Svartipétur', 'Leiklýsingu vantar', 'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.', 'Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum', 'Aðrar upplýsingar', 'ekkert hér sem stendur' );

Ответ 3

Идентификатор должен быть установлен как auto-increment.

Чтобы изменить существующий столбец идентификатора для автоматического увеличения, просто добавьте это

ALTER TABLE card_games MODIFY id int NOT NULL AUTO_INCREMENT;

Ответ 4

Я получал сообщение об ошибке, в то время как ExecuteNonQuery() разрешается с добавлением AutoIncrement к первичному ключу моей таблицы. В вашем случае, если вы не хотите добавлять первичный ключ, мы должны присвоить значение первичному ключу.

ALTER TABLE 't1' 
CHANGE COLUMN 'id' 'id' INT(11) NOT NULL AUTO_INCREMENT ;

Ответ 5

убедитесь, что для основного ключа в классе модели у вас нет определенного установщика.

public class User{
@Id
@GeneratedValues
private int user_Id;
private String userName;

public int getUser_Id{
return user_Id;
}

public String getUserName{
return userName;
}

public void setUserName{
this.userName=userName;
}
}

Ответ 6

Так как mysql 5.6 существует новое значение по умолчанию, убедитесь, что вы явно вставляете каждое поле, которое не имеет значения по умолчанию, установленного в определении таблицы.

отключить и протестировать это: см. этот ответ здесь: ошибка mysql 1364 Поле не имеет значений по умолчанию

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

Если сторонняя программа mysql viewer сообщает об этой ошибке, вероятно, вы ограничены исправлением в этой ссылке.

Ответ 7

Это вызвано тем, что MySQL имеет строгий режим, который не позволяет командам INSERT или UPDATE с пустыми полями, где у схемы нет установленного значения по умолчанию.

Есть несколько исправлений для этого.

Первое исправление - назначить значение по умолчанию для вашей схемы. Это можно сделать с помощью простой команды ALTER:

ALTER TABLE `details` CHANGE COLUMN `delivery_address_id` `delivery_address_id` INT(11) NOT NULL DEFAULT 0 ;

Однако это может потребоваться для многих таблиц в вашей схеме базы данных, которая станет очень утомительной. Второе исправление - удалить sql_mode STRICT_TRANS_TABLES на сервере mysql.

Если вы используете установленный MySQL brew, вы должны отредактировать файл my.cnf в каталоге MySQL. Измените sql_mode внизу:

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
sql_mode=NO_ENGINE_SUBSTITUTION

Сохраните файл и перезапустите Mysql.

Источник: https://www.euperia.com/development/mysql-fix-field-doesnt-default-value/1509

Ответ 8

Решение: удалите STRICT_TRANS_TABLES из sql_mode

Чтобы проверить настройку по умолчанию,

mysql> set @@sql_mode = 
'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode                                                     |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

Запустите образец запроса

mysql> INSERT INTO nb (id) VALUES(3);
ERROR 1364 (HY000): Field 'field' doesn't have a default value

Удалите STRICT_TRANS_TABLES, сбросив его до нуля.

mysql> set @@sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

Теперь запустите тот же тестовый запрос.

mysql> INSERT INTO nb (id) VALUES(3);
Query OK, 1 row affected, 1 warning (0.00 sec)

Источник: https://netbeans.org/bugzilla/show_bug.cgi?id=190731

Ответ 9

Для меня проблема была исправлена, когда я изменил

<id name="personID" column="person_id">
    <generator class="native"/>
</id>

к

<id name="personID" column="person_id">
    <generator class="increment"/>
</id>

в моем Person.hbm.xml.

после этого я снова столкнулся с той же ошибкой для другого поля (mobno). Я попытался перезапустить мою среду IDE, воссоздав базу данных с предыдущей проблемой, которая в конечном итоге была исправлена, когда я заново создаю свои таблицы, используя (без ENGINE=InnoDB DEFAULT CHARSET=latin1; и удаляя символы подчеркивания в имени поля)

CREATE TABLE `tbl_customers` (
  `pid` bigint(20) NOT NULL,
  `title` varchar(4) NOT NULL,
  `dob` varchar(10) NOT NULL,
  `address` varchar(100) NOT NULL,
  `country` varchar(4) DEFAULT NULL,
  `hometp` int(12) NOT NULL,
  `worktp` int(12) NOT NULL,
  `mobno` varchar(12) NOT NULL,
  `btcfrom` varchar(8) NOT NULL,
  `btcto` varchar(8) NOT NULL,
  `mmname` varchar(20) NOT NULL
)

вместо

CREATE TABLE `tbl_person` (
  `person_id` bigint(20) NOT NULL,
  `person_nic` int(10) NOT NULL,
  `first_name` varchar(20) NOT NULL,
  `sur_name` varchar(20) NOT NULL,
  `person_email` varchar(20) NOT NULL,
  `person_password` varchar(512) NOT NULL,
  `mobno` varchar(10) NOT NULL DEFAULT '1',
  `role` varchar(10) NOT NULL,
  `verified` int(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Я думаю, это связано с использованием ENGINE=InnoDB DEFAULT CHARSET=latin1;, потому что однажды я получил ошибку org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column 'mob_no' in 'field list', хотя это было мое предыдущее имя столбца, которое даже не существует в моей текущей таблице. Даже после резервного копирования базы данных (с измененным именем столбца, используя движок InnoDB), я все еще получаю ту же ошибку со старым именем поля. Возможно, это связано с кэшированием в этом Engine.

Ответ 10

В качестве разработчика настоятельно рекомендуется использовать режим STRICT, потому что он позволит вам видеть проблемы/ошибки/предупреждения, которые могут возникнуть, а не просто обойти его, отключив строгий режим. Это также лучшая практика.

Строгий режим - отличный инструмент для просмотра грязного, неаккуратного кода.

Ответ 11

У меня возникла проблема в AWS с mariadb - так я решил проблему с STRICT_TRANS_TABLES

SSH на сервер и переключиться в каталог ect

[ec2-user]$ cd /etc

Сделайте резервную копию my.cnf

[ec2-user etc]$ sudo cp -a my.cnf{,.strict.bak}

Я использую нано для редактирования, но есть и другие

[ec2-user etc]$ sudo nano my.cnf

Добавьте эту строку в файл my.cnf

#
#This removes STRICT_TRANS_TABLES
#
sql_mode=""

Затем выйдите и сохраните

ИЛИ, если sql_mode есть что-то вроде этого:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Изменить на

sql_mode=""

выйти и сохранить

затем перезапустите базу данных

[ec2-user etc]$ sudo systemctl restart mariadb

Ответ 12

Это удивительно для меня, для решения Поле 'id' не имеет значения по умолчанию? Я перепробовал все возможные способы, которые приведены здесь, как..

set sql_mode=""
set @@sql_mode = ''; etc

но, к сожалению, это не сработало для меня. Поэтому после долгого расследования я обнаружил, что

@Entity
@Table(name="vendor_table")
public class Customer {
    @Id
    @Column(name="cid")
    private int cid;
.....
}

@Entity
@Table(name="vendor_table")
public class Vendor {
    @Id
    private int vid;
    @Column
    private String vname;
    .....
}

Здесь вы можете видеть, что обе таблицы имеют одинаковые имена. Это очень забавная ошибка, сделанная мной :)))). После исправления этого моя проблема исчезла.

Ответ 13

Я могу сказать вам, VARCHAR от 0 до 255.

Ответ 14

Я получил этот вопрос в 2019 году. Моей проблемой было обновление таблицы1 таблицей2, игнорируя переменные с разными именами в обеих таблицах. Я получил ту же ошибку, что и упомянутый в вопросе: Код ошибки: 1364. Поле "id" не имеет значения по умолчанию в mysql. Вот как это решено:

Таблица 1 Схема: идентификатор (уникальный & автоинкремент) | имя | профиль | Возраст Таблица 2 Схема: Motherage | отец | имя | профиль

Это решило мою ошибку: INSERT IGNORE INTO table2 (имя, профиль) ВЫБРАТЬ имя, профиль ИЗ table1

Ответ 15

добавьте значение по умолчанию для вашего идентификатора, скажем, в определении таблицы это решит вашу проблему.