SqlServer(4)经典总结大全-技巧总结-数据开发-基本函数-常识整理-经典面试题
六、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选,
如:
if @strWhere !=‘’
begin
set @strSQL = ‘select count(*) as Total from [’ + @tblName + '] where ’ + @strWhere
end
else
begin
set @strSQL = ‘select count(*) as Total from [’ + @tblName + ‘]’
end
我们可以直接写成
set @strSQL = ‘select count(*) as Total from [’ + @tblName + '] where 1=1 '+ @strWhere
2、收缩数据库
–重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
–收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login ‘update_one’,‘newname’,‘oldname’
go
5、检查备份集
RESTORE VERIFYONLY from disk=‘E:\dvbbs.bak’
6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB(‘dvbbs’,repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename – 要操作的数据库名
SELECT @LogicalFileName = ‘tablename_log’, – 日志文件名
@MaxMinutes = 10, – Limit on time allowed to wrap log. @NewSize = 1 – 你想设定的日志文件的大小(M)
Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ’ + db_name() + ’ LOG is ’ +
CONVERT(VARCHAR(30),@OriginalSize) + ’ 8K pages or ’ + CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB’ FROM sysfiles WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = ‘BACKUP LOG ’ + db_name() + ’ WITH TRUNCATE_ONLY’
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
– Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) – time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN – Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN – update
INSERT DummyTrans VALUES (‘Fill Log’) DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ’ + db_name() + ’ LOG is ’ +
CONVERT(VARCHAR(30),size) + ’ 8K pages or ’ +
CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB’
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、说明:更改某个表
exec sp_changeobjectowner ‘tablename’,‘dbo’
9、存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select ‘Name’ = name,
‘Owner’ = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + ‘.’ + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
– select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
案例**:
有如下表,要求就表中所有沒有及格的成绩,在每次增長0.1的基础上,使得刚好及格:
Name score
Zhangshan 80
Lishi 59
Wangwu 50
zhengliu 69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if (select min(score) from tb_table)>60
break
else
continue
end
七、数据开发-经典
1、按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多
2、数据库加密:
select encrypt(‘原始密码’)
select pwdencrypt(‘原始密码’)
select pwdcompare(‘原始密码’,‘加密后密码’) = 1–相同;否则不相同 encrypt(‘原始密码’)
select pwdencrypt(‘原始密码’)
select pwdcompare(‘原始密码’,‘加密后密码’) = 1–相同;否则不相同
3、取回表中字段:
declare @list varchar(1000),
@sql nvarchar(1000)
select @list=@list+‘,’+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=‘表A’
set @sql=‘select ‘+right(@list,len(@list)-1)+’ from 表A’
exec (@sql)
4、查看硬盘分区:
EXEC master…xp_fixeddrives
5、比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A) =
(select checksum_agg(binary_checksum(*)) from B)
print ‘相等’
else
print ‘不相等’
6、杀掉所有的事件探测器进程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN(‘SQL profiler’,N’SQL 事件探测器’)
EXEC sp_msforeach_worker ‘?’
7、记录搜索:
开头到N条记录
Select Top N * From 表
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
N到结尾记录
Select Top N * From 表 Order by ID Desc
举例:
例如1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句, 找出表的第31到第40个记录。
select top 10 recid from A where recid not in(select top 30 recid from A)
分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。
select top 10 recid from A where……是从索引中查找,而后面的select top 30 recid from A则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的不是本来的欲得到的数据。
解决方案
1, 用order by
select top 30 recid from A order by ricid 如果该字段不是自增长,就会出现问题
2, 在那个子查询中也加条件:
select top 30 recid from A where recid>-1
例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
set @ s = ‘select top 1 * from T where pid not in (select top ’ + str(@count-1) + ’ pid from T)’ print @s exec sp_executesql @s
8、获取当前数据库中的所有用户表
select Name from sysobjects where xtype=‘u’ and status>=0
9、获取某一个表的所有字段
select name from syscolumns where id = object_id(‘表名’)
select name from syscolumns where id in (select id from sysobjects where type = ‘u’ and name = ‘表名’)
两种方式的效果相同
10、查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%’
11、查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype=‘P’
12、查询用户创建的所有数据库
select * from master…sysdatabases D where sid not in(select sid from master…syslogins where name=‘sa’) 或者 select dbid, name AS DB_NAME from master…sysdatabases where sid <> 0x01
13、查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns where table_name = ‘表名’
14、不同服务器数据库之间的数据操作
**–**创建链接服务器
exec sp_addlinkedserver 'ITSV ', ’ ', 'SQLOLEDB ', '远程服务器名或ip地址 ’
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ’
–查询示例
select * from ITSV.数据库名.dbo.表名
–导入示例
select * into 表 from ITSV.数据库名.dbo.表名
**–**以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins ’
**–**连接远程/局域网数据(openrowset/openquery/opendatasource)
–1、openrowset
–查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
–生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
–把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表
–更新本地表
update b set b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1
–openquery用法需要创建一个连接
–首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ’ ', 'SQLOLEDB ', '远程服务器名或ip地址 ’
–查询
select * FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
–把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
–更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
–3、opendatasource/openrowset
SELECT * FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ’ ).test.dbo.roy_ta
–把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
八、SQLServer基本函数
在SQL Server中,存在大量的内置函数,这些函数可以用于处理字符串、数字、日期和时间等数据类型。下面是一些常用的SQL Server基本函数及其代码示例:
1、字符串函数
- LEN(string_expression)
- 返回字符串中的字符数,不包括尾随空格。
SELECT LEN('Hello World') AS StringLength; -- 返回 11
- DATALENGTH(expression)
- 返回任何表达式的字节数。对于非Unicode字符串,这通常与字符数不同。
SELECT DATALENGTH('Hello') AS DataLengthBytes; -- 返回 10,因为每个字符通常占用一个字节
- SUBSTRING(string_expression, start, length)
- 返回字符串中从指定位置开始、具有指定长度的子字符串。
SELECT SUBSTRING('Hello World', 1, 5) AS SubstringResult; -- 返回 'Hello'
- LEFT(string_expression, number_of_chars)
- 返回字符串最左边的指定数量的字符。
SELECT LEFT('Hello World', 5) AS LeftResult; -- 返回 'Hello'
- RIGHT(string_expression, number_of_chars)
- 返回字符串最右边的指定数量的字符。
SELECT RIGHT('Hello World', 5) AS RightResult; -- 返回 'World'
- LTRIM(string_expression)
- 返回去除了前导空格的字符串。
SELECT LTRIM(' Hello World') AS LTrimResult; -- 返回 'Hello World'
- RTRIM(string_expression)
- 返回去除了尾随空格的字符串。
SELECT RTRIM('Hello World ') AS RTrimResult; -- 返回 'Hello World'
- UPPER(string_expression)
- 返回将指定字符串中的小写字母转换为大写字母后的字符串。
SELECT UPPER('Hello World') AS UpperResult; -- 返回 'HELLO WORLD'
- LOWER(string_expression)
- 返回将指定字符串中的大写字母转换为小写字母后的字符串。
SELECT LOWER('HELLO WORLD') AS LowerResult; -- 返回 'hello world'
- REPLACE(string_expression, search_string, replacement_string)
- 在字符串中替换指定的子字符串。
SELECT REPLACE('Hello World', 'World', 'SQL Server') AS ReplaceResult; -- 返回 'Hello SQL Server'
- CHARINDEX(substring_expression, string_expression)
- 返回子字符串在字符串中首次出现的位置。
SELECT CHARINDEX('World', 'Hello World') AS CharIndexResult; -- 返回 7
- STUFF(string_expression, start, length, replaceWith_expression)
- 从字符串中删除指定长度的字符,并在指定位置插入新的字符串。
SELECT STUFF('Hello World', 7, 5, 'SQL') AS StuffedString; -- 返回 'Hello SQL'
- FORMAT(value, format[, culture]])
- 将数字或日期/时间值格式化为指定的格式。
SELECT FORMAT(123456.789, 'C', 'en-us') AS FormattedCurrency; -- 返回 '$123,456.79'
2、数学函数
- ROUND(numeric_expression, length)
- 返回数字表达式四舍五入到指定的小数位数后的结果。
SELECT ROUND(123.4567, 2) AS RoundedNumber; -- 返回 123.46
- ABS(numeric_expression)
- 返回数值表达式的绝对值。
SELECT ABS(-123.45) AS AbsoluteValue; -- 返回 123.45
- CEILING(numeric_expression)
- 返回大于或等于指定数值表达式的最小整数。
SELECT CEILING(123.45) AS CeilingValue; -- 返回 124
- FLOOR(numeric_expression)
- 返回小于或等于指定数值表达式的最大整数。
SELECT FLOOR(123.45) AS FloorValue; -- 返回 123
- POWER(number, exponent)
- 返回数字的指定幂的结果。
SELECT POWER(2, 3) AS PowerResult; -- 返回 8
3、转换函数
- CAST(expression AS data_type [ ( length ) ])
- 将表达式转换为指定的数据类型。
SELECT CAST('123' AS INT) AS ConvertedToInt; -- 返回 123
- CONVERT(data_type [(length)], expression [, style])
- 将表达式转换为指定的数据类型,并可以选择一个样式来格式化日期和时间类型。
SELECT CONVERT(VARCHAR, GETDATE(), 101) AS ConvertedDate; -- 返回 'mm/dd/yyyy' 格式的日
4、日期和时间函数
- GETDATE()
- 返回当前日期和时间。
SELECT GETDATE() AS CurrentDateTime;
- DATEDIFF(datepart, startdate, enddate)
- 返回两个日期之间的时间间隔。
SELECT DATEDIFF(YEAR, '2020-01-01', '2023-01-01') AS YearsDifference; -- 返回 3
- DATEADD(datepart, number, date)
- 在日期上添加或减去指定的时间间隔。
SELECT DATEADD(DAY, 1, '2023-01-01') AS NextDay; -- 返回 '2023-01-02'
- DATEPART(datepart, date)
- 返回日期/时间的指定部分的整数。
SELECT DATEPART(YEAR, '2023-01-01') AS YearPart; -- 返回 2023
- DATEFROMPARTS(year, month, day)
- 根据指定的年、月和日返回日期。
SELECT DATEFROMPARTS(2023, 1, 1) AS DateFromParts; -- 返回 '2023-01-01'
5、逻辑函数
- CASE
- 在SQL查询中执行条件逻辑。
SELECT ProductID, ProductName, CASE WHEN Price > 100 THEN 'Expensive' WHEN Price BETWEEN 50 AND 100 THEN 'Moderate' ELSE 'Cheap' END AS PriceCategory
FROM Products;
- COALESCE(expression1, expression2, …)
- 返回参数列表中的第一个非NULL表达式。
SELECT COALESCE(NULL, NULL, 'Third', 'Fourth') AS CoalescedValue; -- 返回 'Third'
- ISNULL(check_expression, replacement_value)
- 如果
check_expression
为NULL,则返回replacement_value
,否则返回check_expression
。
SELECT ISNULL(NULL, 'Replacement') AS IsNullResult; -- 返回 'Replacement'
6、系统函数
- @@VERSION
- 返回SQL Server的版本信息。
SELECT @@VERSION
九、常识整理
在SQL Server数据库中,有一些基本的常识知识点,以下是整理后的内容:
1、 表和视图的引用限制:
在一个SQL查询中,FROM
子句后可以跟多达 256 张表或视图。这个限制是为了保持查询的可读性和性能。如果需要引用超过 256 张表,可以通过创建临时表或使用表变量来组合数据。
2、ORDER BY 子句:
当在SQL查询中使用 ORDER BY
子句时,数据首先按照指定的列进行排序,然后才进行取值操作。这意味着排序是在查询结果返回之前完成的,确保了结果集是按照指定的顺序进行返回的。
3、字符数据类型的容量限制:
在SQL Server中,VARCHAR
数据类型的最大容量是 8000 个字符。
对于 NVARCHAR
数据类型,由于它是 Unicode 编码,每个Unicode字符由两个字节表示,因此最大容量是 4000 个Unicode字符。如果需要存储更多的Unicode字符,可以使用 NVARCHAR(MAX)
,它提供了可变的存储大小,理论上可以存储任意数量的字符,但受制于数据库的最大数据大小限制。
4、其他数据类型容量:
INT` 数据类型的最大容量是 2147483647(2^31 - 1)。
FLOAT和
REAL 数据类型的容量取决于精度和大小。例如,
FLOAT(53)` 表示一个双精度浮点数,其精度为大约 53 位数字。
5、其他SQL Server特性:
- SQL Server支持多种索引类型,如聚簇索引(CLUSTERED INDEX)和非聚簇索引(NONCLUSTERED INDEX),以及唯一索引和全文索引。
- 触发器(TRIGGER)是数据库中的一种对象,可以在数据发生变化时自动执行预定义的操作,分为插入触发器(INSERT)、更新触发器(UPDATE)和删除触发器(DELETE)。
- 存储过程(STORED PROCEDURE)是一组为了完成特定功能的SQL语句集合,它们被编译并存储在数据库中,可以被多次调用执行,有助于减少网络通信量并提高性能。
请注意,这些信息是基于SQL Server的通常行为和限制,但在特定的版本或配置中可能会有所不同。在实际操作中,应始终参考SQL Server的官方文档或进行适当的测试以确保正确的性能和行为。
十、数据库经典面试题整理
1、请解释什么是数据库事务?
数据库事务是一组原子性的SQL操作序列,这些操作要么全部成功执行,要么全部失败回滚。事务的主要目的是确保数据的完整性和一致性,在数据库系统中扮演着非常重要的角色。
2、请解释什么是存储过程?存储过程有什么优点?
存储过程是一种预编译的可重用的SQL代码块,它可以接收参数、执行逻辑操作并返回结果。存储过程的优点主要有以下几点:提高性能(因为存储过程是预编译的,所以执行速度更快)、减少网络传输(因为只需要传输存储过程的调用参数和结果,而不是整个SQL语句)、提高安全性(可以限制对数据的访问权限)、便于维护和重用(可以集中管理SQL代码,方便修改和共享)。
3、请解释什么是触发器?触发器的主要作用是什么?
触发器是一种特殊的存储过程,它会在某个特定的数据库事件(如插入、更新或删除)发生时自动执行。触发器的主要作用包括实现业务逻辑、维护数据完整性、记录数据变更历史、实现审计功能等。
4、请解释什么是函数?函数与存储过程有什么区别?
函数是一种预编译的可重用的SQL代码块,它可以接收参数并返回一个值。函数与存储过程的主要区别在于:函数只能返回一个值,而存储过程可以执行复杂的操作并返回多个结果;另外,函数通常用于计算字段的值或转换数据类型,而存储过程则用于执行特定的业务逻辑。
5、在SqlServer中,如何创建表?
在SqlServer中,可以使用CREATE TABLE语句来创建表。这个语句需要指定表的名称、列的名称和数据类型等属性。例如,创建一个包含ID、姓名和年龄的表可以使用类似以下的SQL语句:
CREATE TABLE Employees (
ID int PRIMARY KEY,
Name varchar(50),
Age int
);
6、在SqlServer中,如何进行身份验证?
SqlServer支持两种身份验证模式:Windows身份验证和SQL Server身份验证。Windows身份验证使用Windows操作系统的用户账户和密码进行身份验证,安全性较高。而SQL Server身份验证则使用SQL Server自己的用户名和密码进行身份验证,适用于特定的应用场景。在创建连接时,可以选择使用哪种身份验证模式,并输入相应的凭据进行身份验证。
7、如何优化SqlServer数据库的性能?
优化SqlServer数据库的性能是一个复杂的过程,涉及多个方面。以下是一些常见的优化策略:
- 索引优化:合理创建和使用索引可以显著提高查询性能。但过多的索引也会影响写操作的性能,因此需要根据实际情况进行权衡。
- 查询优化:优化SQL查询语句,避免使用不必要的子查询、JOIN操作等,减少查询的复杂度。
- 分区表:对于非常大的表,可以使用分区表来提高查询性能和管理效率。
- 数据库维护:定期执行数据库维护任务,如更新统计信息、重建索引等,以保持数据库的性能稳定。
- 硬件和配置优化:根据实际需求调整数据库服务器的硬件配置和SqlServer的配置参数,如内存分配、并发连接数等。
8、基础查询与操作
1、请描述SQL的主要功能是什么?
答: SQL(Structured Query Language,结构化查询语言)主要用于管理关系型数据库,包括数据查询、数据操作(增删改)、数据定义(创建、修改、删除表结构)和数据控制(访问权限的控制)等功能。
2、请写出SELECT语句的基本结构,并解释各个部分的作用。
答: 基本结构为 SELECT 列名 FROM 表名 WHERE 条件
。
SELECT
:指定要查询的列。FROM
:指定从哪个表中查询数据。WHERE
:用于设置查询条件。
3、如何使用WHERE子句进行条件筛选?
答: 例如,SELECT * FROM students WHERE age > 20
会从students
表中选取年龄大于20的所有记录。
4、请描述GROUP BY和HAVING子句的作用和区别。
答: GROUP BY
用于将结果集按一个或多个列进行分组,而HAVING
子句用于对分组后的结果进行过滤。两者的区别在于WHERE
子句不能用于聚合函数,而HAVING
子句可以。
5、如何使用ORDER BY对查询结果进行排序?
答: 例如,SELECT * FROM students ORDER BY age DESC
会按照年龄降序排列students
表中的所有记录。
9、高级查询技巧
-
请解释子查询的概念,并给出一个例子。
答: 子查询是嵌套在其他SQL查询中的查询。例如,查找年龄大于平均年龄的学生:SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students)
。 -
如何使用JOIN操作连接多个表?请描述INNER JOIN、LEFT JOIN和RIGHT JOIN的区别。
答:JOIN
用于根据两个或多个表之间的相关列之间的关系,从这些表中查询数据。INNER JOIN
:返回两个表中都有的记录。LEFT JOIN
(或LEFT OUTER JOIN
):返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配,则结果中右表的部分包含NULL。RIGHT JOIN
(或RIGHT OUTER JOIN
):与LEFT JOIN
相反,返回右表的所有记录和左表中匹配的记录。
-
如何使用聚合函数(如SUM、AVG、COUNT等)进行数据处理?
答: 例如,计算学生的总人数:`SELECT COUNT(*) FROM students`。
10、数据库设计与优化
- 请描述数据库设计的基本步骤,并解释每个步骤的作用。
答: 基本步骤包括需求分析、概念设计、逻辑设计、物理设计、实施以及维护。每个步骤都确保了数据库能够满足用户需求,同时保持高效、可靠和易于维护。 - 如何进行数据库性能优化?请给出一些具体的优化策略。
答: 优化策略包括建立合适的索引、避免全表扫描、优化查询语句、使用数据库分区、定期维护数据库(如更新统计信息、重建索引等)、调整数据库配置参数等。
11、安全性与事务处理
- 请描述SQL注入攻击的概念和如何防范?
答: SQL注入攻击是通过在应用程序的输入字段中插入恶意的SQL代码,从而控制应用程序与数据库的交互。防范方法包括使用参数化查询或预处理语句、对用户输入进行严格的验证和转义、最小权限原则等。
相关文章:
SqlServer(4)经典总结大全-技巧总结-数据开发-基本函数-常识整理-经典面试题
六、技巧 1、11,12的使用,在SQL语句组合时用的较多 “where 11” 是表示选择全部 “where 12”全部不选, 如: if strWhere !‘’ begin set strSQL ‘select count(*) as Total from [’ tblName ] where ’ strWhere …...
ArcGIS矢量裁剪矢量
一、利用相交工具 Arctoolbox工具一分析工具一叠加分析一相交...
pygame用chatgpt绘制3d沿x轴旋转的
import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 0), (100, 200, 0), (300, 100, 0)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…...
golang大小写规则的影响
目录 golang大小写的规则: 1、可见性(visibility): 2、包的导入和调用: 3、json序列化和反序列化: 4、结构体字段的导出和可见性: 5、方法和函数的导出和可见性 : 6、常量和变…...
基于Java在线考试系统系统设计与实现(源码+部署文档)
博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…...
如何应对复杂软件工程的开发流程?
应对复杂软件工程的开发流程通常需要一个结构化和系统化的方法。这种方法不仅包括采用合适的技术和工具,还涉及到项目管理、团队协作、需求分析、设计、实施、测试、部署和维护等多个方面。以下是一些关键步骤,以及如何将这些步骤应用于使用LabVIEW进行软…...
JAVA的NIO和BIO底层原理分析
文章目录 一、操作系统底层IO原理1. 简介2. 操作系统进行IO的流程 二、BIO底层原理1. 什么是Socket2. JDK原生编程的BIO 三、Java原生编程的NIO1. 简介2. NIO和BIO的主要区别3. Reactor模式4. NIO的三大核心组件5. NIO核心源码分析 一、操作系统底层IO原理 1. 简介 IO&#x…...
Python学习从0到1 day18 Python可视化基础综合案例 1.折线图
我默记这段路的酸楚,等来年春暖花开之时再赏心阅读 —— 24.3.24 python基础综合案例 数据可视化 — 折线图可视化 一、折线图案例 1.json数据格式 2.pyecharts模块介绍 3.pyecharts快速入门 4.数据处理 5.创建折线图 1.json数据格式 1.什么是json 2.掌握如何使用js…...
HTML网站的概念
目录 前言: 1.什么是网页: 2.什么是网站: 示例: 3.服务器: 总结: 前言: HTML也称Hyper Text Markup Language,意思是超文本标记语言,同时HTML也是前端的基础&…...
【微服务】Nacos(配置中心)
文章目录 1.AP和CP1.基本介绍2.说明 2.Nacos配置中心实例1.架构图2.在Nacos Server加入配置1.配置列表,加号2.加入配置3.点击发布,然后返回4.还可以编辑 3. 创建 Nacos 配置客户端模块获取配置中心信息1.创建子模块 e-commerce-nacos-config-client50002…...
比较AI编程工具Copilot、Tabnine、Codeium和CodeWhisperer
主流的几个AI智能编程代码助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。 你可能已经尝试过其中的一些,也可能还在不断寻找最适合自己或公司使用的编程助手。但是,这些产品都会使用精选代码示例来实现自我宣传…...
顺应互联网发展大潮流,红河农资招商火爆开启
顺应互联网发展大潮流,红河农资招商火爆开启 进入新世纪,生态农业建设成为了影响和改变农村、农业工作的重要领域。尤其是在互联网的快速发展之下,实现农业结构调整,推动互联网模式的发展,成为了当前生态农业发展的主流…...
网络七层模型之传输层:理解网络通信的架构(四)
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
微信小程序实现图片懒加载的4种方案
实现图片懒加载的意义 实现图片懒加载可以提高小程序的性能和用户体验,是微信小程序开发中非常重要的一项优化手段。微信小程序实现图片懒加载的目的主要有以下几点: 提高页面加载速度:图片通常是页面中最耗时的资源,如果一次性…...
各大pdf转word软件都用的哪家的ocr引擎?
国内一般的PDF软件一般都调用某国际PDF原厂的OCR接口,但这家公司是主要做PDF,在OCR方面并不专注,一些不是很复杂的场景还能应付得过来,复杂一点的效果就强差人意了,推荐用金鸣表格文字识别系统,它主要有以下…...
学习没有速成可言
那些声称几天就能让你精通软件的书籍,往往是夸大其词的宣传。学习软件需要时间和实践,没有什么快速的捷径可以让你在短时间内成为专家。 对于速成软件书,我个人持保留态度。它们可能提供一些基础知识和技巧,可以给初学者一个入门…...
快速上手Pytrch爬虫之爬取某应图片壁纸
一、前置知识 1 爬虫简介 网络爬虫(又被称作网络蜘蛛、网络机器人,在某些社区中也经常被称为网页追逐者)可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…...
如何在Apache Arrow中定位与解决问题
如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更,出现了一个 crash问题,底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题,在这篇文章中以实际工作中resize导致crash为例,引出如何…...
[ Linux ] git工具的基本使用(仓库的构建,提交)
1.安装git yum install -y git 2.打开Gitee,创建你的远程仓库,根据提示初始化本地仓库(这里以我的仓库为例) 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增(变…...
怎样去保证 Redis 缓存与数据库双写一致性?
解决方案 那么我们这里列出来所有策略,并且讨论他们优劣性。 先更新数据库,后更新缓存先更新数据库,后删除缓存先更新缓存,后更新数据库先删除缓存,后更新数据库 先更新数据库,后更新缓存 这种方法是不推…...
RuoYi-Vue若依框架-新增子模块启动后,前端页面报接口404
如何新建子模块可以参考RuoYi-Vue若依框架-如何新增子模块 我在新增依赖的时候提过版本号的问题,如果不是按照我的博客走的,然后接口报了404,可以选择添加父版本号,官方的参考文档是没写的,但添加了确实能解决这个问题…...
node.js 常见命令
1. npm init: 初始化一个新的Node.js项目,创建一个package.json文件。 2. npm install: 安装项目所需的所有依赖项。 3. npm run: 运行在package.json文件中定义的脚本。 4. node index.js: 运行一个Node.js文件。 5. node -v: 查看当前安装的Node.js版本号。 6. np…...
教育信创,重磅发布!Coremail联合飞腾发布全场景教育信创白皮书
3月28日,Coremail参与编制的《教育行业数字化自主创新 飞腾生态解决方案白皮书》正式发布。白皮书历时一年,由25所代表院校、66位专家,119家生态伙伴共同编写。 本次白皮书围绕教育数字化转型和信创人才培养两大领域,聚焦办公、教…...
滑动窗口_水果成篮_C++
题目: 题目解析: fruits[i]表示第i棵树,这个fruits[i]所表示的数字是果树的种类例如示例1中的[1,2,1],表示第一棵树 的种类是 1,第二个树的种类是2 第三个树的种类是1随后每一个篮子只能装一种类型的水果,我…...
线程的状态:操作系统层面和JVM层面
在操作系统层面,线程有五种状态 初始状态:线程被创建,操作系统为其分配资源。 可运行状态(就绪状态):线程被创建完成,进入就绪队列,参与CPU执行权的争夺。或因为一些原因,从阻塞状态唤醒的线程…...
在Isaac-sim中弧度转四元数以及四元数转弧度的问题
问题: 在Isaac-sim中如果采用set_world_pose()和get_world_pose()得到的都是四元数,如何将弧度转四元数,或者将四元数转为弧度是需要解决的一个问题, 这里的弧度是以x轴为0度,y轴为90度,逆时针方向逐渐增大…...
【计算机网络】高级IO模型
高级IO模型 一、 理解 IO二、认识五种高级 IO 模型1. 阻塞 IO2. 非阻塞IO3. 信号驱动 IO4. IO 多路转接5. 异步 IO 三、高级 IO 重要概念1. 阻塞和非阻塞2. 同步通信和异步通信 四、非阻塞 IOfcntl 一、 理解 IO 当我们调用系统接口 write、read 的时候,本质是把数…...
LabVIEW电动汽车直流充电桩监控系统
LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及,充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台,设计了一套电动汽车直流充电桩监控系统,能实时监测充电桩的温度、电压和电流,并进行数…...
前端学习<二>CSS基础——08-CSS属性:定位属性
CSS的定位属性有三种,分别是绝对定位、相对定位、固定定位。 position: absolute; <!-- 绝对定位 -->position: relative; <!-- 相对定位 -->position: fixed; <!-- 固定定位 --> 下面逐一介绍。 相对定位 相对定位:让…...
88. 合并两个有序数组(javascript)
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…...
做啥英文网站赚钱/阿里云域名注册万网
你好!有什么我可以帮助你的?...
网站建设公司果动/优化大师会员兑换码
"Reactive Programming是神马?" 互联网上有很多不是很友好的解释。维基百科 宽泛而玄乎。 Stackoverflow教科书式的解释非常不适合信任Reactive Manifesto 听起来像是给给项目经理或者是销售的汇报。 微软的 Rx 定义 "Rx Observables LINQ Schedu…...
工程建设期刊网站/模板建站代理
在root用户下,使用命令 #userdel -r meng ,提示meng用户正在登录。 在虚拟终端使用exit命令后,在终端中输入上述命令,依然提示meng用户正在登录。 解决方法; 创建用户时,使用 1.添加一个叫a的用户,同时创建它的主文件…...
做网站php的作用/免费企业网站建设流程
在画出来的图中左上方找: 文件———— 导出设置———— 左方属性里选渲染—— 分辨率设为300/600———— 右侧导出...
锐速做网站/郑州专业seo推荐
《JAVA 2核心技术 卷Ⅰ:基础知识》第七章:图形程序设计,读书笔记第二部分(7.6-7.8)。 主要内容包括:颜色、为文本设定特殊字体、图像。 一.颜色 Graphics2D类的setPaint方法可以为图形环境上的所…...
网站建设费用分类/百度优化点击软件
jleaksJava Resource Leaks Monitor,用于Java资源泄露检测,代码的GITHUB地址当程序库的作者向用户提供一个使用后需要释放资源的类,通常都苦恼如何保证用户的这个行为。Java的类不像C拥有析构函数,对于库的提供者,C程序…...