MySQL删除数据,是将符合条件的一行或者多行从数据库中进行删除。 但在实际的业务过程中,通常是不能删除数据的,要保留历史,常常会定义一个标识位,如write_status, 1是正常状态, 2是删除状态。 当插入,修改时,write_status的值是1, 当删除时,会将write_status更新成2,来达到删除的目的。 前台展示时,展示不出来, 但是从数据库中查询时,可以查询到。
仍然用的是 yuejl 数据库 里面的 user 表, 并修改 user表中的内容。
一. 删除命令 delete
delete from 表名 [where 条件];
删除用的是 delete 关键字, 后面一般都要跟条件,如果不跟条件,表示删除数据表里面的所有的内容。
可以简单分为, 删除一条记录 和删除多条记录,和删除有外键的记录三种情况。
二. 删除一条记录
删除一条记录时,通常是用 主键进行指定,这样就可以唯一确定一条记录了,达到只删除一条记录的目的。
二.一 指定主键id删除一条记录
如删除 id=6的 名称叫做 小蝴蝶的数据。
delete from user where id=6;
二.二 删除时指定的id 不存在
如删除 id=7的数据,然而 表user 中并没有这一条记录。
delete from user where id=7;
Query OK, 0 rows affected (0.00 sec)
并不会报错,而是执行成功,只是影响的条数是0行。
这一点,与 update 更新时,不存在记录导致的结果一样(具体可以看上一章节update修改单条记录主键不存在的问题)
所以,在删除之前,我们常常验证一下, 该条记录是否还存在于数据库里面, 如果不存在了,则抛出异常,在前台提示用户 ‘该条数据已经被删除,请刷新后再提交’, 如果存在,则才执行数据库的删除语句。
三. 删除多条记录
删除多条记录时, 老蝴蝶把它分成两种情况, 一种是指定的where 条件,可以筛选出多条, 第二种是 不指定条件,全部删除。
三.一 指定的where 条件 可以筛选多条记录
如 指定 id>3 的数据, 有4和5 两条数据。 除了指定主键外,还可以指定其他的列, 如age=24 的记录, 或者 name=‘老蝴蝶的’,也或者 age 在 18到30岁之间的。
这儿用 name=‘老蝴蝶’ 的进行举例验证。
delete from user where name='老蝴蝶';
删除了两行,还剩下三行数据。
三.二 不指定where 条件,全表删除数据
delete from user;
发现, user 表里面的数据全部被删除了。
四. 删除有外键的记录
用 以前的 表 u和 dept 表进行验证。 dept表是父表, u表是子表。
四.一 删除父表中的没有被引用的数据
如 部门编号是 3的记录, 里面并没有相应的员工与其进行关联。 看是否能直接删除该部门?
delete from dept where id=3;
可以直接被删除。