it-swarm.dev

إضافة عمود جديد مع قيد المفتاح الخارجي في أمر واحد

أحاول إضافة عمود جديد سيكون مفتاحًا أجنبيًا. لقد تمكنت من إضافة العمود وقيد المفتاح الخارجي باستخدام أمرين ALTER TABLE منفصلين:

    ALTER TABLE one
    ADD two_id integer;

    ALTER TABLE one
    ADD FOREIGN KEY (two_id) REFERENCES two(id);

هل هناك طريقة للقيام بذلك باستخدام أمر ALTER TABLE واحد بدلاً من اثنين؟ لم أستطع التوصل إلى أي شيء يعمل.

99
mushroom

كما هو الحال في كثير من الأحيان مع مسألة SQL ذات الصلة ، فإنه يعتمد على DBMS. تسمح لك بعض نظم إدارة قواعد البيانات بدمج عمليات جدول ALTER مفصولة بفواصل. فمثلا...

Informix بناء الجملة:

ALTER TABLE one
    ADD two_id INTEGER,
    ADD CONSTRAINT FOREIGN KEY(two_id) REFERENCES two(id);

بناء الجملة لـ IBM DB2 LUW مشابه ، يكرر الكلمة الأساسية ADD لكن (إذا قرأت الرسم البياني بشكل صحيح) لا يتطلب فاصلة لفصل العناصر المضافة.

Microsoft SQL Server بناء الجملة:

ALTER TABLE one
    ADD two_id INTEGER,
    FOREIGN KEY(two_id) REFERENCES two(id);

لا يسمح لك البعض الآخر بدمج عمليات ALTER TABLE مثل هذا. يسمح SQL قياسي فقط لعملية واحدة في عبارة ALTER TABLE ، لذلك في SQL قياسي ، يجب أن يتم ذلك في خطوتين.

144
Jonathan Leffler

في خادم MS-SQL:

ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)
62
sqladmin

ل SQL Server يجب أن يكون شيء من هذا القبيل

ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)
15
jausel

في خادم SQL MS:

مع تعريف المستخدم اسم المفتاح الخارجي

ALTER TABLE tableName
ADD columnName dataType,
CONSTRAINT fkName FOREIGN KEY(fkColumnName) 
   REFERENCES pkTableName(pkTableColumnName);

بدون تعريف المستخدم اسم المفتاح الخارجي

ALTER TABLE tableName
ADD columnName dataType,
FOREIGN KEY(fkColumnName) REFERENCES pkTableName(pkTableColumnName);
5
Sandeep Badikolu

في أوراكل :

ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_two_id REFERENCES two(id);
3
O.Badr

ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)

1
Arsman Ahmad

يمكنك أن تفعل ذلك مثل أدناه في SQL Server

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)
1
user2010014

PostgreSQL DLL لإضافة عمود FK:

ALTER TABLE one
ADD two_id INTEGER REFERENCES two;
1
Kshitij Bajracharya

بالنسبة إلى DB2 ، يكون بناء الجملة هو:

ALTER TABLE one ADD two_id INTEGER FOREIGN KEY (two_id) REFERENCES two (id);
1
Dan B.

2018 تحديث

إنه سؤال قديم إلى حد ما ولكن الناس ما زالوا يعودون إليه. في حال لم تساعدك الإجابات أعلاه ، تأكد من أنك تستخدم نفس نوع البيانات للعمود الجديد كمعرف للجدول الآخر.

في حالتي ، كنت أستخدم Laravel وأستخدم "عددًا صحيحًا غير موقَّع" لجميع معرفاتي نظرًا لعدم وجود نقطة وجود معرف سلبي LOL.

لذلك ، سوف يتغير استعلام SQL الخام كما يلي:

ALTER TABLE `table_name`
ADD `column_name` INTEGER UNSIGNED,
ADD CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES foreign_table_name(id);

آمل أن يساعد

0
Learner