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つの設定が必要です。
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;
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;