[推荐] (SqlServer)批量清理指定数据库中所有数据
[ 推荐 ] (SqlServer) 批量清理指定数据库中所有数据 通过知识共享树立个人品牌。 在实际应用中,当我们准备把一个项目移交至客户手中使用时,我们需要把库中所有表先前的测试数据清空,以给客户一个干净的数据库,如果涉及的表很多,要一一的清空,不仅花费
[推荐] (SqlServer)批量清理指定数据库中所有数据
——通过知识共享树立个人品牌。
在实际应用中,当我们准备把一个项目移交至客户手中使用时,我们需要把库中所有表先前的测试数据清空,以给客户一个干净的数据库,如果涉及的表很多,要一一的清空,不仅花费时间,还容易出错以及漏删,在这儿我提供了一个方法,可快捷有效的清空指定数据库所有表的数据。仅供参考,欢迎交流不同意见。
--Remove all data from a database
SET NOCOUNT ON
--Tables to ignore
DECLARE @IgnoreTables
TABLE (TableName varchar(512))
INSERT INTO @IgnoreTables (TableName) VALUES ('sysdiagrams')
DECLARE @AllRelationships
TABLE (ForeignKey varchar(512)
,TableName varchar(512)
,ColumnName varchar(512)
,ReferenceTableName varchar(512)
,ReferenceColumnName varchar(512)
,DeleteRule varchar(512))
INSERT INTO @AllRelationships
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,
fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,
fc.referenced_column_id) AS ReferenceColumnName,
delete_referential_action_desc as DeleteRule
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
DECLARE @TableOwner varchar(512)
DECLARE @TableName varchar(512)
DECLARE @ForeignKey varchar(512)
DECLARE @ColumnName varchar(512)
DECLARE @ReferenceTableName varchar(512)
DECLARE @ReferenceColumnName varchar(512)
DECLARE @DeleteRule varchar(512)
PRINT('Loop through all tables and switch all constraints to have a delete rule of CASCADE')
DECLARE DataBaseTables0
CURSOR FOR
SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
FROM sys.tables AS t;
OPEN DataBaseTables0;
FETCH NEXT FROM DataBaseTables0
INTO @TableOwner,@TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
BEGIN
PRINT '['+@TableOwner+'].[' + @TableName + ']';
DECLARE DataBaseTableRelationships CURSOR FOR
SELECT ForeignKey, ColumnName, ReferenceTableName, ReferenceColumnName
FROM @AllRelationships
WHERE TableName = @TableName
OPEN DataBaseTableRelationships;
FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey, @ColumnName, @ReferenceTableName, @ReferenceColumnName;
IF @@FETCH_STATUS 0
PRINT '=====> No Relationships' ;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '=====> switching delete rule on ' + @ForeignKey + ' to CASCADE';
BEGIN TRANSACTION
BEGIN TRY
EXEC('
ALTER TABLE ['+@TableOwner+'].[' + @TableName + ']
DROP CONSTRAINT '+@ForeignKey+';
ALTER TABLE ['+@TableOwner+'].[' + @TableName + '] ADD CONSTRAINT
'+@ForeignKey+' FOREIGN KEY
(
'+@ColumnName+'
) REFERENCES '+@ReferenceTableName+'
(
'+@ReferenceColumnName+'
) ON DELETE CASCADE;
');
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT '=====> can''t switch ' + @ForeignKey + ' to CASCADE, - ' +
CAST(ERROR_NUMBER() AS VARCHAR) + ' - ' + ERROR_MESSAGE();
ROLLBACK TRANSACTION
END CATCH;
FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey, @ColumnName, @ReferenceTableName, @ReferenceColumnName;
END;
CLOSE DataBaseTableRelationships;
DEALLOCATE DataBaseTableRelationships;
END
PRINT '';
PRINT '';
FETCH NEXT FROM DataBaseTables0
INTO @TableOwner,@TableName;
END
CLOSE DataBaseTables0;
DEALLOCATE DataBaseTables0;
PRINT('Loop though each table and DELETE All data from the table')
DECLARE DataBaseTables1 CURSOR FOR
SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
FROM sys.tables AS t;
OPEN DataBaseTables1;
FETCH NEXT FROM DataBaseTables1
INTO @TableOwner,@TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
BEGIN
PRINT '['+@TableOwner+'].[' + @TableName + ']';
PRINT '=====> deleting data from ['+@TableOwner+'].[' + @TableName + ']';
BEGIN TRY
EXEC('
DELETE FROM ['+@TableOwner+'].[' + @TableName + ']
DBCC CHECKIDENT ([' + @TableName + '], RESEED, 0)
');
END TRY
BEGIN CATCH
PRINT '=====> can''t FROM ['+@TableOwner+'].[' + @TableName + '], - ' +
CAST(ERROR_NUMBER() AS VARCHAR) + ' - ' + ERROR_MESSAGE();
END CATCH;
END
PRINT '';
PRINT '';
FETCH NEXT FROM DataBaseTables1
INTO @TableOwner,@TableName;
END
CLOSE DataBaseTables1;
DEALLOCATE DataBaseTables1;
PRINT('Loop through all tables and switch all constraints to have a delete rule they had at the beggining of the task')
DECLARE DataBaseTables2 CURSOR FOR
SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
FROM sys.tables AS t;
OPEN DataBaseTables2;
FETCH NEXT FROM DataBaseTables2
INTO @TableOwner,@TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
BEGIN
PRINT '['+@TableOwner+'].[' + @TableName + ']';
DECLARE DataBaseTableRelationships CURSOR FOR
SELECT ForeignKey, ColumnName, ReferenceTableName, ReferenceColumnName, DeleteRule
FROM @AllRelationships
WHERE TableName = @TableName
OPEN DataBaseTableRelationships;
FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey, @ColumnName, @ReferenceTableName, @ReferenceColumnName, @DeleteRule;
IF @@FETCH_STATUS 0
PRINT '=====> No Relationships' ;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @switchBackTo varchar(50) =
CASE
WHEN @DeleteRule = 'NO_ACTION' THEN 'NO ACTION'
WHEN @DeleteRule = 'CASCADE' THEN 'CASCADE'
WHEN @DeleteRule = 'SET_NULL' THEN 'SET NULL'
WHEN @DeleteRule = 'SET_DEFAULT' THEN 'SET DEFAULT'
END
PRINT '=====> switching delete rule on ' + @ForeignKey + ' to ' + @switchBackTo;
BEGIN TRANSACTION
BEGIN TRY
EXEC('
ALTER TABLE ['+@TableOwner+'].[' + @TableName + ']
DROP CONSTRAINT '+@ForeignKey+';
ALTER TABLE ['+@TableOwner+'].[' + @TableName + '] ADD CONSTRAINT
'+@ForeignKey+' FOREIGN KEY
(
'+@ColumnName+'
) REFERENCES '+@ReferenceTableName+'
(
'+@ReferenceColumnName+'
) ON DELETE '+@switchBackTo+'
');
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT '=====> can''t change '+@ForeignKey + ' back to '+ @switchBackTo +', - ' +
CAST(ERROR_NUMBER() AS VARCHAR) + ' - ' + ERROR_MESSAGE();
ROLLBACK TRANSACTION
END CATCH;
FETCH NEXT FROM DataBaseTableRelationships
INTO @ForeignKey, @ColumnName, @ReferenceTableName, @ReferenceColumnName, @DeleteRule;
END;
CLOSE DataBaseTableRelationships;
DEALLOCATE DataBaseTableRelationships;
END
PRINT '';
PRINT '';
FETCH NEXT FROM DataBaseTables2
INTO @TableOwner,@TableName;
END
CLOSE DataBaseTables2;
DEALLOCATE DataBaseTables2;

MySQL'sBLOBissuitableforstoringbinarydatawithinarelationaldatabase,whileNoSQLoptionslikeMongoDB,Redis,andCassandraofferflexible,scalablesolutionsforunstructureddata.BLOBissimplerbutcanslowdownperformancewithlargedata;NoSQLprovidesbetterscalabilityand

ToaddauserinMySQL,use:CREATEUSER'username'@'host'IDENTIFIEDBY'password';Here'showtodoitsecurely:1)Choosethehostcarefullytocontrolaccess.2)SetresourcelimitswithoptionslikeMAX_QUERIES_PER_HOUR.3)Usestrong,uniquepasswords.4)EnforceSSL/TLSconnectionswith

ToavoidcommonmistakeswithstringdatatypesinMySQL,understandstringtypenuances,choosetherighttype,andmanageencodingandcollationsettingseffectively.1)UseCHARforfixed-lengthstrings,VARCHARforvariable-length,andTEXT/BLOBforlargerdata.2)Setcorrectcharacters

MySQloffersechar, Varchar, text, Anddenumforstringdata.usecharforfixed-Lengthstrings, VarcharerForvariable-Length, text forlarger text, AndenumforenforcingdataAntegritywithaetofvalues.

Optimizing MySQLBLOB requests can be done through the following strategies: 1. Reduce the frequency of BLOB query, use independent requests or delay loading; 2. Select the appropriate BLOB type (such as TINYBLOB); 3. Separate the BLOB data into separate tables; 4. Compress the BLOB data at the application layer; 5. Index the BLOB metadata. These methods can effectively improve performance by combining monitoring, caching and data sharding in actual applications.

Mastering the method of adding MySQL users is crucial for database administrators and developers because it ensures the security and access control of the database. 1) Create a new user using the CREATEUSER command, 2) Assign permissions through the GRANT command, 3) Use FLUSHPRIVILEGES to ensure permissions take effect, 4) Regularly audit and clean user accounts to maintain performance and security.

ChooseCHARforfixed-lengthdata,VARCHARforvariable-lengthdata,andTEXTforlargetextfields.1)CHARisefficientforconsistent-lengthdatalikecodes.2)VARCHARsuitsvariable-lengthdatalikenames,balancingflexibilityandperformance.3)TEXTisidealforlargetextslikeartic

Best practices for handling string data types and indexes in MySQL include: 1) Selecting the appropriate string type, such as CHAR for fixed length, VARCHAR for variable length, and TEXT for large text; 2) Be cautious in indexing, avoid over-indexing, and create indexes for common queries; 3) Use prefix indexes and full-text indexes to optimize long string searches; 4) Regularly monitor and optimize indexes to keep indexes small and efficient. Through these methods, we can balance read and write performance and improve database efficiency.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SublimeText3 Chinese version
Chinese version, very easy to use

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver Mac version
Visual web development tools
