|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
关于这个理由我把它放在最后一位。在很多业界专家中有一个相当一致的观点:MySQL不能很好的扩展。关于这点可能有很大的分歧,争论的焦点主要集中于水平可扩展性和垂直可扩展性上。MySQL则更倾向于垂直可扩展性。实在删除数据库中数据的办法其实不庞大,为何我还要画蛇添足呢,一是我这里先容的是删除数据库的一切数据,由于数据之间大概构成互相束缚干系,删除操纵大概堕入逝世轮回。 实在删除数据库中数据的办法其实不庞大,为何我还要画蛇添足呢,一是我这里先容的是删除数据库的一切数据,由于数据之间大概构成互相束缚干系,删除操纵大概堕入逝世轮回,二是这里利用了微软未正式公然的sp_MSForEachTable存储历程。
大概良多读者伴侣都履历过如许的事变:要在开辟数据库基本上清算一个空库,但因为对数据库布局缺少全体懂得,在删除一个表的纪录时,删除不了,由于大概有外键束缚,一个罕见的数据库布局是一个主表,一个子表,这类情形下一样平常都得先删除子表纪录,再删除主表纪录。
说道删除数据纪录,常常即刻会想到的是delete和truncate语句,但在碰到在两个或多个表之间存在束缚的话,这两个语句大概城市生效,并且最要命的是这两个命令都只能一次操纵一个表。那末真正碰到要删除SQLServer数据库中一切纪录时,该怎样办呢?有两个选择:
1.依照前后按次逐一删除,这个办法在表十分多的情形下显得很不实际,即使是表数目未几,但束缚对照多时,你仍是要消费大批的工夫和精神往研讨其间的束缚干系,然后找出先删哪一个表,再删哪一个表,最初又删哪一个表。
2.禁用一切束缚,删除一切数据,最初再启用束缚,如许就不必花工夫和精神往研讨甚么束缚了,只必要编写一个复杂的存储历程就能够主动完成这个义务。
从这两个选择中不丢脸出第二个选择是最复杂无效的了,那末在利用第二个选择时,详细该怎样实行呢?
起首得编写代码轮回反省一切的表,这里我保举一个存储历程sp_MSForEachTable,由于在微软的官方文档中没有对这个存储历程有形貌,良多开辟职员大概都还不曾传闻,以是你在互联网上搜刮失掉的办理举措年夜多很庞大,大概有的人会以为,既然没有官方文档,这个存储历程大概会不不乱,打心思上会排挤它,但现实并不是云云。上面来先看一个完全的剧本:
CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable ALTER TABLE ? NOCHECK CONSTRAINT ALL
EXEC sp_MSForEachTable ALTER TABLE ? DISABLE TRIGGER ALL
EXEC sp_MSForEachTable DELETE FROM ?
EXEC sp_MSForEachTable ALTER TABLE ? CHECK CONSTRAINT ALL
EXEC sp_MSForEachTable ALTER TABLE ? ENABLE TRIGGER ALL
EXEC sp_MSFOREACHTABLE SELECT * FROM ?
GO
这个剧本创立了一个定名为sp_DeleteAllData的存储历程,后面两行语句分离禁用束缚和触发器,第三条语句才是真正地删除一切数据,接下里的语句分离复原束缚和触发器,最初一条语句是显现每一个表中的纪录,固然这条语句也能够不要,我只是想确认一下是不是清空了一切表罢了。
你能够在任何数据库上运转这个存储历程,固然不要在天生数据库上运转,可别怪我没告知你!不论如何,仍是先备份一下数据库,利用备份数据库复原,然后再运转该存储历程,呵呵,即便是一个年夜型数据库,也要未几长工夫,你的数据库就成一个空库了,有点怕怕的感到!
DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。 |
|