الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

unique constraint

بدأه java for ever في 14 مايو 2011 · 6 رد · 722 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنا عندى عمود معين عايز أتأكد أن البيانات فيه مش هتتكرر

فعملت unique constraint عليه

بس لاحظت أن البيانات داخل الجدول تم ترتيبها أبجديا بناءا على هذا العمود

سؤالى هل لازم ال unique constraint يعمل ترتيب ولا ممكن أخليه ميعملش ترتيب

شكرا

#2

لا ، ليس شرط أن يتم الترتيب .. يمكن أن تضع Unique بدون أن يتأثر ترتيب البيانات ،

في الغالب عند عمل Index على عمود معين من نوع Unique ، فإن هناك خيار لترتيب عمود Index ، ولكن هذا لا يؤثر على ظهور البيانات حسب علمي بل من أجل تسريع البحث فقط . المسؤول عن ظهورها بشكل مرتب هو الجزء Order By في نهاية الاستعلام .

و الله أعلم .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

أخي حسب معلوماتي ان الجدول بمجرد أنك تحدد له Primary Key or Unique Column فإن السيكوال سيرفر بيعمل عليه Clustered Index يعني البيانات حتظهر على حسب ترتيب هذا الحقل

والله أعلم

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#4

أنا كتبت الكود ده

alter table roles

add constraint UC_Roles unique(RoleName)

وفتحت الجدول لقيت البيانات اترتبت بناءا على عمود RoleName

فهل كان لازم يتم الترتيب ولا كنت ممكن اكتب حاجة متخليهوش يرتب البيانات

تم تعديل هذه المشاركة بواسطة java for ever في 16 مايو 2011 في 02:11

#5

السلام عليكم

ال unique constraint لاعلاقة له بترتيب الجدول بغض النظر عن كيفية ظهور البيانات لديك بعد اضافة unique constraint .

لذا اذا اردت الحصول على ترتيب معين يجب عليك استخدام order by (اعتقد حتى بوجود clustered index لايوجد ضمان 100% ان يتم الترتيب حسب هذا الفهرس مع ان الغالب يتم الترتيب حسبه)

وجرب هذا الكود للتأكد من unique constraint

 
USE tempdb
GO

IF OBJECT_ID('dbo.roleX', 'U') IS NOT NULL
  DROP TABLE dbo.roleX
GO

CREATE TABLE dbo.roleX
(
	c1 int NOT NULL, 
	c2 varchar(20) NULL, 

)
GO


insert into roleX values(11,'8')
insert into roleX values(2,'7')
insert into roleX values(3,'4')
insert into roleX values(5,'2')
insert into roleX values(6,'1')
insert into roleX values(16,'11')

SELECT *  FROM roleX


alter table  dbo.roleX
add   constraint UC_roleXs unique(c2)


go 

SELECT *  FROM roleX
#6

شكرا أخى طارق على الرد

فعلا بعد تجريب الكود الترتيب متغيرش

لكن أنا بعد كده عملت أول عمود مفتاح أساسى فى الجدول اللى انت عملته Rolex

لقيت البيانات اترتبت بتاءا على تانى عمود

فده معناه أيه

شكرا

#7

راجعت ملف تعليمات SQL server فوجدت بخصوص Unique مايلي :

When you create a UNIQUE constraint, a unique nonclustered index is created to enforce a UNIQUE constraint by default

اي يتم عمل index وبالتالي يتم استخدامه في استرجاع البيانات .

لكن مرة اخرى ليس بالضرورة استخدام هذا الفهرس دائما في استرجاع البيانات وانما ال Query optimizer يختار انسب واسرع طريقة لاسترجاع البيانات وقد تختلف من استعلام لاخر .

لذا اذا اردت الحصول على ترتيب معين يجب عليك استخدام order by

تم تعديل هذه المشاركة بواسطة TareqVB في 18 مايو 2011 في 10:30

مواضيع مشابهة