필드 '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를 시험합니다.
- MySQL Administrator 도구를 Administrator로 실행합니다.
- 다음으로 Startup Variable로 이동합니다.
- 그런 다음 Advanced 탭으로 이동합니다.
- 을 삭제합니다.
STRICT_ALL_TABLES
"/"/"STRICT_TRANS_TABLES
그리고 적용을 클릭하십시오 변화에.적용을 Changes를 클릭합니다. - MySQL Server를 재시작합니다.
- 다 했어요.
주의: 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_id
Bigint 부정 NULL AUTO_INCREMENT, AUTO_increment, 아닌bigint가 null이.user_id
Bigint 부정 NULL,bigint는 NULL이 아닙니다.role_id
Bigint 부정 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_TABLES
null로 다시 설정함으로써.를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
'source' 카테고리의 다른 글
X분마다 cronjob을 실행하는 방법 (0) | 2022.10.13 |
---|---|
연결 없이 자바스크립트에서 변수를 문자열로 보간하려면 어떻게 해야 합니까? (0) | 2022.10.13 |
레이아웃을 만들고 표시할 때 뷰에 포커스를 설정하는 방법은 무엇입니까? (0) | 2022.10.13 |
pip install --user와 함께 설치된 패키지를 제거하는 방법 (0) | 2022.10.13 |
ddev에서 두 번째 데이터베이스를 만들고 로드하려면 어떻게 해야 합니까? (0) | 2022.10.03 |