天天看点

MySQL插入数据与更新和删除数据.md19章 插入数据20章 更新和删除数据

  • 19章 插入数据
    • 1 数据插入
    • 2 插入完整的行
    • 3 插入多行
    • 4 插入检索出的语句
  • 20章 更新和删除数据
    • 1 更新数据
    • 2 删除数据
    • 3 更新和删除的原则

19章 插入数据

     利用MySQL中

INSERT

语句插入数据

19.1 数据插入

     此前章节一直使用

SELECT

语句,但还有三个经常使用的SQL语句需要掌握(

INSERT

UPDATE

DELETE

)。

插入的几种形式,

1. 插入完整行;

2. 插入行的部分数据;

3. 插入多行;

4. 插入某些查询的结果;

- 注意,由于MySQL的安全机制,需要注意权限。

19.2 插入完整的行

     需要指定插入的表名和行值。一般插入操作没有返回值,举例,

mysql> INSERT INTO customers VALUES(NULL, 'pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
Query OK,  row affected ( sec)
           

分析:第一列cust_id为

NULL

。这是因为在

customers

表中,该列由MySQL自动增量,所以指定一个

NULL

值。

- 注意,虽然此语法简单,但并非安全。上面语句高度依赖表中列的次序。即使可以得到这些信息,但不能保证下次使用时,表的次序因为种种原因经过调整,引起输入错误。更保险的输入方式应该为,

mysql> 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);
Query OK,  row affected ( sec)
           

同时,此方式下,自动增量的

cust_id

NULL

非必须。所以,纵使与表中列的次序不同,也可以完成插入操作。因此当比给出列名的时候,必须正确的给出每列<所有列>的值。

     如果表的定义允许,可以选择在

INSERT

操作时忽略某些列。忽略的列必须满足如下条件,

1. 该列定义为允许

NULL

;

2. 表中给出默认值;

  • 注意,为避免影响到数据库瞬时速度,可以将插入操作降低优先级。

    INSERT LOW_PRIORITY INTO

    ,此操作同样适用于

    UPDATE

    DELETE

19.3 插入多行

插入多行,只需要在每组值用圆括号并且逗号隔开即可。

mysql> 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), ('pep E. LaPew', '200 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
Query OK,  row affected ( sec)
           
  • 注意,使用多行插入操作,可以提高

    INSERT

    的性能。通俗讲,尽量少用语句。

19.4 插入检索出的语句

INSERT

一般用来插入单行,但是与

SELECT

结合后,可以使用所谓的

INSERT SELECT

,举例说明

mysql> 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;
           

分析:使用

INSERT SELECT

从custnew中将所有数据导入customers。

SELECT

语句将检索信息传入

INSERT

- 注意,此例子中,将cust_id一并导入(cust_id被定义为非空、自增),因此必须确保导入的cust_id不重复。否则,需要省略此列,有SQL自增。同时检索列与插入列的名字不需要相同,MySQL只关心对应列顺序。

20章 更新和删除数据

UPDATE

DELETE

使用

20.1 更新数据

  • 注意,在使用

    UPDATE

    语句时,必须严格小心,不要省略

    WHERE

    语句,否则会更新表中所有行。
    1. UPDARE

      更新数据的两种方式,
      • 更新表中所有行;
      • 更新表中特定行。
    2. UPDARE

      语句由三部分组成,
      • 要更新的表;
      • 列名和他们的新值;
      • 确定要更新行的过滤条件。

例子,更新单列,

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

分析:

UPDARE

总是以要更新的表的名字开始,

SET

为赋值命令

例子,使用多列更新时,只需要一次

SET

命令即可

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

分析:

1. 如果多列更新,并且在一行或多行赋值时出现错误,则整个

UPDATE

操作都会被取消(更新不会进行)。可以使用

IGNORE

关键字。

2. 为了删除每列的值,可以赋值为

NULL

mysql> UPDATE customers SET cust_email = NULL WHERE cust_id = ;
           

20.2 删除数据

     使用

DELETE

语句,进行删除操作,形式如下

- 从表中删除特定行;

- 从表中删除所有的行。

- 注意,在使用

DELETE

语句时,同样必须严格小心,不要省略

WHERE

语句,否则会更新表中所有行。

-

DELETE

不需要列名或通配符。

DELETE

语句删除整行而不是整列,若删除整列需要使用

UPDATE

操作(在不使用

WHERE

语句前提下,更新数据)。

- 若需要删除所有数据,不需要使用

DELETE

语句,使用速度更快的

TRUNCATE TABLE

。操作原理为,删除原表格,并创建新表。

20.3 更新和删除的原则

  1. 除非更新和删除每一行,使用

    UPDATE

    DELETE

    操作都需要使用

    WHERE

  2. 保证每个表,都有主键,以便与使用

    WHERE

    语句进行唯一性检索;
  3. 在使用

    UPDATE

    DELETE

    前,需要进行

    SELECT

    测试,保证过滤条件的正确性;
  4. 使用强制实施引用完整的数据库,保证不会删除与其他表有关联的数据的行。
    • MySQL没有撤销,没有撤销,没有撤销。