Heim  >  Artikel  >  Datenbank  >  Was ist der Rückgabewert von MySQL Insert?

Was ist der Rückgabewert von MySQL Insert?

青灯夜游
青灯夜游Original
2023-04-11 18:03:515013Durchsuche

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.

Was ist der Rückgabewert von MySQL Insert?

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.

MySQL INSERT: Daten einfügen (Daten hinzufügen)

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语句的值。此功能非常方便,因为您可以使用INSERTSELECT子句完全或部分复制表,如下所示:

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_idsubject来更新task_id4的行。

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;
#🎜🎜#Zuerst #🎜🎜#, nach der INSERT INTO-Klausel und nach den Klammern Geben Sie den Tabellennamen und eine durch Kommas getrennte Liste von Spalten an.
#🎜🎜#Dann #🎜🎜# setzen Sie die durch Kommas getrennten Werte der entsprechenden Spalten in Klammern nach dem Schlüsselwort 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn