sql必知必会学习记录(十五)- 操作数据

梦里梦外; 2022-03-08 06:18 282阅读 0赞

sql必知必会学习记录(十五)- 操作数据

1. 插入数据

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

插入完整的行

  1. INSERT INTO 表名 VALUES(val1,val2.....);
  2. INSERT INTO Customers VALUES(NULL,
  3. 'Pep E. LaPew',
  4. '1100 Main Street',
  5. 'Los Angeles',
  6. 'CA',
  7. 190046',
  8. 'USA',
  9. NULL,
  10. NULL);

各个列必须以它们在表定义中出现的次序填充。第一列custid为NULL。这是因为每次插入一个新行时,该列由MySQL自动增量。你不想给出一个值(这是MySQL的工作),又不能省略此列(如前所述,必须给出每个列),所以指定一个NULL值(它被MySQL忽略,MySQL在这里插入下一个可用的cust_id值)。但是这种方法在更改表结构之后,原来的sql语句就不能用了。

  1. INSERT INTO cuStomers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country,cust_contact, cust_email)VALUES('Pep E. LaPew','1100 Main Street',
  2. 'Los Angeles', 'CA',190046','USA', NULL, NULL);

上面的SQL,其优点是,即使表的结构改变,此INSERT语句仍然能正确工作。你会发现cust_id的NULL值是不必要的,cust_id列并没有出现在列表中,所以不需要任何值。使用这种语法,还可以省略列。这表示可以只给某些列提供值,给其他列不提供值

不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样,将产生一条错误消息,相应的行插入不

如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件。

  • 该列定义为允许NULL值(无值或空值)。
  • 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

    如果对表中不允许NULL值且没有默认值的列不给出值,则MySQL将产生一条错误消息,并且相应的行插入不成功。

数据库经常被多个客户访问,对处理什么请求以及用什么次序处理进行管理是MySQL的任务。INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。
如果数据检索是最重要的(通常是这样),则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如下所示:INSERT LOW_PRIORITY INTO这也适用于UPDATE和DELETE语句。

一次插入多条数据

其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用逗号分隔。此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。

  1. INSERT INTO cuStomers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country)
  2. VALUES(
  3. 'Pep E. LaPew',
  4. '1100 Main Street',
  5. 'Los Angeles', 'CA',
  6. '190046',
  7. 'USA'
  8. ),
  9. ('M. Martian',
  10. '142 Galaxy Way',
  11. 'New York',
  12. 'NY',
  13. '11213',
  14. 'USA'
  15. );

插入检索出的数据

  1. 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;

MySQL不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。这对于从使用不同列名的表中导入数据是非常有用的。SELECT语句可包含WHERE子句以过滤插入的数据

2. 更新数据

update的语法:

  1. update 表名 set 列名= 值,列名=值 where 过滤条件

**IGNORE关键字 **如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个UPDATE操作被取消(错误发生前更新的所有行被恢复到它们原来的值)。为了即使是发生错误,也继续进行更新,可使用IGNORE关键字,如下所示:UPDATE IGNORE customers…

3. 删除数据

delete的语法:

  1. DELETE FROM 表名 where 过滤条件 //如果省略了过滤条件,则是删除表中的所有数据

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

发表评论

表情:
评论列表 (有 0 条评论,282人围观)

还没有评论,来说两句吧...

相关阅读