>  기사  >  데이터 베이스  >  mysql 엄격 모드 엄격 모드를 사용하는 방법

mysql 엄격 모드 엄격 모드를 사용하는 방법

WBOY
WBOY앞으로
2023-05-26 15:10:152373검색

    1. Strict 모드를 켜고 끄는 방법

    mysql 설치 디렉터리에서 my.cnf(Windows 시스템용 my.ini) 파일을 찾으세요.

    Strict 모드를 켜려면 sql_mode에 STRICT_TRANS_TABLES를 추가하세요. 추가됨 비엄격 모드를 의미합니다. 수정 후 mysql을 다시 시작하세요

    예를 들어, 이는 엄격 모드가 켜져 있음을 의미합니다:

    sql_mode=NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES

    2 엄격 모드 기능 설명

    • 은 지원하지 않습니다. null이 아닌 필드 null 값 삽입 ​​

    • 은 자체 증가 필드에 "값" 삽입을 지원하지 않습니다.

    • 은 기본값이 있는 텍스트 필드를 지원하지 않습니다. ​​

    3 예:

    Create a 테스트용 데이터 테이블

    CREATE TABLE `mytable` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `name` varchar(20) NOT NULL,
     `content` text NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    1.not null 필드 null 값 삽입 test

    레코드 삽입, 이름 값은 null

    비엄격 모드에서 실행

    mysql> insert into mytable(content) values('programmer');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> select * from mytable;
    +----+------+------------+
    | id | name | content    |
    +----+------+------------+
    |  1 |      | programmer |
    +----+------+------------+
    1 row in set (0.00 sec)

    실행이 성공했습니다. name은 자동으로 "

    Execute in strict mode

    mysql> insert into mytable(content) values('programmer');
    ERROR 1364 (HY000): Field 'name' doesn't have a default value

    실행에 실패했습니다. 필드 이름은 null 값이 될 수 없다는 메시지가 표시됩니다

    2. "자동 증가 필드에 대한 값 테스트

    Insert" 값을 삽입하세요. for id field

    비엄격 모드에서 실행됨

    mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> select * from mytable;
    +----+----------+------------+
    | id | name     | content    |
    +----+----------+------------+
    |  1 | fdipzone | programmer |
    +----+----------+------------+
    1 row in set (0.00 sec)

    Executed 성공적으로

    Executed in strict mode

    mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
    ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1

    실행이 실패하고 필드 ID가 "

    mysql> insert into mytable(id,name,content) value(null,'fdipzone','programmer');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from mytable;
    +----+----------+------------+
    | id | name     | content    |
    +----+----------+------------+
    |  1 | fdipzone | programmer |
    +----+----------+------------+
    1 row in set (0.00 sec)

    일 수 없는 경우 실행에 성공한 것입니다." 필드 ID는 null입니다

    3. 텍스트 필드 기본값 test

    데이터 테이블 mytable을 생성합니다. 여기서 텍스트 기본값은 default="

    비엄격 모드에서 실행

    mysql> CREATE TABLE `mytable` (
        ->  `id` int(11) NOT NULL AUTO_INCREMENT,
        ->  `name` varchar(20) NOT NULL,
        ->  `content` text NOT NULL default '',
        ->  PRIMARY KEY (`id`)
        -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected, 1 warning (0.03 sec)
    
    mysql> show tables;
    +------------------------------+
    | Tables_in_test_version       |
    +------------------------------+
    | mytable                      |
    +------------------------------+

    성공적인 실행입니다.

    엄격 모드에서 실행

    mysql> CREATE TABLE `mytable` (
        ->  `id` int(11) NOT NULL AUTO_INCREMENT,
        ->  `name` varchar(20) NOT NULL,
        ->  `content` text NOT NULL default '',
        ->  PRIMARY KEY (`id`)
        -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ERROR 1101 (42000): BLOB/TEXT column 'content' can't have a default value

    실행에 실패했습니다. 콘텐츠 필드가 TEXT 유형이고 기본값을 사용할 수 없다는 메시지가 표시됩니다.

    MySQL의 엄격 모드를 사용하면 데이터 보안을 강화할 수 있지만 빈 데이터와의 호환성이 떨어진다는 단점이 있습니다. 코드 품질과 데이터 엄격성을 향상하려면 개발 환경에서 엄격 모드를 사용하는 것이 좋습니다.

    위 내용은 mysql 엄격 모드 엄격 모드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제