数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

3
用MySQL实现版本控制系统
我知道这里和这里都曾有人问过这个问题,但是我有相同的想法,但可能的实现方式有所不同,我需要一些帮助。 最初,我的blogstories表具有以下结构: | Column | Type | Description | |-----------|-------------|------------------------------------------------| | uid | varchar(15) | 15 characters unique generated id | | title | varchar(60) | story title | | content | longtext | story content | | author | varchar(10) | id of the user that originally wrote the …

2
为什么标量值函数需要执行权限而不是选择权限?
我想知道为什么对于标量值函数,我必须授予用户执行权而不仅仅是选择权? 同时,表值函数仅在具有选择权限或db_datareader成员资格的情况下才能正常工作。 为了更清楚,这里是我的示例:我需要一个对数据库具有只读权限的用户。所以我创建了一个名为的用户,testUser并为其指定了db_datareader成员资格。然后我创建了一个名为的表值函数fn_InlineTable。一切都很棒。testUser全天运行此SQL select * from dbo.fn_InlineTable 然后我需要一个标量函数,所以我创建了一个叫做的标量函数fn_ScalarTest。 testUser无法运行此SQL Select dbo.fn_ScalarTest(1) 可以理解的是:这是因为我没有授予“ testUser”执行权限fn_ScalarTest。 我的问题是:基于此链接/programming/6150888/insert-update-delete-with-function-in-sql-server,说FUNCTION不能使用a来执行修改数据库状态的操作。那么,为什么不让标量函数与相同的“ SELECT”权限一起使用,而不是执行权限呢? 我希望我的问题有道理。谢谢。



2
不可搜索的持久化计算列上的索引
我有Address一个名为的表,该表具有一个称为的持久计算列Hashkey。该列是确定性的,但不精确。它具有不可搜索的唯一索引。如果运行此查询,则返回主键: SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey 我得到这个计划: 如果我强制索引,我会得到更糟糕的计划: 如果我尝试同时使用索引和查找,则会收到错误消息: 由于此查询中定义的提示,查询处理器无法生成查询计划。重新提交查询而不指定任何提示,也无需使用SET FORCEPLAN 这仅仅是因为它不精确吗?我以为如果坚持下去没关系吗? 有没有一种方法可以使该索引可查询而不将其设为非计算列? 有人在此链接到任何信息吗? 我无法发布实际的表创建,但是这是一个具有相同问题的测试表: drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) ) + …

2
同时调用同一函数:死锁是如何发生的?
new_customerWeb应用程序每秒调用我的函数几次(但每个会话仅调用一次)。它要做的第一件事就是锁定customer表(执行“如果不存在,请插入”-的简单变体upsert)。 我对文档的理解是,对的其他调用new_customer应该简单地排队,直到所有先前的调用完成为止: LOCK TABLE获取表级别的锁,必要时等待释放任何冲突的锁。 为什么有时会陷入僵局呢? 定义: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where not exists(select * from customer where customer_secret=secret) returning customer_id ) insert …

4
为什么要使密钥明确?
我对数据库这个主题很陌生,因此听起来似乎很无知,但是我很好奇为什么应该在表中将键显式化。这主要是为了告诉用户给定的列值(希望)在每一行中都是唯一的吗?即使没有提及,唯一性仍然应该存在。

4
如何将SQL Server死锁报告中的键转换为值?
我有一个死锁报告,告诉我发生了涉及waitresource =“ KEY:9:72057632651542528(543066506c7c)”的冲突,并且我可以看到: <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> 在<resource-list>中。我希望能够找到密钥的实际值(例如,id = 12345)。我需要使用什么SQL语句来获取该信息?

1
sp_cursoropen和并行性
我遇到了一个查询似乎无法解决的性能问题。 我从游标定义中拉出了查询。 该查询需要几秒钟才能执行 SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

1
“ LIMIT 0,1”和“ LIMIT 1”之间有什么区别吗?
我最近偶然发现了示例代码,这些代码与这些符号有所不同。 SELECT * FROM table LIMIT 0, 1 SELECT * FROM table LIMIT 1 如果我没记错的话,第一个参数应被视为偏移量,这两个查询的目的是将选择范围限制为 table 忽略偏移量时是否有负面影响/如何首先排除偏移量?还是我误解了查询?
15 mysql 

2
避免原子事务中的唯一违规
可以在PostgreSQL中创建原子事务吗? 考虑我有这些行的表类别: id|name --|--------- 1 |'tablets' 2 |'phones' 并且列名具有唯一的约束。 如果我尝试: BEGIN; update "category" set name = 'phones' where id = 1; update "category" set name = 'tablets' where id = 2; COMMIT; 我越来越: ERROR: duplicate key value violates unique constraint "category_name_key" DETAIL: Key (name)=(tablets) already exists.


1
阅读部分更新的行?
假设我有两个查询,分别在SSMS中的两个会话中运行: 第一届会议: UPDATE Person SET Name='Jonny', Surname='Cage' WHERE Id=42 第二届会议: SELECT Name, Surname FROM Person WITH(NOLOCK) WHERE Id > 30 该SELECT语句是否可能读取半更新的行,例如带有Name = 'Jonny'和的行Surname = 'Goody'? 查询几乎在单独的会话中同时执行。

2
查询列出数据库的加密证书
使用什么证书来加密实例上的每个数据库。 我可以使用以下方法获取数据,但是如何编写查询 USE master GO -- this provides the list of certificates SELECT * FROM sys.certificates -- this provides the list of databases (encryption_state = 3) is encrypted SELECT * FROM sys.dm_database_encryption_keys WHERE encryption_state = 3; 我注意到sys.certifcates.thumbprint和sys.dm_database_encryption_keys.encryptor_thumbprint列包含相同的数据。

2
减少varchar列的大小对数据库文件有什么影响?
我们数据库中有许多表,这些VARCHAR(MAX)表中的列VARCHAR(500)(或比max小得多)足以满足需要。自然,我想清理它们,并将尺寸减小到更合理的水平。我了解的“方法”是:我的问题是更改这些列会对磁盘上​​的页面和现存内容产生什么影响?(那里有很多关于增长一列时会发生什么的信息,但是很难找到收缩一列时会发生什么的信息。) 有些表的行数非常小,因此我不担心更改的成本,但有些表却很大,并且担心它们可能会被重组并导致大量阻塞/停机。实际上,我只想一种估计维护时段的方法。通常,我想更好地了解这种情况下数据库引擎的行为。 提前致谢! 编辑: 我正在查看20个表,尽管其中只有一半的行数大于1,000。最大的行将近一百万行。犯规最严重的是一张有350,000行和4 VARCHAR(MAX)列的表,可以缩小到该VARCHAR(500)水平。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.