أنا عندى عمود معين عايز أتأكد أن البيانات فيه مش هتتكرر
فعملت unique constraint عليه
بس لاحظت أن البيانات داخل الجدول تم ترتيبها أبجديا بناءا على هذا العمود
سؤالى هل لازم ال unique constraint يعمل ترتيب ولا ممكن أخليه ميعملش ترتيب
شكرا
أنا عندى عمود معين عايز أتأكد أن البيانات فيه مش هتتكرر
فعملت unique constraint عليه
بس لاحظت أن البيانات داخل الجدول تم ترتيبها أبجديا بناءا على هذا العمود
سؤالى هل لازم ال unique constraint يعمل ترتيب ولا ممكن أخليه ميعملش ترتيب
شكرا
لا ، ليس شرط أن يتم الترتيب .. يمكن أن تضع Unique بدون أن يتأثر ترتيب البيانات ،
في الغالب عند عمل Index على عمود معين من نوع Unique ، فإن هناك خيار لترتيب عمود Index ، ولكن هذا لا يؤثر على ظهور البيانات حسب علمي بل من أجل تسريع البحث فقط . المسؤول عن ظهورها بشكل مرتب هو الجزء Order By في نهاية الاستعلام .
و الله أعلم .
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
أخي حسب معلوماتي ان الجدول بمجرد أنك تحدد له Primary Key or Unique Column فإن السيكوال سيرفر بيعمل عليه Clustered Index يعني البيانات حتظهر على حسب ترتيب هذا الحقل
والله أعلم
فلسطين .. سوريا ..بورما ......وماذا بعد ؟!
سابقا
medo_programming
موقعي : www.alkhayat-it.com
مواضيع مهمه
-----------------------------------------------:
أنا كتبت الكود ده
alter table roles
add constraint UC_Roles unique(RoleName)
وفتحت الجدول لقيت البيانات اترتبت بناءا على عمود RoleName
فهل كان لازم يتم الترتيب ولا كنت ممكن اكتب حاجة متخليهوش يرتب البيانات
تم تعديل هذه المشاركة بواسطة java for ever في 16 مايو 2011 في 02:11
السلام عليكم
ال 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شكرا أخى طارق على الرد
فعلا بعد تجريب الكود الترتيب متغيرش
لكن أنا بعد كده عملت أول عمود مفتاح أساسى فى الجدول اللى انت عملته Rolex
لقيت البيانات اترتبت بتاءا على تانى عمود
فده معناه أيه
شكرا
راجعت ملف تعليمات 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