MySQL必知必会——插入、更新和删除数据

一、插入数据

1、插入

本章节介绍如何利用SQL地INSERT语句将数据插入表中。
插入可以用几种方式使用:

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

2、插入完整的行

INSERT语句要求指定表名和被插入到新行中的值。

MariaDB [course]> INSERT INTO customers
    -> VALUES(NULL,
    'Kobe Bryant',
    'Staples Center',
    'Los Angeles',
    'California',
    '90046',
    'USA',
    'Mamba',
    NULL);
Query OK, 1 row affected, 1 warning (0.00 sec)

存储到表列中的数据在VALUES子句中给出,对每个列必须提供一个值,没有则使用NULL。每个列必须以它们在表定义中出现的次填充。
上面的语法应尽量避免使用,因为其高度依赖于表中列的定义次序。编写依赖于特定列次序的SQL语句是很不安全的。

MariaDB [course]> INSERT INTO customers(cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_state,
    -> cust_zip,
    -> cust_country,
    -> cust_contact,
    -> cust_email)
    -> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING','NULL');
Query OK, 1 row affected, 1 warning (0.01 sec)

此例在表后的括号里明确的给出了列名,在插入行时,将利用VALUES列表中的相应值填入列表中的对应项。即使表的结构改变,该INSERT语句仍然能正常工作。
使用明确列插入的语法,还可以省略列(cust_id),可以只给某些列提供值,给省略的列不用提供值。
省略列必须满足以下的条件其一:

  • 该列 定义为允许NULL值
  • 在表定义中给出默认值,如果不给出值则使用默认的值。

3、插入多个行

INSERT可以插入一行到一个表中,可以使用多条INSERT语句去插入多个行。甚至一次提交,每条语句用一个分号结束。

INSERT INTO customers(cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_state,
    -> cust_zip,
    -> cust_country,
    -> cust_contact,
    -> cust_email)
    -> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING',NULL),
    ('Kobe Bryant','Staples Center','Los Angeles','California','90046','USA','Mamba',NULL);

其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用括号分隔。
MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。

4、插入检索出的数据

INSERT还可以将一条SELECT语句的结果插入表中,即INSERT SELECT
假如需要从另一张表中合并客户列表到你的customers表,这两个表的结构应该是一样的,以确保对应值插入时不会报错。

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

SELECT语句从custnew检索出要插入的值,而不是列出它们,SELECT中列出的每个列对应于customers表后所跟的列表中的每个列。
INSERT SELECTSELECT语句可包含WHERE子句以过滤插入的数据。

二、更新和删除数据

本章节介绍利用UPDATE和DELETE语句进一步操作表数据。

1、更新数据

为了更新表中的数据,可使用UPDATE语句,可采用两种方式:

  • 更新表中的特定行
  • 更新表中的所有行

在使用UPDATE时不要省略WHERE子句,如果不适用就会更新表中的所有行。
UPDATE语句由3部分组成,要更新的表,列名和它们的新值,确定要更新行的过滤条件。

MariaDB [course]> UPDATE customers
    -> SET cust_email = '[email protected]'
    -> WHERE cust_id = 10005;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

UPDATE语句总是要更新的表的名字开始,SET命令来将新值赋予被更新的列。
UPDATE语句以WHERE子句结束 ,它告诉MySQL更新哪一行,没有WHERE子句,将会更新customers表中的所有行,这一点需要牢牢记住。
更新多个列:

MariaDB [course]> UPDATE customers
    -> SET cust_name = 'The Fudds',
    ->     cust_email='[email protected]'
    -> WHERE cust_id = 10005;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在更新多个列时,只需要使用单个SET命令,每个列值对之间用逗号分隔。

IGNORE关键字,如果使用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个UPDATE操作被取消。即使是发生错误,也要继续进行更新可使用IGNORE 关键字。 UPDATE IGNORE customers …

2、删除数据

为了从一个表中删除数据,使用DELETE语句,可以使用两种方法:

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

不要省略WHERE子句:在使用DELETE一定要注意细心,如果忘记使用WHERE则会删除整张表的所有数据。

下面的语句删除custoemrs表的一行:

DELETE FROM customers
WHERE cust_id = 10006;

DELETE不需要列名或通配符,DELETE删除整行而不是删除列,为了删除指定的列,请使用UPDATE语句。
DELETE语句删除表的内容而不是表,其从表中删除行但是不删除表本身。

如果项从表中删除所有行,可使用TRUNCATE TABLE语句,它完成相同的工作,但是速度更快。

3、更新和删除的指导原则

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
  • 保证每个表都有主键,尽可能像WHERE子句那样用它。
  • 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防止编写的WHERE子句不正确。
  • 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有其他表相关联的数据的行。
发布了114 篇原创文章 · 获赞 30 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/104276484
今日推荐