ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน


2
ฉันจะหาค่ามัธยฐานของคอลัมน์ใน MySQL ได้อย่างไร
ฉันสามารถจินตนาการการทำเช่นนี้กับแบบสอบถามฐานข้อมูลที่สอง ครั้งแรกที่ค้นหาจำนวนแถวในฐานข้อมูลและที่สองเลือกที่มีORDER BYในคอลัมน์ที่ฉันสนใจและLIMIT X, 1ที่ X คือครึ่งหนึ่งของจำนวนแถว มีวิธีง่ายๆในการทำเช่นนี้กับแบบสอบถามเดียวเท่านั้นหรือไม่ ตอนนี้ฉันกำลังใช้ค่าเฉลี่ยในการคำนวณของฉัน แต่ฉันคิดว่าค่าเฉลี่ยจะดีกว่า ไม่มีขอบเขตบนค่าและพวกเขาถูกผูกไว้จากด้านล่างโดย 0 แก้ไข: ใช่ฉันหมายถึงการพูดว่า 'ค่ามัธยฐาน' แต่มีข้อผิดพลาดของสมองและค้นหา 'ค่าเฉลี่ย' ตอนนี้ฉันพบคำตอบที่stackoverflow แล้ว
10 mysql 

1
กราฟ SQL Server Deadlock - ล็อคตารางหน้าหรือแถว?
มีวิธีการถอดรหัสถ้าล็อคในกราฟการหยุดชะงักเป็นระดับตารางหน้าหรือแถว? ฉันมีข้อมูลทั้งหมดที่ฉันต้องการจากกราฟรวมถึงระดับการแยก (2) แต่ฉันก็อยากรู้สิ่งนี้เช่นกัน ขอบคุณทุกคนที่สามารถช่วยได้!

4
SQL Server เปลี่ยนชื่อตารางจากฐานข้อมูลอื่น
มีวิธีใดใน SQL Server ที่จะเปลี่ยนชื่อตารางในฐานข้อมูลอื่นหรือไม่? เมื่อคุณอยู่ในฐานข้อมูลปัจจุบันและย้ายข้อมูลไปยังฐานข้อมูลอื่นในตาราง TEMP แล้วเปลี่ยนชื่อตาราง TEMP ในฐานข้อมูลอื่นนั้น ฉันไม่ต้องการใช้ "USE [ฐานข้อมูล]" เนื่องจากชื่อฐานข้อมูลสามารถเปลี่ยนแปลงได้บนเซิร์ฟเวอร์ที่แตกต่างกัน ขอบคุณสำหรับความช่วยเหลือล่วงหน้า!

1
ฟังก์ชั่นเพื่อรับอินพุตอักขระและรูปแบบวันที่ส่งคืน (ที่มีอินพุตไม่ถูกต้อง)
ฉันต้องเขียนฟังก์ชั่นเพื่อรับตัวอักษรสตริงและกลับรูปแบบวันที่ ตัวอย่างเช่นการป้อนข้อมูลคือ 20120101 และฉันต้องการสิ่งนี้ 2012-01-01 ปัญหาคืออาจมีอินพุตที่ไม่ถูกต้องเช่น "2012ABCD" นี้ ในกรณีนั้นฉันต้องการให้ฟังก์ชันส่งคืนวันที่ที่แน่นอนเช่น 2020-01-01 สิ่งที่ฉันเขียนจนถึงตอนนี้คือ: Create Function ReturnDate (@date varchar(8)) Returns date as begin declare @result date set @result = (select convert(date , @date,111)) if(@@ROWCOUNT>0) return @result else return '2020-01-01' return @result end ไม่ทำงานและฉันไม่รู้วิธีจัดการส่วนที่สอง (เมื่ออินพุตไม่ถูกต้อง)

1
ทำไมเราไม่สามารถทำการเชื่อมต่อในฐานข้อมูลแบบกระจายเช่น Bigtable ได้?
จากคำตอบนี้ไปที่ "Google ใช้ฐานข้อมูลใด" : Bigtable ไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ ไม่รองรับการเชื่อมต่อและไม่รองรับการสืบค้นที่คล้ายกับ SQL ชัดเจนหรือไม่ ฉันไม่เข้าใจว่าทำไม

2
เปลี่ยนดัชนีอ้างอิงสำหรับ Foreign Key
ฉันมีสิ่งนี้: CREATE TABLE T1 ( Id INT ... ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id] ) CREATE TABLE T2 ( .... ,T1_Id INT NOT NULL ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id) ) เพื่อเหตุผลด้านประสิทธิภาพ (และการหยุดชะงัก) เหตุผลที่ฉันสร้างดัชนีใหม่บน T1 CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id) แต่ถ้าฉันตรวจสอบว่าดัชนีอ้างอิง FK ใดให้อ้างอิงไปยังดัชนีคลัสเตอร์ select ix.index_id, ix.name …

