ホームページ  >  記事  >  データベース  >  mysql strict モードの使用方法 Strict モード

mysql strict モードの使用方法 Strict モード

WBOY
WBOY転載
2023-05-26 15:10:152373ブラウズ

    1. 厳密モードをオンまたはオフにする方法

    mysql インストール ディレクトリで my.cnf (Windows システムの場合は my.ini) ファイルを見つけます。

    sql_mode に STRICT_TRANS_TABLES を追加すると、ストリクト モードがオンになります。追加されない場合は、非ストリクト モードになります。変更後、mysql を再起動します。

    例: これは、ストリクト モードがオン:

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    2.Strict モード関数の説明

    • #NULL 値の挿入はサポートされていませんnull 以外のフィールドへの

    • 自己増加フィールドへの「値」の挿入はサポートされません

    • テキストのデフォルト値はサポートされませんフィールド

    #3. 例 :

    テストを容易にするデータ テーブルを作成する

    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. null でないフィールドは null 値を挿入します test

    レコードを挿入します。name の値は 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 の値は null名前は自動的に「

    #Execute in strict mode

    mysql> insert into mytable(content) values('programmer');
    ERROR 1364 (HY000): Field 'name' doesn't have a default value
    実行に失敗し、フィールド名を null 値にすることはできないというメッセージが表示されます。

    2 .「自動インクリメント フィールドの値テスト」を挿入します。

    ID フィールドに「値を挿入」

    非厳密モードで実行されます

    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)
    実行に成功しました

    厳密モー​​ドで実行されました

    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)

    If フィールド ID にすることはできません」というプロンプトが表示されました。 id が null の場合、実行は成功する可能性があります。

    3. テキスト フィールドのデフォルト値 test

    データ テーブル mytable を 1 つ作成します。テキストにはデフォルト値が設定されます。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 strict モードの使用方法 Strict モードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。