In MySQL ist der Rückgabewert der Einfügeanweisung die ID der neuen Daten. Die INSERT-Anweisung wird verwendet, um eine oder mehrere Zeilen mit Tupeldaten in eine vorhandene Tabelle in der Datenbank einzufügen. Die Syntax lautet „INSERT INTO table(column1,column2...) VALUES (value1,value2,...);“; „INSERT INTO“ Die Klammern nach der Klausel geben den Tabellennamen und eine durch Kommas getrennte Liste von Spalten an.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Der Rückgabewert von insert ist die ID der neuen Daten. Die Voraussetzung ist natürlich, dass die Datenbank automatisch inkrementierende ID-Primärschlüssel unterstützt. Wenn kein automatisch inkrementierender Primärschlüssel definiert ist, wird eine spezielle Nummer zurückgegeben.
Nachdem die Datenbank und die Tabelle erfolgreich erstellt wurden, müssen Daten in die Datenbank eingefügt werden Tisch. In MySQL können Sie die INSERT-Anweisung verwenden, um eine oder mehrere Zeilen mit Tupeldaten in eine vorhandene Tabelle in der Datenbank einzufügen.
1. Einfache MySQL INSERT-Anweisung
MySQL INSERT
-Anweisung wird verwendet Um eine oder mehrere Zeilen in eine Tabelle einzufügen. Die Syntax der INSERT
-Anweisung ist unten dargestellt: INSERT
语句用于将一行或多行插入到表中。下面说明了INSERT
语句的语法:
INSERT INTO table(column1,column2...) VALUES (value1,value2,...);
首先,在INSERT INTO
子句之后,在括号内指定表名和逗号分隔列的列表。
然后,将括号内的相应列的逗号分隔值放在VALUES
关键字之后。
在执行插入语句前,需要具有执行INSERT
语句的INSERT
权限。
让我们创建一个名为tasks
的新表来练习INSERT
语句,参考以下创建语句 -
USE testdb; CREATE TABLE IF NOT EXISTS tasks ( task_id INT(11) AUTO_INCREMENT, subject VARCHAR(45) DEFAULT NULL, start_date DATE DEFAULT NULL, end_date DATE DEFAULT NULL, description VARCHAR(200) DEFAULT NULL, PRIMARY KEY (task_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
例如,如果要将任务插入到tasts
表中,则使用INSERT
语句如下:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..');
执行该语句后,MySQL返回一条消息以通知受影响的行数。在这种情况下,有一行受到影响。
现在使用以下语句查询 tasks
中的数据,如下所示 -
SELECT * FROM tasks;
执行上面查询语句,得到以下结果 -
+---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | +---------+--------------------+------------+------------+------------------+ 1 row in set
2. MySQL INSERT - 插入多行
想要在表中一次插入多行,可以使用具有以下语法的INSERT
语句:
INSERT INTO table(column1,column2...) VALUES (value1,value2,...), (value1,value2,...), ...;
在这种形式中,每行的值列表用逗号分隔。例如,要将多行插入到tasks
表中,请使用以下语句:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES ('任务-1','2017-01-01','2017-01-02','Description 1'), ('任务-2','2017-01-01','2017-01-02','Description 2'), ('任务-3','2017-01-01','2017-01-02','Description 3');
执行上面语句后,返回 -
Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0
现在查询tasks
表中的数据,如下所示 -
select * from tasks;
执行上面查询语句,得到以下结果 -
+---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 4 | 任务-3 | 2017-01-01 | 2017-01-02 | Description 3 | +---------+--------------------+------------+------------+------------------+ 4 rows in set
如果为表中的所有列指定相应列的值,则可以忽略INSERT
语句中的列列表,如下所示:
INSERT INTO table VALUES (value1,value2,...);
或者-
INSERT INTO table VALUES (value1,value2,...), (value1,value2,...), ...;
请注意,不必为自动递增列(例如
taskid
列)指定值,因为MySQL会自动为自动递增列生成值。
3. 具有SELECT子句的MySQL INSERT
在MySQL中,可以使用SELECT语句返回的列和值来填充INSERT
语句的值。此功能非常方便,因为您可以使用INSERT
和SELECT
子句完全或部分复制表,如下所示:
INSERT INTO table_1 SELECT c1, c2, FROM table_2;
假设要将tasks
表复制到tasks_bak
表。
首先,通过复制tasks
表的结构,创建一个名为tasks_bak
的新表,如下所示:
CREATE TABLE tasks_bak LIKE tasks;
第二步,使用以下INSERT
语句将tasks
表中的数据插入tasks_bak
表:
INSERT INTO tasks_bak SELECT * FROM tasks;
第三步,检查tasks_bak
表中的数据,看看是否真正从tasks
表复制完成了。
mysql> select * from tasks; +---------+--------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+--------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 4 | 任务-3 | 2017-01-01 | 2017-01-02 | Description 3 | +---------+--------------------+------------+------------+------------------+ 4 rows in set
4. MySQL INSERT与ON DUPLICATE KEY UPDATE
如果新行违反主键(PRIMARY KEY)或UNIQUE
约束,MySQL会发生错误。例如,如果执行以下语句:
INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority');
MySQL很不高兴,并向你扔来一个错误消息:
Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec
因为表中的主键task_id
列已经有一个值为 4
的行了,所以该语句违反了PRIMARY KEY
约束。
但是,如果在INSERT
语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。
例如,以下语句使用新的task_id
和subject
来更新task_id
为4
的行。
INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority') ON DUPLICATE KEY UPDATE task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE';
执行上面语句后,MySQL发出消息说2
行受影响。现在,我们来看看tasks
表中的数据:
mysql> select * from tasks; +---------+------------------------------+------------+------------+------------------+ | task_id | subject | start_date | end_date | description | +---------+------------------------------+------------+------------+------------------+ | 1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. | | 2 | 任务-1 | 2017-01-01 | 2017-01-02 | Description 1 | | 3 | 任务-2 | 2017-01-01 | 2017-01-02 | Description 2 | | 5 | Test ON DUPLICATE KEY UPDATE | 2017-01-01 | 2017-01-02 | Description 3 | +---------+------------------------------+------------+------------+------------------+ 4 rows in set
新行没有被插入,但是更新了task_id
值为4
的行。上面的INSERT ON DUPLICATE KEY UPDATE
UPDATE tasks SET task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE' WHERE task_id = 4;
INSERT INTO
-Klausel und nach den Klammern Geben Sie den Tabellennamen und eine durch Kommas getrennte Liste von Spalten an. VALUES
. #🎜🎜##🎜🎜#Bevor Sie die INSERT-Anweisung ausführen, benötigen Sie die Berechtigung INSERT
, um die Anweisung INSERT
ausführen zu können. #🎜🎜##🎜🎜#Lassen Sie uns eine neue Tabelle mit dem Namen tasks
erstellen, um die INSERT
-Anweisung zu üben. Weitere Informationen finden Sie in der folgenden Erstellungsanweisung: #🎜🎜#rrreee#🎜 🎜 #Wenn Sie beispielsweise Aufgaben in die Tabelle tasts
einfügen möchten, verwenden Sie die Anweisung INSERT
wie folgt: #🎜🎜#rrreee#🎜🎜#Nachdem Sie diese Anweisung ausgeführt haben , MySQL gibt eine Nachricht zurück, um die Anzahl der betroffenen Zeilen mitzuteilen. In diesem Fall ist eine Zeile betroffen. #🎜🎜##🎜🎜#Nun verwenden Sie die folgende Anweisung, um die Daten in tasks
abzufragen, wie unten gezeigt-#🎜🎜#rrreee#🎜🎜#Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -#🎜🎜 #rrreee#🎜🎜##🎜🎜##🎜🎜#2. MySQL INSERT – Mehrere Zeilen einfügen#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Wenn Sie mehrere Zeilen einfügen möchten Wenn Sie die Tabelle gleichzeitig bearbeiten möchten, können Sie eine INSERT
-Anweisung mit der folgenden Syntax verwenden: #🎜🎜#rrreee#🎜🎜#In diesem Formular wird die Werteliste für jede Zeile durch Kommas getrennt . Um beispielsweise mehrere Zeilen in die Tabelle tasks
einzufügen, verwenden Sie die folgende Anweisung: #🎜🎜#rrreee#🎜🎜#Nachdem Sie die obige Anweisung ausgeführt haben, geben Sie zurück - #🎜🎜#rrreee#🎜🎜# Fragen Sie nun die Daten in der Tabelle tasks
ab, wie unten gezeigt: #🎜🎜#rrreee#🎜🎜#Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse: #🎜🎜#rrreee#🎜🎜#Wenn es ist in der Tabelle Wenn alle Spalten die Werte der entsprechenden Spalten angeben, können Sie die Spaltenliste in der INSERT
-Anweisung wie folgt ignorieren: #🎜🎜#rrreee#🎜🎜# oder - #🎜🎜#rrreee#🎜🎜## 🎜🎜#Bitte beachten Sie, dass es nicht notwendig ist, einen Wert für eine Spalte mit automatischer Inkrementierung anzugeben (z. B. eine taskid
-Spalte), da MySQL automatisch einen Wert generiert für die Auto-Inkrement-Spalte. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#3. MySQL INSERT mit SELECT-Klausel#🎜🎜##🎜🎜##🎜🎜##🎜🎜#In MySQL können Sie das verwenden Spalten und Werte, die von der SELECT-Anweisung zurückgegeben werden, um die Werte der INSERT
-Anweisung zu füllen. Diese Funktion ist sehr praktisch, da Sie die Tabelle mit den Klauseln INSERT
und SELECT
ganz oder teilweise kopieren können, wie unten gezeigt: #🎜🎜#rrreee#🎜🎜#Angenommen, Sie möchte Die Tabelle tasks
wird in die Tabelle tasks_bak
kopiert. #🎜🎜##🎜🎜##🎜🎜#Erstens #🎜🎜# erstellen Sie eine neue Tabelle mit dem Namen tasks_bak
, indem Sie die Struktur der Tabelle tasks
wie folgt kopieren. Anzeigen : #🎜🎜#rrreee#🎜🎜##🎜🎜#Im zweiten Schritt #🎜🎜# verwenden Sie die folgende INSERT
-Anweisung, um die Daten in die tasks
-Tabelle tasks_bak-Tabelle: #🎜🎜#rrreee#🎜🎜##🎜🎜#Im dritten Schritt #🎜🎜# überprüfen Sie die Daten in der Tabelle tasks_bak
, um zu sehen, ob sie wirklich vorhanden sind Kopieren der Tabelle tasks
abgeschlossen. #🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#4. MySQL INSERT und ON DUPLICATE KEY UPDATE#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Wenn die neue Zeile den Primärschlüssel verletzt (PRIMARY KEY ) oder UNIQUE
-Einschränkung verursacht MySQL einen Fehler. Wenn Sie beispielsweise die folgende Anweisung ausführen: #🎜🎜#rrreee#🎜🎜#MySQL ist unzufrieden und wirft Ihnen eine Fehlermeldung aus: #🎜🎜#rrreee#🎜🎜#Weil der Primärschlüssel in der Tabelle task_id ist Die Codespalte enthält bereits eine Zeile mit dem Wert <code>4
, daher verstößt diese Anweisung gegen die Einschränkung PRIMARY KEY
. #🎜🎜##🎜🎜#Wenn Sie jedoch die Option ON DUPLICATE KEY UPDATE in der INSERT
-Anweisung angeben, fügt MySQL eine neue Zeile ein oder aktualisiert den ursprünglichen Zeilendatensatz mit einem neuen Wert. #🎜🎜##🎜🎜#Zum Beispiel aktualisiert die folgende Anweisung task_id
auf 4
unter Verwendung der neuen task_id
und subject Code> > Zeile. #🎜🎜#rrreee#🎜🎜#Nach der Ausführung der obigen Anweisung sendet MySQL eine Nachricht, dass <code>2
Zeilen betroffen sind. Schauen wir uns nun die Daten in der Tabelle tasks
an: #🎜🎜#rrreee#🎜🎜#Die neue Zeile wird nicht eingefügt, aber der Wert task_id
wird aktualisiert auf 4
Zeilen. Die obige INSERT ON DUPLICATE KEY UPDATE
-Anweisung entspricht der folgenden UPDATE-Anweisung: #🎜🎜#UPDATE tasks SET task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE' WHERE task_id = 4;
【相关推荐:mysql视频教程】
Das obige ist der detaillierte Inhalt vonWas ist der Rückgabewert von MySQL Insert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!