1
เหตุใดลำดับของ MS SQL Server จึงไม่มีพารามิเตอร์ ORDER เช่น Oracle
ในเอกสารประกอบของCREATE SEQUENCET-SQLคุณจะเห็นว่าCREATE SEQUENCEคำสั่งไม่มีORDERพารามิเตอร์ สำหรับการเปรียบเทียบเอกสาร Oracle สำหรับการCREATE SEQUENCEแสดงตัวเลือกORDER/ NOORDER: ORDER ระบุORDERเพื่อรับประกันว่าหมายเลขลำดับจะถูกสร้างขึ้นตามลำดับการร้องขอ ข้อนี้มีประโยชน์ถ้าคุณใช้หมายเลขลำดับเป็นเวลาประทับ คำสั่งที่รับประกันนั้นมักจะไม่สำคัญสำหรับลำดับที่ใช้สร้างคีย์หลัก ORDERจำเป็นสำหรับการรับประกันการสั่งซื้อเท่านั้นหากคุณใช้ Oracle Database กับ Real Application Clusters หากคุณใช้โหมดเอกสิทธิ์เฉพาะบุคคลหมายเลขลำดับจะถูกสร้างขึ้นตามลำดับเสมอ NOORDER ระบุNOORDERหากคุณไม่ต้องการรับประกันหมายเลขลำดับจะถูกสร้างขึ้นตามลำดับการร้องขอ นี่คือค่าเริ่มต้น Microsoft SQL Server มีข้อ จำกัด ในการสั่งซื้ออย่างมากSEQUENCEหรือไม่ หรือ Microsoft ไม่เห็นว่าสำคัญโดยทั่วไปใช่หรือไม่

4
ฉันจะแยกส่วนดัชนีเซิร์ฟเวอร์ SQL โดยเจตนาได้อย่างไร
ฉันต้องการสร้างเงื่อนไขดัชนีที่ไม่ดีอย่างตั้งใจบนฐานข้อมูลการทดสอบ SQL Server 2017 ที่ฉันมีเพื่อทำความเข้าใจสคริปต์การบำรุงรักษาเหล่านี้ให้ดีขึ้นหรือไม่ ดัชนีเซิร์ฟเวอร์ SQL และการบำรุงรักษาสถิติ มีวิธีที่รวดเร็ว / อัตโนมัติในการลดความสมบูรณ์ของดัชนีหรือเพิ่มการกระจายตัวของดัชนี? คุณรู้หรือไม่ว่าทรัพยากรที่มีประโยชน์ใด ๆ ที่ฉันสามารถทำได้เพื่อบรรลุเป้าหมายนี้?

2
เป็นไปได้ที่จะ PIVOT ในคำสั่ง LIKE
เป็นไปได้ไหมที่จะจัดกลุ่มตามองค์ประกอบ (ดังในCOLUMN LIKE='Value%') ในPIVOTตาราง? ฉันมีตาราง [DBT] [สถานะ] ซึ่งมีสถานะต่าง ๆ (ของฐานข้อมูลอินสแตนซ์ ฯลฯ ) และไม่ต้องการหมุน / ค้นหาค่า PROD และการทดสอบทั้งหมดเป็นค่าเดียว เช่นแทนที่จะมีคอลัมน์สำหรับสถานะProd, Prod ACC, Prod APP.. ฯลฯ ฉันจะมีเพียงหนึ่งคอลัมน์ที่มีค่าสำหรับและName LIKE 'Prod%'Name LIKE 'Test%' สิ่งที่ฉันมี: นิยามของตาราง CREATE TABLE [DBT].[Status]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED ( [ID] ASC …

1
ฉันจะหา FamilyGUID ของฐานข้อมูล exsting ได้อย่างไร
เมื่อรันRESTOREคำสั่งฉันเข้าใจว่า SQL Server ทำให้แน่ใจว่าฐานข้อมูลที่มีอยู่ไม่ได้ถูกเขียนทับโดยฐานข้อมูลอื่น REPLACEการตรวจสอบนี้สามารถข้ามได้โดยใช้ ฉันเข้าใจว่า SQL Server ใช้ไฟล์สำรองFamilyGUIDเพื่อตรวจสอบว่าฐานข้อมูลที่กำลังกู้คืนนั้นเหมือนกับฐานข้อมูลที่ถูกเขียนทับหรือไม่ ถูกต้องหรือไม่ ฉันเข้าใจว่าFamilyGUIDสามารถใช้ไฟล์สำรองข้อมูลได้ RESTORE headeronly FROM DISK = N'Q:\MyBackup.bak' แต่ฉันจะค้นหา FamilyGUID ของฐานข้อมูลที่ถูกเขียนทับได้อย่างไร

1
สำหรับเอาต์พุต xml path ('')
เมื่อฉันเรียกใช้ต่อไปนี้ select t.type from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') ฉันได้รับผลลัพธ์นี้ <type>Green</type> <type>Blue</type> <type>Red</type> ถ้าฉันเรียกใช้ต่อไปนี้ select t.type + '/' from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') ฉันได้รับผลลัพธ์นี้ Green/Blue/Red/ เหตุใดการเพิ่มการต่อข้อมูลในตัวเลือกที่นำไปสู่การลบแท็กประเภทและเอาต์พุตในหนึ่งบรรทัดในไฟล์ xml ใช้ SQL Server 2012

