DEFAULT関数default(sada_goukaku)とDEFAULTキーワード values(default,・・・ free67
特定のカラムを除き、データ値を入力する時の短縮方法

Tuesday,July,16,2013

カラム数が多いテーブルへデータを追加する時の便利な方法を勉強しました。デフォルトに数式を格納できないんだから便利なのかな?

カラム名を増やします

○テーブルの構造を見る
mysql> show columns from sadachika_shop.sadachi_results; 
Field          Type         Null    Key    Default    Extra
sada_id        int(11)      NO             NULL
sada_name      varchar(10)  YES            入力がありません
sada_total     int(11)      YES            0


○指定したカラムの後に挿入する場合は「AFTER」の後にカラム名を指定する
ALTER TABLE tbl_name ADD [COLUMN] column_definition AFTER col_name;                     ↓基準となるカラム名
ALTER TABLE sadachika_shop.sadachi_results ADD sada_goukaku tinyint default 0 AFTER sada_name;
ALTER TABLE sadachika_shop.sadachi_results ADD sada_suugaku int default 5 AFTER sada_goukaku;
ALTER TABLE sadachika_shop.sadachi_results ADD sada_eigo int default 5.1 AFTER sada_suugaku;
ALTER TABLE sadachika_shop.sadachi_results ADD sada_rika int default 5.2 AFTER sada_eigo;
ALTER TABLE sadachika_shop.sadachi_results ADD sada_shakai int default 5.3 AFTER sada_rika;
ALTER TABLE sadachika_shop.sadachi_results ADD sada_kokugo int default 5.4 AFTER sada_shakai;

○テーブルの構造を見る
mysql> show columns from sadachika_shop.sadachi_results; 
Field          Type         Null    Key    Default    Extra
sada_id        int(11)      NO             NULL
sada_name      varchar(10)  YES            入力がありません   
sada_goukaku   tinyint(4)   YES            0            *追加された
sada_suugaku   int(11)      YES            5            *小数点以下は反映しませんね
sada_eigo      int(11)      YES            5            *小数点以下は反映しませんね
sada_rika      int(11)      YES            5            *小数点以下は反映しませんね
sada_shakai    int(11)      YES            5            *小数点以下は反映しませんね
sada_kokugo    int(11)      YES            5            *小数点以下は反映しませんね       
sada_total     int(11)      YES            5            *小数点以下は反映しませんね

○カラム定義だけを変更する
mysql> alter table sadachika_shop.sadachi_results modify sada_id int not null primary key;
                                                         ↑対象のカラム↑*変更したい型を入力する  {元はINT型 not null(データ無しを許さない) primary key(重複を許さない)} 
○カラムの先頭にカラムを追加「FIRST」
mysql> ALTER TABLE sadachika_shop.sadachi_results ADD sada_t timestamp FIRST;

○テーブルの構造を見る
mysql> show columns from sadachika_shop.sadachi_results; 
Field          Type         Null    Key    Default             Extra
sada_t         timestamp    NO             CURRENT_TIMESTAMP   on update CURRENT_TIMESTAMP  *timestamp が増えた
sada_id        int(11)      NO      PRI    NULL                                             *Key項目 PRI(primary key)が増えた
sada_name      varchar(10)  YES            入力がありません   
sada_goukaku   tinyint(4)   YES            0             
sada_suugaku   int(11)      YES            5             
sada_eigo      int(11)      YES            5             
sada_rika      int(11)      YES            5             
sada_shakai    int(11)      YES            5             
sada_kokugo    int(11)      YES            5                    
sada_total     int(11)      YES            0 

○入力 特定のカラム名(sada_t, sada_goukaku)以外を入力する
insert into sadachika_shop.sadachi_results(sada_id, sada_name, sada_suugaku, sada_eigo, sada_rika, sada_shakai, sada_kokugo, sada_total) 
values(5, '定近', 40, 45, 50, 55, 60, sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);

○カラムの値を見る            
select * from sadachika_shop.sadachi_results;
select * from sadachika_shop.sadachi_results\G
sada_t               sada_id   sada_name         sada_goukaku  sada_suugaku sada_eigo  sada_rika  sada_shakai  sada_kokugo sada_total
2013-07-16 22:00:55        1   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:00:55        3   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:00:55        4   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:07:58        5   定近                         0            40        45         50           55           60        250

○○入力 特定カラムを除き、値を入力する短縮方法 DEFAULT関数default(sada_goukaku)とDEFAULTキーワード values(default,・・・

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 6, '充始', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default(sada_t), 7, '充始', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 7, '充始', default, default, default, default, default, default, sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
ERROR (23000); Duplicate entry '7'for key 'PRIMARY'

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 8, '充始', default, default, default, default, default, default, sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.02 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default(sada_t), 9, '平山', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 10, '橘高', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default(sada_t), 11, '橘高', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 12, '橘高', default(sada_goukaku), default(sada_suugaku), default(sada_eigo), default(sada_rika), default(sada_shakai), default(sada_kokugo), sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

mysql> insert into sadachika_shop.sadachi_results
    -> values(default, 13, '坂本', default, default, default, default, default, default, sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total);
Query OK, 1 row affected (0.03 sec)

○カラムの値を見る            
select * from sadachika_shop.sadachi_results;
select * from sadachika_shop.sadachi_results\G
sada_t               sada_id   sada_name         sada_goukaku  sada_suugaku sada_eigo  sada_rika  sada_shakai  sada_kokugo sada_total
2013-07-16 22:00:55        1   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:00:55        3   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:00:55        4   入力がありません             0             5         5          5            5            5          0
2013-07-16 22:07:58        5   定近                         0            40        45         50           55           60        250
2013-07-16 22:35:38        6   充始                         0             5        5           5            5            5         25
0000-00-00 00:00:00        7   充始                         0             5        5           5            5            5         25  *なぜかタイム表示がおかしい
2013-07-16 22:40:51        8   充始                         0             5        5           5            5            5         25
*default(sada_t)これを用いると、タイム表示がおかしくなる。デフォルト関数使用時という意味
0000-00-00 00:00:00        9   平山                         0             5        5           5            5            5         25  *なぜかタイム表示がおかしい  
2013-07-16 22:57:37       10   橘高                         0             5        5           5            5            5         25
0000-00-00 00:00:00       11   橘高                         0             5        5           5            5            5         25  *なぜかタイム表示がおかしい
2013-07-16 23:01:14       12   橘高                         0             5        5           5            5            5         25
2013-07-16 23:10:40       13   坂本                         0             5        5           5            5            5         25

デフォルトに数式入れられるのかな
○カラム構造だけを変更する
mysql> alter table sadachika_shop.sadachi_results modify sada_total int not null default sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total;
                                                         ↑対象のカラム↑*変更したい型を入力する  {元はINT型 not null(データ無しを許さない) メモprimary key(重複を許さない)} 
ERROR
mysql> alter table sadachika_shop.sadachi_results modify sada_total int default 'sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total';
ERROR
mysql> alter table sadachika_shop.sadachi_results modify sada_total int not null;
数式は入れられない感じ
Query OK, 1 row affected (0.03 sec)
Records: 0 Duplicates; 0 Warnings: 0

○テーブルの構造を見る
mysql> show columns from sadachika_shop.sadachi_results; 
Field          Type         Null    Key    Default             Extra
sada_t         timestamp    NO             CURRENT_TIMESTAMP   on update CURRENT_TIMESTAMP  *timestamp が増えた
sada_id        int(11)      NO      PRI    NULL                                             *Key項目 PRI(primary key)が増えた
sada_name      varchar(10)  YES            入力がありません   
sada_goukaku   tinyint(4)   YES            0             
sada_suugaku   int(11)      YES            5             
sada_eigo      int(11)      YES            5             
sada_rika      int(11)      YES            5             
sada_shakai    int(11)      YES            5             
sada_kokugo    int(11)      YES            5                    
sada_total     int(11)      NO             NULL   * 変更された

○カラム構造だけを変更する
mysql> alter table sadachika_shop.sadachi_results modify sada_total int not null default 'sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total';
ERROR
mysql> alter table sadachika_shop.sadachi_results modify sada_total int not null default sada_suugaku + sada_eigo + sada_rika + sada_shakai + sada_kokugo + sada_total;
ERROR
mysql> alter table sadachika_shop.sadachi_results modify sada_total int not null default 0;
Query OK, 1 row affected (0.00 sec)
Records: 0 Duplicates; 0 Warnings: 0

○テーブルの構造を見る
mysql> show columns from sadachika_shop.sadachi_results; 
Field          Type         Null    Key    Default             Extra
sada_t         timestamp    NO             CURRENT_TIMESTAMP   on update CURRENT_TIMESTAMP  *timestamp が増えた
sada_id        int(11)      NO      PRI    NULL                                             *Key項目 PRI(primary key)が増えた
sada_name      varchar(10)  YES            入力がありません   
sada_goukaku   tinyint(4)   YES            0             
sada_suugaku   int(11)      YES            5             
sada_eigo      int(11)      YES            5             
sada_rika      int(11)      YES            5             
sada_shakai    int(11)      YES            5             
sada_kokugo    int(11)      YES            5                    
sada_total     int(11)      NO             0   * 変更された





メモ
○追加したカラムは既存のテーブルの最後に追加される
ALTER TABLE tbl_name ADD [COLUMN] column_definition;
mysql> ALTER TABLE sadachika_shop.sadachi_results ADD hirayama_cate int;

○カラムの先頭に表示する場合は「FIRST」
ALTER TABLE tbl_name ADD [COLUMN] column_definition FIRST;
ALTER TABLE sadachika_shop.sadachi_food ADD hirayama_cate int FIRST; *細かい設定を入れようとしたんだが出来ないdefault 'none'とか
○テーブルを作る
mysql> create table sadachika_shop.sadachi_results (sada_id int, sada_name varchar(10) default '入力がありません', sada_total int default 0);




* 参考にしたサイトは→ こちら です。

これは赤色の文字例です。

これは青色の文字例です。