source

필드 'id'에 기본값이 없습니다.

factcode 2022. 10. 13. 23:35
반응형

필드 'id'에 기본값이 없습니다.

저는 이 SQL을 처음 접합니다. 훨씬 더 큰 프로그램에서 비슷한 질문을 본 적이 있지만, 현재로서는 이해할 수 없습니다.홈페이지에서 사용할 카드 게임 데이터베이스를 만들고 있습니다.

Windows에서 MySQL Workbench를 사용하고 있습니다.표시되는 에러는 다음과 같습니다.

에러 코드: 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'
);

~로id을 사용하다같은 값을 가진 다른 행을 사용할 수 없습니다.이 바뀌도록 .id incremented 자동증가.

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' );

아래 2가지 솔루션이 있습니다.

솔루션 1

MySQL은 대부분의 경우 STRICT SQL 모드입니다.SQL 쿼리 실행 시도SET GLOBAL sql_mode='' my/ "my.cnf / my.ini"가 설정되어 있지 확인합니다.STRICT_ALL_TABLES "/"/"STRICT_TRANS_TABLES.

솔루션 2

솔루션 1이 동작하지 않는 경우는, 이하의 순서에 따라서 솔루션 2를 시험합니다.

  1. MySQL Administrator 도구를 Administrator로 실행합니다.
  2. 다음으로 Startup Variable로 이동합니다.
  3. 그런 다음 Advanced 탭으로 이동합니다.
  4. 을 삭제합니다.STRICT_ALL_TABLES "/"/"STRICT_TRANS_TABLES그리고 적용을 클릭하십시오 변화에.적용을 Changes를 클릭합니다.
  5. MySQL Server를 재시작합니다.
  6. 다 했어요.

주의: MySQL Server 5.7에서 이러한 솔루션을 테스트했습니다.

로 ID는같이 설정됩니다 다음과 그 아이디를 설정해야 합니다.auto-increment..

기존 ID 열을 자동 증분하도록 수정하려면 이 열을 추가하십시오.

ALTER TABLE card_games MODIFY id int NOT NULL AUTO_INCREMENT;

테이블의 프라이머리 키에 AutoIncrement를 추가하여 ExecuteNonQuery()를 해결하는 동안 오류가 발생했습니다.기본 키를 추가하지 않으려면 기본 키에 값을 할당해야 합니다.

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

mysql 5.6 이후 테이블 정의에 기본값이 설정되어 있지 않은 모든 필드를 명시적으로 삽입할 수 있는 새로운 기본값이 있습니다.

비활성화 및 테스트 방법:mysql error 1364 필드에 기본값이 없습니다.

INSERT 쿼리에서 명시적으로 전달하지 않은 필드의 기본값을 모든 테이블에 설정하도록 테스트한 후 다시 활성화하는 것이 좋습니다.

서드파티제의 mysql 뷰어가 이 에러를 표시하고 있는 경우는, 그 링크의 수정에 한정되어 있을 가능성이 있습니다.

이는 MySQL이 스키마에 기본값이 설정되어 있지 않은 빈 필드가 있는 INSERT 또는 UPDATE 명령을 허용하지 않는 엄격한 모드 세트를 가지고 있기 때문입니다.

여기에는 몇 가지 수정 사항이 있습니다.

첫 번째 'fix'는 스키마에 기본값을 할당하는 것입니다.이것은 간단한 ALTER 명령으로 실행할 수 있습니다.

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

단, 데이터베이스 스키마 내의 많은 테이블에 대해 이 작업을 수행해야 할 수 있습니다.이 작업은 매우 빠르게 지루해집니다.두 번째 수정은 sql_mode STICT_TRANS_TAB을 삭제하는 것입니다.mysql 서버의 LES

설치된 brew MySQL을 사용하는 경우 MySQL 디렉토리에서 my.cnf 파일을 편집해야 합니다.맨 아래에서 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

모델 클래스에서 프라이머리 키의 세터를 정의하고 있지 않은지 확인합니다.

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;
}
}

실행을 감지하려면:

select @@sql_mode
-- It will give something like:
-- STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

수정하려면 다음을 수행합니다.

set global sql_mode = ''

데이터베이스 테이블의 프라이머리 키 ID 필드에 AUTO_INCREMENT 구를 추가하면 다음과 같이 동작합니다.

TABLE테이블 작성 CREATEuser_role((user_role_idBigint 부정 NULL AUTO_INCREMENT, AUTO_increment, 아닌bigint가 null이.user_idBigint 부정 NULL,bigint는 NULL이 아닙니다.role_idBigint 부정 NULL,bigint는 NULL이 아닙니다.

붕괴:솔루션:제거한다를 제거한다.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_TABLESnull로 다시 설정함으로써.를null로 리셋 합니다.

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

저는 변경했을 때 문제가 해결되었습니다.

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

로.

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

집에서는Person.hbm.xml.

no), 른른른mobmob(모브노)에서도 같은 에러가 재발했습니다.만, (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 엔진을 사용) 이전 필드 이름에서도 동일한 오류가 발생하였습니다.이는 아마도 해당 엔진의 캐싱에 기인할 수 있습니다.

제가 2019년에 이 문제를 냈어요.문제는 table1을 업데이트하고 table2는 양쪽 테이블의 이름이 다른 변수를 무시한다는 것입니다.에러 코드: 1364 에러와 같은 에러가 발생하고 있습니다. 필드 'id'에 mysql의 기본값은 없습니다.해결 방법은 다음과 같습니다.

표 1 스키마 : id ( 일의 및 자동 증분)| name | profile | Age Table 2 Schema : motherage | father | name | profile

이것으로 오류가 해결되었습니다.INSERT IGNORE INTO table2 (이름, 프로파일) SELECT name, profile FROM table1

FORNE_KEY_CHECKS 를 무효로 하고 나서,

"SET FORNE_KEY_CHECKS = 0;

ALTER TABLE card_games 컬럼 ID INT를 NULL AUTO_Increment가 아닌 MODIFY.

SET FORNE_KEY_CHECKS = 1;'

개발자로서 사용하는 것을 강력히 권장합니다.STRICT모드를 사용하면, 엄밀한 모드를 오프하는 것으로 회피하는 대신에, 발생할 가능성이 있는 문제/장애/장애를 확인할 수 있기 때문입니다.그것도 더 좋은 연습이에요.

strict 모드는 지저분하고 엉성한 코드를 보기 위한 훌륭한 도구입니다.

AWS에서 mariadb에 문제가 있었습니다.이렇게 해서 STRICT_TRANS_TAB을 해결했습니다.LES 문제

SSH를 서버에 접속하여 ext 디렉토리에 접속합니다.

[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

필드 '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;
    .....
}

두 테이블의 이름이 같은 것을 알 수 있습니다.제가 저지른 아주 재미있는 실수입니다:)이것을 고친 후, 나의 문제는 해결되었다.

MySQL Workbench를 사용하여 스키마를 작성하는 경우 이 확인란을 선택할 수 있습니다.

여기에 이미지 설명 입력

이미지를 볼 수 없는 경우는 AI라고 하는 컬럼입니다.그 위에 마우스를 올리면 라벨이 표시됩니다.Mark column as AUTO_INCREMENT.

ID에 기본값을 추가합니다. 테이블 정의에서 이렇게 하면 문제가 해결됩니다.

언급URL : https://stackoverflow.com/questions/25865104/field-id-doesnt-have-a-default-value

반응형