3
ทริกเกอร์ T-SQL เป็นวิธีที่ทำให้เกิดการเปลี่ยนแปลงที่เกิดขึ้นจริงเท่านั้น?
ฉันมีตารางทริกเกอร์ใน UPDATE และ INSERTที่เพิ่มแถวไปยังตารางอื่น จะต้องเพิ่มแถวต่อเมื่อมีการเปลี่ยนแปลงหนึ่งในสี่คอลัมน์ ฉันลองใช้ IF UPDATE (col) เพื่อทดสอบการเปลี่ยนแปลง แต่มีจุดบอด แค่ทดสอบว่ามีค่าบางอย่างเข้ามาฉันต้องไปให้ลึกกว่านี้ฉันต้องเปรียบเทียบค่าเก่ากับค่าใหม่เพื่อดูการเปลี่ยนแปลงที่แท้จริงเกิดขึ้น มันต้องทำงานกับทั้ง INSERT และ UPDATE ในกรณีของ UPDATE นั้นง่ายเพราะทั้งตารางที่ถูกแทรกและถูกลบมีค่าที่ฉันสามารถเปรียบเทียบได้ภายในทริกเกอร์ อย่างไรก็ตามสำหรับ INSERT เฉพาะตารางแทรกเท่านั้นที่มีค่า เพราะฉันต้องการทั้งหมดนี้ในทริกเกอร์เดียวกันฉันจะจัดการกรณี INSERT ได้อย่างไร นี่คือสคริปต์ของทริกเกอร์ที่ฉันต้องการแก้ไข: ALTER TRIGGER [dbo].[trATPerson_alter] ON [mydb].[dbo].[AT_Person] AFTER INSERT,UPDATE AS BEGIN SET NOCOUNT ON; -- Not all updates require a push IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR …
9 t-sql  trigger 

2
SELECT ลบแถวที่ตายแล้วเช่น VACUUM หรือไม่
ฉันเล่นซอVACUUMและสังเกตเห็นพฤติกรรมที่ไม่คาดคิดบางอย่างที่SELECTไอเอ็นจีแถวจากตารางดูเหมือนว่าจะลดงานที่VACUUMต้องทำหลังจากนั้น ทดสอบข้อมูล หมายเหตุ: autovacuum ถูกปิดใช้งาน CREATE TABLE numbers (num bigint); ALTER TABLE numbers SET ( autovacuum_enabled = 'f', toast.autovacuum_enabled = 'f' ); INSERT INTO numbers SELECT generate_series(1, 5000); ทดลอง 1 ตอนนี้เราทำการอัพเดทในทุกแถว UPDATE numbers SET num = 0; และเมื่อเราวิ่งVACUUM (VERBOSE) numbers;เราได้ INFO: vacuuming "public.numbers" INFO: "numbers": removed 5000 row versions in …

3
เหตุใดแบบสอบถามนี้จึงไม่มีส่วนคำสั่ง FROM ไม่ใช่ข้อผิดพลาด
ดังนั้นเราจึงมีแบบสอบถามที่มีคิวรีย่อยที่มีการพิมพ์ผิดอยู่ มันหายไปจากอนุประโยค แต่เมื่อคุณเรียกใช้มันไม่ผิดพลาด! ทำไม!? SELECT 1 ,r.id ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56' ,GETDATE() ,1 ,'Y' ,'N' ,oldItem.can_view ,oldItem.can_update FROM Role r JOIN RoleObject oldReport ON r.customer_id = oldReport.customer_id JOIN RoleItem oldItem ON oldReport.id = oldItem.role_object_id AND r.id = oldItem.role_id WHERE r.id NOT IN (SELECT role_id WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56') AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.