MySQL 插入,更新和删除
最后修改于 2023 年 1 月 10 日
在本 MySQL 教程中,我们将从 MySQL 表中插入,更新和删除数据。我们将使用 INSERT
, DELETE
和 UPDATE
语句。这些语句是 SQL 数据操作语言 (DML) 的一部分。
插入数据
INSERT
语句用于将数据插入到表中。
我们将创建一个新表,在其中进行示例。
mysql> CREATE TABLE Books(Id INTEGER PRIMARY KEY, Title VARCHAR(100), -> Author VARCHAR(60));
我们创建一个新表 Books
,具有 Id
、Title
和 Author
列。
mysql> INSERT INTO Books(Id, Title, Author) VALUES(1, 'War and Peace', -> 'Leo Tolstoy');
这是经典的 INSERT
SQL 语句。我们在表名后指定了所有列名,并在 VALUES
关键字后指定了所有值。我们将第一行添加到表中。
mysql> SELECT * FROM Books; +----+---------------+-------------+ | Id | Title | Author | +----+---------------+-------------+ | 1 | War and Peace | Leo Tolstoy | +----+---------------+-------------+
我们将第一行插入到 Books
表中。
mysql> INSERT INTO Books(Title, Author) VALUES ('The Brothers Karamazov', -> 'Fyodor Dostoyevsky');
我们在 Books
表中添加一个新标题。我们省略了 Id
列。Id 列具有 AUTO_INCREMENT
属性。这意味着 MySQL 将自动增加 Id 列。AUTO_INCREMENT
列递增的值由 auto_increment_increment
系统变量控制。默认情况下,它是 1。
mysql> SELECT * FROM Books; +----+------------------------+--------------------+ | Id | Title | Author | +----+------------------------+--------------------+ | 1 | War and Peace | Leo Tolstoy | | 2 | The Brothers Karamazov | Fyodor Dostoyevsky | +----+------------------------+--------------------+
这是我们在 Books 表中的内容。
mysql> INSERT INTO Books VALUES(3, 'Crime and Punishment', -> 'Fyodor Dostoyevsky');
在此 SQL 语句中,我们没有在表名后指定任何列名。在这种情况下,我们必须提供所有值。
mysql> REPLACE INTO Books VALUES(3, 'Paradise Lost', 'John Milton'); Query OK, 2 rows affected (0.00 sec)
REPLACE
语句是 SQL 标准的 MySQL 扩展。如果与现有行冲突,它会插入新行或替换旧行。在我们的表中,有一行 Id=3
。因此,我们之前的语句用新行替换了它。有一条消息说有两行受到影响。一行被删除,一行被插入。
mysql> SELECT * FROM Books WHERE Id=3; +----+---------------+-------------+ | Id | Title | Author | +----+---------------+-------------+ | 3 | Paradise Lost | John Milton | +----+---------------+-------------+
这就是我们现在在第三列中的内容。
我们可以在一个语句中使用 INSERT
和 SELECT
语句。
mysql> CREATE TABLE Books2(Id INTEGER PRIMARY KEY AUTO_INCREMENT, -> Title VARCHAR(100), Author VARCHAR(60)) type=MEMORY;
首先,我们在内存中创建一个名为 Books2
的临时表。
mysql> INSERT INTO Books2 SELECT * FROM Books; Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
在这里,我们将从 Books
表中选择的所有数据插入到 Books2
中。
mysql> SELECT * FROM Books2; +----+------------------------+--------------------+ | Id | Title | Author | +----+------------------------+--------------------+ | 1 | War and Peace | Leo Tolstoy | | 2 | The Brothers Karamazov | Fyodor Dostoyevsky | | 3 | Paradise Lost | John Milton | +----+------------------------+--------------------+
我们验证一下。一切正常。
mysql> INSERT INTO Books(Title, Author) VALUES ('The Insulted and Humiliated', -> 'Fyodor Dostoyevsky'), ('Cousin Bette', 'Honore de Balzac'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
我们可以使用 INSERT
语句向表中插入多行。这里我们展示了如何操作。
我们可以从文件系统中插入数据。首先,我们将数据从 Books
表转储到 books.csv
文件中。
mysql> SELECT * INTO OUTFILE '/tmp/books.csv' -> FIELDS TERMINATED BY ',' -> LINES TERMINATED BY '\n' -> FROM Books;
我们将数据从 Books
表写入 books.csv
文件。数据将采用 CSV 格式。
$ cat /tmp/books.csv 1,War and Peace,Leo Tolstoy 2,The Brothers Karamazov,Fyodor Dostoyevsky 3,Paradise Lost,John Milton 4,The Insulted and Humiliated,Fyodor Dostoyevsky 5,Cousin Bette,Honore de Balzac
我们显示 books.csv
文件的内容。
mysql> TRUNCATE Books; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM Books; Empty set (0.00 sec)
我们从表中删除所有数据。
mysql> LOAD DATA INFILE '/tmp/books.csv' -> INTO TABLE Books -> FIELDS TERMINATED BY ',' -> LINES TERMINATED BY '\n';
我们使用 LOAD DATA INFILE
语法从 books.csv
文件填充 Books 表。
mysql> SELECT * FROM Books; +----+-----------------------------+--------------------+ | Id | Title | Author | +----+-----------------------------+--------------------+ | 1 | War and Peace | Leo Tolstoy | | 2 | The Brothers Karamazov | Fyodor Dostoyevsky | | 3 | Paradise Lost | John Milton | | 4 | The Insulted and Humiliated | Fyodor Dostoyevsky | | 5 | Cousin Bette | Honore de Balzac | +----+-----------------------------+--------------------+
一切正常。
我们也可以从 XML 文件中加载数据。首先,我们将数据从 Books 表写入 XML 文件。
$ mysql -uroot -p --xml -e 'SELECT * FROM mydb.Books' > books.xml
mysql
监视器有一个 --xml
选项,它使我们能够以 XML 格式转储数据。-e
选项执行一个语句并退出监视器。
$ cat books.xml <?xml version="1.0"?> <resultset statement="SELECT * FROM mydb.Books " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <row> <field name="Id">1</field> <field name="Title">War and Peace</field> <field name="Author">Leo Tolstoy</field> </row> <row> <field name="Id">2</field> <field name="Title">The Brothers Karamazov</field> <field name="Author">Fyodor Dostoyevsky</field> </row> <row> <field name="Id">3</field> <field name="Title">Paradise Lost</field> <field name="Author">John Milton</field> </row> <row> <field name="Id">4</field> <field name="Title">The Insulted and Humiliated</field> <field name="Author">Fyodor Dostoyevsky</field> </row> <row> <field name="Id">5</field> <field name="Title">Cousin Bette</field> <field name="Author">Honore de Balzac</field> </row> </resultset>
这是我们的 XML 文件。
mysql> LOAD XML INFILE '/home/vronskij/programming/mysql/books.xml' INTO TABLE Books;
我们从 XML 文件中加载数据。请注意,LOAD XML
语句适用于 MySQL 5.5 及更高版本。
删除数据
在 MySQL 中,我们可以使用 DELETE
和 TRUNCATE
语句删除数据。TRUNCATE
语句是 SQL 规范的 MySQL 扩展。首先,我们将从表中删除一行。我们将使用之前创建的 Books2
表。
mysql> DELETE FROM Books2 WHERE Id=1;
我们删除 Id=1
的行。
mysql> SELECT * FROM Books2; +----+------------------------+--------------------+ | Id | Title | Author | +----+------------------------+--------------------+ | 2 | The Brothers Karamazov | Fyodor Dostoyevsky | | 3 | Paradise Lost | John Milton | +----+------------------------+--------------------+
我们验证数据。
mysql> DELETE FROM Books2; mysql> TRUNCATE Books2;
这两个 SQL 语句删除表中的所有数据。
更新数据
UPDATE
语句用于更改表中选定行的列的值。
mysql> SELECT * FROM Books; +----+-----------------------------+--------------------+ | Id | Title | Author | +----+-----------------------------+--------------------+ | 1 | War and Peace | Leo Tolstoy | | 2 | The Brothers Karamazov | Fyodor Dostoyevsky | | 3 | Paradise Lost | John Milton | | 4 | The Insulted and Humiliated | Fyodor Dostoyevsky | | 5 | Cousin Bette | Honore de Balzac | +----+-----------------------------+--------------------+
我们重新创建 Books
表。这些是行。
假设我们想将“Leo Tolstoy”更改为“Lev Nikolayevich Tolstoy”表。以下语句显示了如何实现此目的。
mysql> UPDATE Books SET Author='Lev Nikolayevich Tolstoy' -> WHERE Id=1;
SQL 语句将 author 列设置为“Lev Nikolayevich Tolstoy”,对于 Id=1
的列。
mysql> SELECT * FROM Books WHERE Id=1; +----+---------------+--------------------------+ | Id | Title | Author | +----+---------------+--------------------------+ | 1 | War and Peace | Lev Nikolayevich Tolstoy | +----+---------------+--------------------------+
该行已正确更新。
在本 MySQL 教程中,我们插入,删除了数据库表中的数据并进行了更新。