mysql> use STUDY
Database changed
mysql> SHOW CREATE TABLE Country\G
*************************** 1. row ***************************
Table: Country
Create Table: CREATE TABLE `Country` (
`Code` char(3) NOT NULL DEFAULT '',
`Name` char(52) NOT NULL DEFAULT '',
`Continent` enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NO T NULL DEFAULT 'Asia',
`Region` char(26) NOT NULL DEFAULT '',
`SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00',
`IndepYear` smallint(6) DEFAULT NULL,
`Population` int(11) NOT NULL DEFAULT '0',
`LifeExpectancy` float(3,1) DEFAULT NULL,
`GNP` float(10,2) DEFAULT NULL,
`GNPOld` float(10,2) DEFAULT NULL,
`LocalName` char(45) NOT NULL DEFAULT '',
`GovernmentForm` char(45) NOT NULL DEFAULT '',
`HeadOfState` char(60) DEFAULT NULL,
`Capital` int(11) DEFAULT NULL,
`Code2` char(2) NOT NULL DEFAULT '',
PRIMARY KEY (`Code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.05 sec)

mysql>

特定の列にのみデータをロードしてみる
mysql> LOAD DATA LOCAL INFILE '/tmp/add_country.txt' INTO TABLE Country (Code,Name);

load_data_country

特定の列を指定してLOADしたので、指定した列にはデータがきちんと入っている。
NULLの列にはNULLが入り、それ以外でNULLを許容していない列にはDEFAULTの値が入っている。
aaa

DEFUALTの例

`Continent` enum(‘Asia’,’Europe’,’North America’,’Africa’,’Oceania’,’Antarctica’,’South America’) NOT NULL DEFAULT ‘Asia’

※ LOAD DATA コマンドでテーブルにデータをロードするには、ファイルへのアクセス権限
MYSQLの”FILE Privilege“権限が必要です。

※ もっともシンプルな構文「 LOAD DATA INFILE ‘file_name’ INTO TABLE table_name; 」
   separator = (\t) と改行コード(\n)はdefaultなので省略可能。


NULL, NOT NULL, DEFAULT, SET,ENUM,データ型などによる
Default値の変化について。


mysql> CREATE TABLE defaults (
-> id INT UNSIGNED NOT NULL UNIQUE,
-> col1 INT NULL,
-> col2 INT NOT NULL,
-> col3 INT DEFAULT 42,
-> col4 CHAR(5) NULL,
-> col5 CHAR(5) NOT NULL,
-> col6 CHAR(5) DEFAULT 'yoo',
-> col7 TEXT NULL,
-> col8 TEXT NOT NULL,
-> col9 TIME NOT NULL,
-> col10 DATE NULL,
-> col11 DATE NOT NULL,
-> col12 DATE DEFAULT '2002-02-08',
-> col13 ENUM('doo','yoo'),
-> col14 SET('blabla','yooyoo'),
-> col15 ENUM('doo','yoo') NOT NULL,
-> col16 SET('blabla','yooyoo') NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc defaults;
+-------+------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------+------+-----+------------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | NO | | NULL | |
| col3 | int(11) | YES | | 42 | |
| col4 | char(5) | YES | | NULL | |
| col5 | char(5) | NO | | NULL | |
| col6 | char(5) | YES | | yoo | |
| col7 | text | YES | | NULL | |
| col8 | text | NO | | NULL | |
| col9 | time | NO | | NULL | |
| col10 | date | YES | | NULL | |
| col11 | date | NO | | NULL | |
| col12 | date | YES | | 2002-02-08 | |
| col13 | enum('doo','yoo') | YES | | NULL | |
| col14 | set('blabla','yooyoo') | YES | | NULL | |
| col15 | enum('doo','yoo') | NO | | NULL | |
| col16 | set('blabla','yooyoo') | NO | | NULL | |
+-------+------------------------+------+-----+------------+-------+
17 rows in set (0.01 sec)

64

mysql> INSERT INTO defaults (id) VALUES (1);
Query OK, 1 row affected, 6 warnings (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1364 | Field 'col2' doesn't have a default value |
| Warning | 1364 | Field 'col5' doesn't have a default value |
| Warning | 1364 | Field 'col8' doesn't have a default value |
| Warning | 1364 | Field 'col9' doesn't have a default value |
| Warning | 1364 | Field 'col11' doesn't have a default value |
| Warning | 1364 | Field 'col16' doesn't have a default value |
+---------+------+--------------------------------------------+
6 rows in set (0.00 sec)

mysql> select * from defaults\G
*************************** 1. row ***************************
id: 1
col1: NULL
col2: 0
col3: 42
col4: NULL
col5:
col6: yoo
col7: NULL
col8:
col9: 00:00:00
col10: NULL
col11: 0000-00-00
col12: 2002-02-08
col13: NULL
col14: NULL
col15: doo
col16:
1 row in set (0.00 sec)

mysql>

※データ型やNULL値を許容するかしないかにより値が変わる。
※TEXT型にはDefault値が利用出来ない。
※その他

def64

6.2.3.3. ENUM 型

ENUM 型は、テーブルの作成時にカラムの仕様で明示的に列挙された使用可能な
値のリストから、通常、値が選択される文字列オブジェクトです。

* 不正な値(使用可能な値のリストに含まれない文字列)を ENUM 型のカラムに挿入すると、
特殊なエラー値として、空の文字列が挿入される。この文字列は数値 0 を持つため、’通常’ の空の
文字列とは区別することができる(これについては後述)。

* ENUM 型が NULL として宣言されている場合、そのカラムでは NULL も正しい値となり、
デフォルト値は NULL になる。ENUM 型が NOT NULL として宣言されている場合は、
使用可能な値の最初の要素がデフォルト値として使用される。


NULLとDEFAULT値の動作確認


mysql> CREATE TABLE NULL_DEFAUL (
-> test1 INT NOT NULL,
-> test2 INT NULL,
-> test3 INT NOT NULL DEFAULT 123,
-> test4 INT NULL DEFAULT 456,
-> test5 CHAR(1) NOT NULL DEFAULT '0',
-> test6 VARCHAR(100) NOT NULL DEFAULT 'NO VALUES'
-> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc NULL_DEFAUL;
+-------+--------------+------+-----+-----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-----------+-------+
| test1 | int(11) | NO | | NULL | |
| test2 | int(11) | YES | | NULL | |
| test3 | int(11) | NO | | 123 | |
| test4 | int(11) | YES | | 456 | |
| test5 | char(1) | NO | | 0 | |
| test6 | varchar(100) | NO | | NO VALUES | |
+-------+--------------+------+-----+-----------+-------+
6 rows in set (0.01 sec)

mysql>

default

動作確認


mysql> desc NULL_DEFAUL;
+-------+--------------+------+-----+-----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-----------+-------+
| test1 | int(11) | NO | | NULL | |
| test2 | int(11) | YES | | NULL | |
| test3 | int(11) | NO | | 123 | |
| test4 | int(11) | YES | | 456 | |
| test5 | char(1) | NO | | 0 | |
| test6 | varchar(100) | NO | | NO VALUES | |
+-------+--------------+------+-----+-----------+-------+
6 rows in set (0.00 sec)

mysql> insert into NULL_DEFAUL(test1) values(1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from NULL_DEFAUL;
+-------+-------+-------+-------+-------+-----------+
| test1 | test2 | test3 | test4 | test5 | test6 |
+-------+-------+-------+-------+-------+-----------+
| 1 | NULL | 123 | 456 | 0 | NO VALUES |
+-------+-------+-------+-------+-------+-----------+
1 row in set (0.00 sec)

mysql>

default2