《MySQL必知必会学习笔记》:更新和删除数据

来源:互联网 发布:sql server服务器ip 编辑:程序博客网 时间:2024/06/10 01:25

更新和删除数据

上篇博文介绍了下插入数据的几种方式。这篇博文就来讲述下更新和删除数据。

更新数据

更新(修改)表中的数据,使用update语句。

更新数据一般采用如下两种方式:

  • 更新表中特定行的数据。
  • 更新表中所有行的数据。

作为一个老师,可能在登入成绩时,将某人的成绩登错了,应该怎么来修改呢?例如:更新student2表中name=’z’的mathScore成绩为99分的语句如下:

update student2 set mathScore=99 where name='z';

在更新数据时,一定要加上 where子句,否则,就会将表中所有的行数据进行了相同的更新。

如下就是更新了表中所有行的mathScore了99;

update student2 set mathScore=99;

因此,在使用update更新(修改)表中的数据时,一定要谨慎。因此在MySQL中是没有撤销命令的。

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

删除数据。

删除数据,使用delete语句。

删除数据一般采用如下两种方式:

  • 删除表中特定行的数据。
  • 删除表中所有行的数据。

例如:将表student2中的name=’z’的行数据删除,语句如下:

delete from student2 where name='z';


注意:一定要有where子句。否则会删除表中的所有行。

如下就是在没有where子句的删除语句。

delete from student2 ;//删除表中所有行数据。

如果我们真的要删除某个表中的数据时,《MySQL必知必会》这本书上介绍建议我们使用 truncate关键字来做。说这样性能会快点,因此,delete删除表中的数据是一行一行的删除,而truncate是直接删除此表,再新建一个表。

实践结果如下,

从结果可以看出,truncate student2 语句的执行时间比 delete from student2要慢一些;

分析了下原因:可能是表中的数据只有3行,而创建表需要的时间也是比较大的,因此效果就没有体现出来。如果数据比较多,创建表的时间相比删除很多行数据就可以被忽略了,truncate将会效果更好。

用delete只能以行为单位进行删除,如果我们要删除某列的值,应该怎么做呢?

解决方法是:利用update设置他为NULL(假如表定义允许NULL值);

例如

update student2 set mathScore=NULL where name='z';

小结

使用update或delete时所遵循的习惯如下:

1、除非确实打算更新和删除每一行,否则绝对不要使用不带where子句的update或delete语句。

2、在对update或delete语句使用where子句前,最好先用select进行测试,保证它过滤的你想要过滤的数据,以防编写的where子句不正确。

MySQL没有撤销按钮。应该非常小心的使用update和delete,否则会错误的更新和删除了表中的数据。

1 0