Php 删除整个表
请容忍我,我是PHP新手,所以我还不是很好。我正在尝试制作一个按钮,它具有删除MySQL数据库中所有行的功能 我的numtable中有两列:“n_id(主键)”和“num”。它们都是INT 现在,我在MySQL数据库中填写了3个值:Php 删除整个表,php,mysql,sql,sql-delete,Php,Mysql,Sql,Sql Delete,请容忍我,我是PHP新手,所以我还不是很好。我正在尝试制作一个按钮,它具有删除MySQL数据库中所有行的功能 我的numtable中有两列:“n_id(主键)”和“num”。它们都是INT 现在,我在MySQL数据库中填写了3个值: n_id num 1 4 2 9 3 47 index.html: <form method = "post" action = "delete.php"> <input name="delete"
n_id num
1 4
2 9
3 47
index.html:
<form method = "post" action = "delete.php">
<input name="delete" type="submit" id="delete" value="Delete">
</form>
我已经查看了很多关于堆栈溢出的内容,但是我只能找到问题,其中只有一行需要删除,而不是整个表。我的代码肯定是错的,但我还需要什么
我可以看出,在SQL查询中也可以使用
TRUNCATE
而不是DELETE
。据我所知,如果数据库有非常大的数据,最好使用TRUNCATE
,如果数据库不是那么大,最好使用delete。对吗 如果需要从表中删除所有记录,只需省略其中的条件:
DELETE FROM numtable
如果不想截断,则只需从表中删除
DELETE和truncate之间的区别很有趣
- 删除:逐个清除行,检查条件
- 截断:快速清除所有行。它在内部销毁和重新创建表
查看此摘要,它确实是一个很好的参考:
另外,从表中删除,如果有任何“整表操作”保护,则1可以执行此操作
要了解有关删除和截断的更多信息,请访问以下链接:
如果要从表中删除所有行,最好使用truncate
。以下是从表中删除所有数据的三种方法:
truncate table t
delete from t
drop t
有什么区别Drop
将表完全从数据库中删除。这包括所有触发器、约束、索引等。表不在那里,因此您可以根据需要重新创建它
Delete
和Truncate
删除表中的所有行,同时保留表的结构。这便于清空表,同时保留触发器、索引、约束等。区别在于delete
记录所有事务(假设底层数据库/存储引擎记录)。因此,速度较慢Truncate
不进行日志记录,也不触发删除触发器,因此通常速度要快得多
这是一个简单的解释。在解释truncate
和delete
之间的差异方面做得很好,使用truncate通常会更快,因为它会将表归零,但它会阻塞,因为它是一个DDL。了解更多信息和一些不利因素(例如,无法撤销)
如果您希望继续写入,并且您有足够的数据,那么您最好执行以下操作:
create table table_name_new like table_name;
rename table_name to table_name_YYYYMMDD, table_name_new to table_name;
然后,您可以备份数据,或者完全删除表,而不影响对原始表的写入。在SELECT、UPDATE或DELETE语句中,WHERE标识了要对哪些行应用该操作,因此您只需要标识所有行的WHERE子句。(注意,对于MySQL,LIMIT子句还限制了操作应用到的行数。)
通常通过完全省略WHERE子句来对所有行应用操作,这相当于对所有行应用一个过滤条件
但是,从表中删除每一行要比显式要求数据库释放分配给表的存储空间慢得多,因此大多数SQL rDBMS也实现了这一点
删除和重新创建表也是一个有效的解决方案(IIRC在Oracle的TRUNCATE上更快)。阅读有关MySQL的文章。你想这样做是不寻常的,所以我想问一下“为什么?”,只是为了学习如何做,因此,我可以理解并更好地进行php编程:)当从numtable中删除或简单地截断numtable
按预期工作时,为什么需要技巧?因为某些MySQL接口具有“整表”保护(例如,mysqlworkbench检测是否要删除所有行)。这个窍门足以绕过它。非常感谢你的回答。我的HTML是正确的,还是我需要更多的东西?我在想:谢谢。所以我的HTML表单中不需要更多?
create table table_name_new like table_name;
rename table_name to table_name_YYYYMMDD, table_name_new to table_name;
index.html:
<form method = "post" action = "delete.php">
<input name="delete" type="submit" id="delete" value="Delete">
</form>
$query = ("DELETE FROM numtable [Where Clause] ");