سؤال

لدي سؤال سكل بسيط.أريد أن جعل قاعدة بيانات العمود 3 ولدي التعليمات البرمجية التالية:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"

عندما أحاول استيراد ملف كسف بسيط مع عمودين (بريدديد و بوبميد) ، أحصل على "المتوقع 3 أعمدة من البيانات ولكن وجدت 2" خطأ.أريد أن يكون المفتاح تي 1 عددا صحيحا ، ويتم العد تلقائيا عند إضافة حقول جديدة.لا بد لي من وضع لا نول أمام المفتاح الأساسي لهذا العمل?

هل كانت مفيدة؟

المحلول

.import لا يدعم إعادة تشكيل الإدخال (باستثناء من إعداد الفاصل).تحتاج إلى استيراد ملف كسف إلى جدول مؤقت وإدراج ذلك في الجدول الحقيقي.هنا مثال جلسة:

$ cat a.csv 
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp; 
sqlite> select * from foo; 
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp; 

ترى أن يتم احتساب معرف يصل.وذلك لأن العمود الذي يحتوي على مفتاح أساسي صحيح من النوع يتم التعامل معه كاسم مستعار للصف الداخلي - وهو دائما رقم تصاعدي فريد.

نصائح أخرى

بدلا من insert استخدام

create table newtable as select  * from  footmp;

إنه أفضل وأسرع.

مع .version of Sqlite ( sqlite 3.7.15.2 2013-01-09 ) أنا على، ليس عليك الاستيراد إلى جدول مؤقت أولا.كل ما فعلته هو التأكد من تعيين فاصل قبل بدء الاستيراد.قمت بتحديد قيم المعرف لكل صف، لذلك، كان عمودي الأول في CSV مجموعة من الأعداد الصحيحة الفريدة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top