Kann ein primary key leer? Wenn ja, warum ist das alter die Ursache dieses Ergebnis?
Ich habe die folgende Tabelle:
mysql> DESC my_contacts;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | varchar(20) | NO | PRI | | |
| location | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| state | varchar(2) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Wenn ich ein select alles, was ich bekomme:
mysql> SELECT * FROM my_contacts;
+----+--------------+------+-------+
| id | location | city | state |
+----+--------------+------+-------+
| 1 | Chester,NJ | NULL | NULL |
| 2 | Katy,TX | NULL | NULL |
| 3 | San Mateo,CA | NULL | NULL |
+----+--------------+------+-------+
3 rows in set (0.00 sec)
Ich den folgenden Befehl ausführen:
INSERT INTO my_contacts (city,state)
VALUES
(SUBSTRING_INDEX(location,',',1),RIGHT(location,2));
Mein Zweck war, zum Auffüllen der Spalten city
und state
mit dem Teil vor dem Komma und der Teil nach dem Komma aus der location
Spalte.
Aber Folgendes passiert auf meinem Tisch:
mysql> INSERT INTO my_contacts (city,state)
-> VALUES
-> (SUBSTRING_INDEX(location,',',1),RIGHT(location,2));
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM my_contacts;
+----+--------------+------+-------+
| id | location | city | state |
+----+--------------+------+-------+
| | NULL | NULL | NULL |
| 1 | Chester,NJ | NULL | NULL |
| 2 | Katy,TX | NULL | NULL |
| 3 | San Mateo,CA | NULL | NULL |
+----+--------------+------+-------+
4 rows in set (0.00 sec)
Bekomme ich einen Eintrag und der id
was ist der primary key ist leer. Wie ist das möglich?
Ich meine, es ist nicht NULL
aber ein primary key ist, sollte eigentlich nicht leer sein, entweder richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie definiert Ihre
id
Feld als varchar, das ist eine dumme Idee, wenn Sie es zum speichern von Ganzzahlen. ein leeres Feld ist NICHT null. eine Zeichenfolge der Länge null ist immer noch eine gültige Zeichenfolge, und daher ein gültigesid
Wert so weit wie Ihre Tabelle betroffen ist. Versuchen Sie, ANDEREN leeren string und erhalten Sie eine primary key-Verletzung:Den
id
Feld sollte einint
geben. Würd das nicht zulassen "leer" Werte.primary keys sind einzigartig, so dass, wenn Sie ändern die Tabelle, dann die zweite Zeile wird versuchen, fügen Sie einen leeren Wert und scheitern. als ein Ergebnis, wird versucht, den nächsten möglichen Wert. Wenn Sie möchten, dass der erste Wert nicht leer ist, können Sie einen Standardwert festlegen.
Ist es nicht leer ist. Es ist wahrscheinlich eine leere Zeichenfolge. Beachten Sie, dass der Datentyp varchar(20).
Gut, Sie hat nicht einen Wert zuweisen, die primary key-Feld, also der Standardwert ist NULL.
.
Sie wollen in der Tabelle ändern, so ist der Primärschlüssel ist
auto_increment
.default
istNULL
fürPrimary key
? Wie kann dies möglich sein?Ist es nicht an der dis-erlaubt?Können Sie eine
varchar
als eine foreign key-Beziehung zu einem anderen Datenbank-Tabelle, aber wenn Sie möchten, es zu benutzen, wie einen numerischen Schlüssel haben, sollten Sie verwenden einen numerischen Datentyp wieint
.Ich weiß, das beantwortet nicht die genaue Frage bezüglich der Primärschlüssel, aber Ihre Frage ist darauf hinzuweisen, dass Sie auch Probleme bei der Analyse heraus, die Stadt und Staat von Ihrem Standort aus Spalte hier ist die Abfrage, die Sie verwenden möchten (Hinweis: Sie möchten ein UPDATE zum ändern von vorhandenen Zeilen nicht um eine INSERT-fügt automatisch neue Zeilen statt Spalten):