2016-08-31 10 views
1

私は3つの列(ID、ショップ&ユーザー)を含むテーブルを持っています。別の列でID列を作成する方法は?

ID &ショップは、私がお店に応じて識別番号を生成する複合主キー

です。例えば

、店舗用 番号1ユーザは、店舗B

ため店舗A 番号1ユーザの 番号2ユーザがどのようにして店によれば、この識別番号を生成しません。

NumberID IDのint型のアイデンティティ、 ショップはvarchar(100)、 ユーザーはvarchar(100)

+0

T-SQLは、Sybaseに特異的です/ MsSQL。私はあなたがあなたの質問をMySQLとしてタグ付けしたことを知っています。どのデータベースを使用していますか? – blackpen

+0

申し訳ありませんが、MSSQLとMYSQLの両方で試してみたいと思います – gayan1991

+0

両方のタイプのデータベースで「1つのソリューション」を動作させますか? MsSQLの構文は、MySQLの構文とは異なる場合があります。 – blackpen

答えて

1

テーブル自体の "文/ sの作成" でそれをやっては、特定のデータベース・タイプです。また、特定のDB専門知識(起動カウンタ、自動インクリメント値、並列トランザクション中の値のジャンプ、効率化、バックアップ/リストア中のカウンタの管理、プライマリキーの処理の複雑さなど)を要求します。いくつかのデータベース専門家が弾丸でそれに答えるかもしれない。

これまでのところ、「挿入ステートメント」自体の中で(アトミックに実行することによって)MySQLで行う方法があります。これは、トリガー/プロシージャ(誤って重複を挿入することから開発者をどれだけ保護したいかに関するあなたの状況に基づいて)でも機能します。プロシージャでそれを行う場合は、プロシージャを開発者のメイン・インタフェースとして与えることができます(また、表への直接の挿入からアクセスできます)。

のMySQL 5.6スキーマ/挿入

create table tt 
(
    id int, shop varchar(100), user varchar(100) 
); 


insert into tt values (
    ifnull((select max(id) from tt a where a.shop='shop1'),0)+1, 
    'shop1', 
    'user1' 
); 

insert into tt values (
    ifnull((select max(id) from tt a where a.shop='shop1'),0)+1, 
    'shop1', 
    'user1' 
); 

クエリ

select * from tt 

[結果]

| id | shop | user | 
|----|-------|-------| 
| 1 | shop1 | user1 | 
| 2 | shop1 | user1 | 
関連する問題