MySQLテーブルで日付を参照して一意キー(UNIQUE KEY)を作成する方法
はじめに
MySQLのテーブルにおいて、日付カラムを参照しながら一意キー(UNIQUE KEY)を設定したい場合、複数のカラムを組み合わせた「複合一意キー」を定義することで実現できます。例えば、顧客IDと納期日付の組み合わせが重複しないように制約をかけたいケースなどに有効です。
本記事では、日付カラムを含む一意キーの作成方法を、具体的なSQL文とともにわかりやすく解説します。
基本構文
テーブル作成時に、IDカラムと日付カラムを組み合わせて一意キーを定義するには、以下のような構文を使用します。
CREATE TABLE yourTableName
(
yourIdColumnName dataType,
yourDateColumnName dataType,
.
.
.
N
UNIQUE KEY(yourIdColumnName, yourDateColumnName)
);
この構文では、指定した2つのカラムの組み合わせが一意になるよう制約がかけられます。つまり、個々のカラムの値が重複していても、両方の値が完全に一致する行は登録できなくなります。
実際にテーブルを作成してみる
構文を理解するために、実際にサンプルテーブルを作成してみましょう。ここでは、顧客情報を管理するテーブルに対し、「Client_Id(顧客ID)」と「ClientProjectDeadline(プロジェクト納期)」の組み合わせに一意制約を設定します。
mysql> create table keyReferringToDateDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Client_Id int,
-> ClientProjectDeadline date,
-> ClientName varchar(100),
-> ClientAge int,
-> ClientCountryName varchar(20),
-> UNIQUE KEY(Client_Id, ClientProjectDeadline)
-> );
Query OK, 0 rows affected (0.63 sec)
クエリが正常に実行され、テーブルが作成されました。
各カラムの役割
- Id: 自動採番される主キー(AUTO_INCREMENT)
- Client_Id: 顧客を識別するID
- ClientProjectDeadline: プロジェクトの納期(DATE型)
- ClientName / ClientAge / ClientCountryName: 顧客の名前・年齢・国名などの基本情報
SHOW CREATE TABLEで構造を確認する
作成したテーブルの詳細な定義を確認するには、SHOW CREATE TABLEコマンドを使用します。
mysql> show create table keyReferringToDateDemo;
実行結果は以下の通りです。
+------------------------+--------------------------------------------------------------------------+
| Table | Create Table |
+------------------------+--------------------------------------------------------------------------+
| keyReferringToDateDemo | CREATE TABLE `keyreferringtodatedemo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Client_Id` int(11) DEFAULT NULL,
`ClientProjectDeadline` date DEFAULT NULL,
`ClientName` varchar(100) DEFAULT NULL,
`ClientAge` int(11) DEFAULT NULL,
`ClientCountryName` varchar(20) DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `Client_Id` (`Client_Id`,`ClientProjectDeadline`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------------------+--------------------------------------------------------------------------+
1 row in set (0.00 sec)
出力結果から、PRIMARY KEYとして「Id」が設定され、さらに「Client_Id」と「ClientProjectDeadline」の複合一意キーが正しく定義されていることが確認できます。
まとめ
MySQLでは、UNIQUE KEY制約に日付カラムを含めることで、IDと日付の組み合わせに対して一意性を持たせることができます。これにより、同じ顧客IDで同じ日付のレコードが重複して登録されることを防げます。データ整合性を保ちたい業務システムなどでは、非常に便利な手法なので、ぜひ活用してみてください。
-
MySQLでインデックス付きのテーブルを作成する方法を徹底解説
MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp
-
MySQLでテーブルを作成し、現在の日付をデフォルト値として設定する方法
MySQLでは、テーブル作成時にDEFAULT制約を追加することで、カラムにデフォルト値を設定できます。日付型のカラムに対して現在の日付(CURRENT_DATE)をデフォルト値として指定すれば、レコード挿入時に明示的に値を渡さなくても自動的に当日の日付が登録されます。基本構文テーブルを作成し、DEFAULT制約を使ってデフォルト値を設定する際の基本的な構文は以下の通りです。CREATE TABLE yourTableName ( yourColumnName1 dataType not null , yourColumnName2 dataType default anyValue, . .