《MySQL必知必会》学习笔记——插入数据、更新和删除数据

文章目录

  • 第19章 插入数据
    • 1. 数据插入
    • 2. 插入完整的行
    • 3. 插入多个行
    • 4. 插入检索出的数据
  • 第20章 更新和删除数据
    • 1. 更新数据
    • 2. 删除数据

第19章 插入数据

本章介绍如何利用SQL的INSERT语句将数据插入表中。

1. 数据插入

INSERT插入可以用几种方式使用:

  • 插入完整的行;
  • 插入行的一部分;
  • 插入多行;
  • 插入某些查询结果。

2. 插入完整的行

插入完整的行一般有两种方法。第一种方法要求指定表名和被插入到新行的值:

INSERT INTO customers
VALUES(NULL,
   'Pep E. LaPew',
   '100 Main Street',
   'Los Angeles',
   'CA',
   '90046',
   'USA',
   NULL,
   NULL);

这种方法要求对每个列必须提供一个值,且各个列必须以它们在表定义中出现的次序填充。

这种依赖于特定列次序的SQL语句是很不安全的,因为很难保证下一次表结构变动后各个列保持完全相同的次序。

第二种方法更安全(不过更烦琐),如下:

INSERT INTO customers(cust_name,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country,
   cust_contact,
   cust_email)
VALUES('Pep E. LaPew',
   '100 Main Street',
   'Los Angeles',
   'CA',
   '90046',
   'USA',
   NULL,
   NULL);

这种方法在表名后的括号里明确地给出了列名。在插入行时,MySQL将用VALUES列表中的相应值填入列表中的对应项。

此外,使用第二种方法还可以忽略列。这表示可以只给某些列提供值,给其他列不提供值。

省略列必须满足以下条件之一:

  • 该列定义为允许NULL值(无值或空值)
  • 在表定义中给出默认值。

INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。如果数据检索是最重要的,可以在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如下所示:
INSERT LOW_PRIORITY INTO

3. 插入多个行

允许一次插入多个行。可以使用多条INSERT语句,或者,只要每条INSERT语句中的列名(和次序)相同,可以如下组合各语句:

INSERT INTO customers(cust_name,
   cust_address,
   cust_city,
   cust_state,
   cust_zip,
   cust_country)
VALUES(
   'Pep E. LaPew',
   '100 Main Street',
   'Los Angeles',
   'CA',
   '90046',
   'USA'
   ),
      (
         'M. Martian',
         '42 Galaxy Way',
         'New York',
         'NY',
         '11213',
         'USA'
   );

MySQL使用单条INSERT语句处理多个插入比使用多条INSERT语句快。

4. 插入检索出的数据

还可以利用INSERT SELECT,将一条SELECT语句的结果插入表中。假如我们想从另一表中合并客户列表到customers表。不需要每次读取一行,然后再将它用INSERT插入,可以如下进行:

INSERT INTO customers(cust_id,
    cust_contact,
    cust_email,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
SELECT cust_id,
    cust_contact,
    cust_email,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country
FROM custnew;

这个例子导入了cust_id(假设你能够确保cust_id的值不会重复)。你也可以简单地省略这列(从INSERT和SELECT中),这样MySQL就会生成新值。

MySQL不关心SELECT返回的列名,它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列也是如此,以此类推。

INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据。

第20章 更新和删除数据

1. 更新数据

可使用UPDATE语句更新(修改)表中的数据,可采用两种方式使用UPDATE:

  • 更新表中特定行;
  • 更新表中所有行。

注意,使用UPDATE时一定不要忽略WHERE子句,否则将会更新表中所有行(除非确实需要)!

UPDATE语句由3部分组成,分别是:

  • 要更新的表;
  • 列名和它们的新值;
  • 确定要更新行的过滤条件。

假设要更新客户10005的电子邮件地址,可如下:

UPDATE customers
SET cust_email = '[email protected]'
WHERE cust_id = 10005;

如要更新多个列,可如下:

UPDATE customers
SET cust_name = 'The Fudds',
    cust_email = '[email protected]'
WHERE cust_id = 10005;

UPDATE语句中可以使用子查询,使得能用SELECT语句检索出的数据更新列数据。

为了删除某个列的值,可设置它为NULL(假如表定义允许NULL值)。如下进行:

UPDATE customers
SET cust_email = NULL
WHERE cust_id = 10005;

2. 删除数据

从表中删除数据,可用DELETE,有两种方法:

  • 从表中删除特定的行;
  • 从表中删除所有行。

注意,使用DELETE时一定不要忽略WHERE子句,否则将会删除表中所有行(除非确实需要)!

下面的语句从表中删除一行:

DELETE FROM customers
WHERE cust_id = 10006;

DELETE删除整行而不是删除列。

DELETE删除的是表的内容,而不是表本身。

如果想从表中删除所有行,不要使用DELETE,可使用TRUNCATE TABLE语句,它完成相同的工作,但更快!(TRUNCATE TABLE实际是删除原来的表然后重新创建一个表,而不是逐行删除表中的数据)

最后需要注意的是,MySQL没有撤销功能,所以应该非常小心地使用UPDATE和DELETE。

你可能感兴趣的:(MySQL,数据库,mysql,java,sql)