戻る

テーブルを改造する

カラムのデータ型を変更する

ALTER TABLE テーブル名 MODIFY カラム名 データ型;

ALTER TABLE tb1C MODIFY nama VARCHAR(100);

DESC tb1C;

ALTER TABLE tb1C MODIFY nama VARCHAR(100)
CHARACTER SET utf8;

DESC tb1C;

新規のカラムを最後の位置に追加する

ALTER TABLE テーブル名 ADD カラム名 データ型;

ALTER TABLE tb1c ADD umare DATETIME;

DESC tb1C;

INSERT INTO tb1c VALUES('N111', '松田', 33, '1980-11-10');

SELECT * FROM tb1C;

カラムを先頭に追加する

CREATE TABLE tb1D SELECT * FROM tb1;

ALTER TABLE tb1D ADD umare DATETIME FIRST;

カラムを自由な位置に追加する

CREATE TABLE tb1E SELECT * FROM tb1;

ALTER TABLE tb1E ADD umare DATETIME AFTER bang;

カラム順の変更

ALTER TABLE tb1C MODIFY umare DATETIME FIRST;

DESC tb1C;

カラム名を含めてデータ型や位置を変更

ALTER TABLE テーブル名 CHANGE 変更前のカラム名 変更後のカラム名 変更後のデータ型;

ALTER TABLE tb1C CHANGE umare seinen DATE;

DESC tb1C;

カラムの削除

ALTER TABLE テーブル名 DROP カラム名;

ALTER TABLE tb1C DROP seinen;

DESC tb1C;

「一意」(ユニーク)とは

データベースを作成していると、大量のレコードの中から、「条件に合った1つのレコードを特定する」ことが必要になってきます。たとえば「社員1人1人の名前に、社員IDが重複しないように割り当てる」とか、「1つの商品コードには、1つの価格だけを対応させる」というような状況です。

このように、「必ず1つだけが特定できる」という唯一無二の状態を、一意である、あるいはユニーク(unique)である、といいます。

主キーとは

ユニークなレコードを作る場合には、カラムの他のカラムと区別するための特別な属性を設定します。

このような場合に用いるのが、主キー(PRIMARY KEY)です。主キーは、数多くあるレコードのうち1つを特定するために使う識別子です。

主キーはレコードを厳密に特定できる、次のようなカラムです。

主キーを設定してテーブルを作成する

CREATE TABLE テーブル名(カラム名 データ型 PRIMARY KEY…);

CREATE TABLE itii(a INT PRIMARY KEY, b VARCHAR(10));

DESC itii;

CREATE TABLE itii(a INT PRIMARY KEY, b VARCHAR(10))
CHARSET=utf8;

DESC itii;

主キーの確認

INSERT INTO itii VALUES(1, 'あ');

SELECT * FROM itii;

カラム「a」には、重複する「1」や何もない値「NULL」を入れると、エラーになります。

INSERT INTO itii (a) VALUES(1);
INSERT INTO itii (a) VALUES(NULL);

「1」と「NULL」以外なら、通常通り入力ができます。

INSERT INTO itii (a) VALUES(2);

一意のキーの設定

CREATE TABLE uniq(a INT UNIQUE, b VARCHAR(10));

DESC uniq;

CREATE TABLE uniq(a INT UNIQUE, b VARCHAR(10))
CHARSET=utf8;

DESC uniq;

連続番号機能付きカラムの定義

連続番号機能付きカラムにするには、カラムの定義の次の1~3のような3つの設定が必要です。

  1. データ型は「INT」などの整数型
  2. 「AUTO_INCREMENT」を付ける
  3. 「PRIMARY KEY」などを設定して一意にする

連続番号機能付きカラムの作成

CREATE TABLE renzoku (a INT AUTO_INCREMENT PRIMARY KEY, b varchar(10));

DESC renzoku;

CREATE TABLE renzoku (a INT AUTO_INCREMENT PRIMARY KEY, b varchar(10))
CHARSET=utf8;

DESC renzoku;

連続番号機能を使ってレコードを挿入する

INSERT INTO renzoku (b) VALUES('子');
INSERT INTO renzoku (b) VALUES('丑');
INSERT INTO renzoku (b) VALUES('寅');

SELECT * FROM renzoku;

AUTO_INCREMENTの値を初期化する

ALTER TABLE テーブル名 AUTO_INCREMENT=1;

ALTER TABLE renzoku AUTO_INCREMENT=1;

カラムの初期値を設定する

CREATE TABLE テーブル名 (カラム名 データ型 DEFAULT 初期値…)

CREATE TABLE tb1G SELECT * FROM tb1;

ALTER TABLE tb1G MODIFY nama VARCHAR(10) DEFAULT '氏名未入力';

DESC tb1G;

CREATE TABLE tb1G SELECT * FROM tb1;

ALTER TABLE tb1G MODIFY nama VARCHAR(10)
CHARACTER SET utf8
DEFAULT '氏名未入力';

DESC tb1G;

INSERT INTO tb1G (bang, tosi) VALUES ('N999', 38);

SELECT * FROM tb1G;

インデックスとは

テーブルの中にあるデータを検索するとき、そのデータが膨大な数だと、すべてのレコードの情報を調べるのに時間がかかってしまいます。このような場合には、テーブルの「索引」を作ることを考えるとよいでしょう。

テーブルに設定する索引を、インデックス(INDEX)といいます。あらかじめテーブルにインデックスを設定し、検索にはテーブルそのものではなくインデックスを利用します。こうすることで検索の時間が短縮される可能性があります。

10レコード程度のテーブルを扱う分には、INDEXの有無はまったくといっていいほど影響しません。しかし、企業で実際に運用されているような規模の大きいテーブルでは、インデックスの設定が大きく処理速度に影響します。

なお、「主キー」を設定した場合には、自動的にインデックスも作成されています。

インデックスの設定

CREATE INDEX インデックス名 ON テーブル名(カラム名);

CREATE INDEX my_ind ON tb1G(bang);

インデックスの表示

SHOW INDEX FROM テーブル名;

SHOW INDEX FROM tb1G;

インデックスの削除

DROP INDEX インデックス名 ON テーブル名;

DROP INDEX my_ind ON tb1G;


次のようなテーブル「syokiti_renzoku」を作成し、入力した瞬間の日時をカラム「niti」に入力してレコードを挿入してください。

現在の日時を取得するのはNOW()関数。「NOW()」をデータとして入力すると現在の日時が入力される。

CREATE TABLE syokiti_renzoku (bang INT AUTO_INCREMENT PRIMARY KEY, niti DATETIME) AUTO_INCREMENT=100;

INSERT INTO syokiti_renzoku (niti) VALUES(NOW());

SELECT * FROM syokiti_renzoku;

inserted by FC2 system