跳转至

在 MySQL 中插入,更新和删除数据

原文: http://zetcode.com/databases/mysqltutorial/datamanipulation/

在 MySQL 教程的这一部分中,我们将从 MySQL 表中插入,更新和删除数据。 我们将使用INSERTDELETEUPDATE语句。 这些语句是 SQL 数据操作语言 DML 的一部分。

插入数据

INSERT语句用于将数据插入表中。

我们将创建一个新表,并在其中进行示例。

mysql> CREATE TABLE Books(Id INTEGER PRIMARY KEY, Title VARCHAR(100),
    -> Author VARCHAR(60));

我们使用IdTitleAuthor列创建一个新表Books

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 |
+----+---------------+-------------+

这就是我们现在在第三栏中。

我们可以在一个语句中同时使用INSERTSELECT语句。

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 中,我们可以使用DELETETRUNCATE语句删除数据。 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 语句将Id=1列的author列设置为'Lev Nikolayevich Tolstoy'

mysql> SELECT * FROM Books WHERE Id=1;
+----+---------------+--------------------------+
| Id | Title         | Author                   |
+----+---------------+--------------------------+
|  1 | War and Peace | Lev Nikolayevich Tolstoy |
+----+---------------+--------------------------+

该行已正确更新。

在 MySQL 教程的这一部分中,我们已经在数据库表中插入,删除和更新了数据。



回到顶部