2016-08-31 4 views
1

Ich habe eine Tabelle enthält drei Spalten (ID, Shop & Benutzer). zum ShopWie Identitätsspalte mit einer anderen Spalte erstellen?

ID & Geschäft sind zusammengesetzte Primärschlüssel

Ich möchte nach Identitätsnummer erzeugen.

Zum Beispiel No. 1 Benutzer für Shop-A No. 2 Benutzer für Shop-A No. 1 Benutzer für Geschäft B

Wie erzeuge ich diese Identitätsnummer nach dem Laden.

NumberID ID int Identität, Shop-varchar (100), Benutzer varchar (100)

+0

T-SQL ist spezifisch für Sybase/MsSQL. Ich sehe, dass Sie Ihre Frage als MySQL markiert haben. Welche Datenbank verwendest du? – blackpen

+0

Sorry ich möchte versuchen mit MSSQL & MYSQL – gayan1991

+0

Möchten Sie "eine Lösung" für beide Arten von Datenbanken arbeiten? Die Syntax von MsSQL kann sich von der von MySQL unterscheiden. – blackpen

Antwort

1

es im Doing "erstellen Statement/s" der Tabelle selbst ist Datenbank typspezifisch. Es erfordert auch spezifische DB-Expertise (um knifflige Dinge wie Startup-Zähler, Auto-Inkrement-Wert, Wertsprünge bei parallelen Transaktionen für Effizienz, kümmert sich um Counter während Backup/Restore, Komplexität der Durchführung für einen Teil des Primärschlüssels). Einige Datenbankexperten werden es kugelsicher beantworten.

In der Zwischenzeit, hier ist, wie Sie es in MySQL innerhalb der "insert-Anweisung" selbst tun können (indem Sie es atomar ausführen). Dies könnte auch in einem Trigger/Verfahren funktionieren (basierend auf Ihren Umständen, wie viel Sie Entwickler vor dem versehentlichen Einfügen von Duplikaten schützen möchten). Wenn Sie dies in einer Prozedur tun, können Sie den Entwicklern die Prozedur als Hauptschnittstelle geben (und ihnen den direkten Zugriff auf die Tabelle entziehen).

MySQL 5.6 Schema/Inserts:

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' 
); 

Abfrage:

select * from tt 

[Ergebnisse]:

| id | shop | user | 
|----|-------|-------| 
| 1 | shop1 | user1 | 
| 2 | shop1 | user1 | 
Verwandte Themen