![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
W jaki sposob mozna z sukcesem przy tworzeniu nowej tabeli utworzyc unikalnosc na np. dwoch kolumnach?
Niestety takiego cos nie przynosi pozytywnego rezultatu: CREATE TABLE a ( key INT(8) PRIMARY KEY, a TINYINT(2) DEFAULT NULL, b TINYINT(3) DEFAULT NULL, c TINYINT(4), UNIQUE unique_ab (a, ![]() ); |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 12.05.2003 Skąd: Mikołów Ostrzeżenie: (0%) ![]() ![]() |
-------------------- ..::elessar::..
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ale czy to zapewnia, ze unikalnosc ma byc tylko w przypadku albo A albo B? Chodzi mi o to by para byla unikalna, natomiast osobno moga pojawic sie duplikaty. Np.
1, 1, 1, 2, 1, NULL, itd. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
kanan, zjadles w swoim sql slowo key:
to powinno juz dzialac -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Niestety taki uklad nie dziala
![]() Ten post edytował kanan 9.05.2006, 09:53:08 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
dziwne. bo mi taki zapis blokuje dodawanie takich wpisów.
a czy moglbys jeszcze raz dokladnie zapodac to zapytanie, juz z moimi zmianami? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
po edycji po przedniego posta widze, ze ty walisz nulle do tego (swoją drogą moglem to juz wczesniej zauwazyc
![]() ![]() http://dev.mysql.com/doc/refman/5.0/en/create-table.html Cytat A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key that matches an existing row. The exception to this is that if a column in the index is allowed to contain NULL values, it can contain multiple NULL values.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Chyba nie do konca...
MySQL said: Documentation #1062 - Duplicate entry '0' for key 1 Jak to wyjasnic?? Dodaje nulla i tu juz dziala. Jednak zapomnialem dodac jedna rzecz. Dziala to wtedy gdy nie ma kluczy obcych. Dodatkowo w tej tabeli jest klucz obcy c i wtedy moge dodawac co mi sie podoba. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
nie kanan. twoj aktualny blad wynika z tego, ze nie nadales autoincrement na klucz glowny. w wyniku czego, przy takim dodawaniu rekordów co pokazales, do bazy do klucza glownego wstawiane jest 0. a ze klucz glowny nie moze sie powtarzac, wiec poraz drugi 0 nie mozesz wstawic, a ty to wlasnie robisz. Error ci to wlasnie sygnalizuje
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tak wlasnie zauwazylem
![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 28.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Mozesz napisac procedure sprawdzajaca czy istnieje jakis rekord z tymi dwoma wartosciami i stworzyc triggera before insert.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tak, tez o tym myslalem, ale jest jeden problem w jaki sposob w trigerach w mySQL wyrzucic blad? Bo nie ma zadnej funkcji, ktora by tego mogla dokonac. Chyba, ze obsluga triggera moze miec inna postac? Bo ja chcialem zrobic w ten sposob:
jesli dana wartosc istnieje, to rzuc wyjatek/blad, ale tak sie nie da w prosty sposob. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 28.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Przyznam sie ze nie mialem jeszcze okazji napisac trigera w mysql. Ale filozofi raczej nie ma bo przeciez gdy select wartosciami zwroci jakis rekord wtedy insert nie zadziala, zatem mozesz sprawdzic w phpcu affected rows (zmodyfikowane wiersze) i gdy wartosc bedize 0 wtedy masz wyjatek :-)
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 22.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem co masz dokladnie na mysli, w tym przypadku trigger powinien robic taka rzecz:
sprawdza czy dane pole, ktore posiada a oraz b juz istnieje, jesli tak rzuca wyjatek, w przeciwnym wypadku doda do bazy. Tylko w jaki sposob w triggerze mySQL rzucic wyjatek? Nie rozumiem tego zdania: Cytat przeciez gdy select wartosciami zwroci jakis rekord wtedy insert nie zadziala, . Mozesz przyblizyc swoja koncepcje?
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 28.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem jak sie wyrzuca w mysql wyjatek, ale jezeli INSERTa zawrzesz w IFie sprawdzajacym podany przez Ciebie warunek to sie nie wykona i zadne wiersz mysqla nie zostanie przetworzony prawda?
A pozniej na identyfikatorze polaczenia robisz mysql_affected_rows i jezeli bedzie 0 to znaczy ze wartosci takie juz istnieja w bazie i masz w ten sposob przechwycony wyjatek. Nie testowalem tego i nie jestem do konca pewien czy takie rozwiazania Ci e zadawala. Wydaje mi sie jednak logiczne w tej sytuacji, chyba ze sie myle? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 08:11 |