更新和删除数据
上篇博文介绍了下插入数据的几种方式。这篇博文就来讲述下更新和删除数据。
更新数据
更新(修改)表中的数据,使用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,否则会错误的更新和删除了表中的数据。