מה זה ה-CLI
sqlite3 הוא ה-shell הרשמי לשורת הפקודה שמגיע עם SQLite. הוא פותח קובץ מסד נתונים, נותן לכם שורת פקודה, ומאפשר להריץ עליו SQL. בלי שרת, בלי התחברות, בלי תצורה: רק קובץ הרצה וקובץ נתונים.
תשתמשו בו לבדיקות מהירות, לשאילתות חד-פעמיות, להצגת סכמות ולייבוא. זו הדרך המהירה ביותר לבחון מסד נתונים בלי לכתוב קוד אפליקציה.
$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>
אם mydata.db עדיין לא קיים, SQLite תיצור אותו ברגע שתבצעו את השינוי הראשון. הרצה של sqlite3 בלי שם קובץ פותחת מסד נתונים בזיכרון חד-פעמי.
הרצת SQL בשורת הפקודה
ברגע שאתם בתוך ה-shell, הקלידו SQL וסיימו כל פקודה בנקודה-פסיק. ה-shell מחכה לנקודה-פסיק הזו: אם לוחצים Enter בלעדיה, הוא רק מציג שורת המשך.
הנקודה-פסיק היא הסימן "סיימתי, תריצו את זה". אם שוכחים אותה, ה-shell ימתין עם שורת ...>. הקלידו ; בשורה חדשה כדי לסיים.
פקודות נקודה הן לא SQL
כל דבר שמתחיל ב-. הוא פקודת נקודה: הוראה ל-shell עצמו, לא למנוע ה-SQL. הן לא לוקחות נקודה-פסיק והן עובדות רק בתוך ה-shell של sqlite3.
sqlite> .tables
books
sqlite> .schema books
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
year INTEGER
);
sqlite> .help
הקומץ שתשתמשו בו כל הזמן:
.tables: מציגה כל טבלה במסד הנתונים הנוכחי..schema [table]: מציגה את פקודת ה-CREATE TABLEשל טבלה אחת או של כולן..databases: מציגה את קובצי מסד הנתונים המצורפים..mode <format>: משנה את אופן ההצגה של תוצאות שאילתות..headers on: מציגה שמות עמודות מעל תוצאות השאילתות..read file.sql: מריצה קובץ SQL..exitאו.quit: יציאה מה-shell.
.help מדפיסה את הרשימה המלאה. יש עשרות, אבל תסתמכו על אולי עשר מהן.
להפוך את הפלט לקריא
פלט ברירת המחדל מופרד בקווים אנכיים ואין בו כותרות: בסדר לסקריפטים, מכוער לקריאה. שתי פקודות נקודה מתקנות את זה:
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id title year
-- ----------- ----
1 Dune 1965
2 Neuromancer 1984
מצבים שימושיים נוספים:
.mode box: מצייר טבלה עם מסגרת Unicode. יפה לצילומי מסך..mode csv: מופרד בפסיקים, טוב להזרמה לכלים אחרים..mode json: פלט JSON, אובייקט אחד לכל שורה..mode line: עמודה אחת בכל שורה, שימושי כשהשורות רחבות.
ההגדרות מתאפסות בכל הפעלה של ה-shell. כדי להפוך אותן לקבועות, שימו אותן בקובץ ~/.sqliterc, ו-sqlite3 יטען אותו בהפעלה.
ייבוא וייצוא של CSV
ל-CLI יש תמיכה מובנית ב-CSV. עברו למצב CSV, ואז עשו .import לקובץ לתוך טבלה:
sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;
אם הטבלה לא קיימת, .import יוצרת אחת ומשתמשת בשורה הראשונה כשמות עמודות. אם היא קיימת, השורה הראשונה נחשבת לנתונים אלא אם מעבירים --skip 1.
בכיוון ההפוך, מפנים את הפלט לקובץ:
sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout
.output filename שולחת כל תוצאת שאילתה שבאה אחריה לקובץ הזה, עד שחוזרים עם .output stdout. זה אותו מנגנון בין אם מייצאים CSV, JSON או הצגה גולמית של הסכמה.
הרצת קובצי SQL
לכל דבר ארוך יותר מכמה פקודות, שימו את ה-SQL בקובץ והריצו אותו. בתוך ה-shell:
sqlite> .read setup.sql
או מהטרמינל הרגיל, בלי להיכנס ל-shell בכלל:
$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"
הצורה השנייה מריצה שאילתה אחת ויוצאת: מושלם לסקריפטים של shell או לבדיקות מהירות. שלבו אותה עם הגדרות .mode דרך הדגל -cmd אם אתם צריכים פלט מעוצב:
$ sqlite3 -header -column mydata.db "SELECT * FROM books;"
בדיקה של מסד נתונים לא מוכר
כשמישהו נותן לכם קובץ .db ואין לכם מושג מה יש בו, זו השגרה:
$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;
.schema בלי ארגומנט מציגה כל CREATE TABLE, CREATE INDEX ו-CREATE TRIGGER בקובץ. .indexes מציגה אינדקסים לכל טבלה. חמש דקות ב-shell יגידו לכם על מסד נתונים יותר ממה שכל README בדרך כלל יגיד.
לתמונת מצב טקסטואלית מלאה שאפשר ליצור מחדש במקום אחר, השתמשו ב-.dump:
sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout
זה כותב סקריפט SQL שיוצר מחדש את מסד הנתונים במלואו, סכמה ונתונים, כשמזינים אותו בחזרה דרך sqlite3.
יציאה מה-shell
שלוש דרכים לצאת, כולן שקולות:
sqlite> .exit
sqlite> .quit
או לחצו Ctrl+D ב-macOS וב-Linux (Ctrl+Z ואז Enter ב-Windows). השינויים שלכם כבר שמורים: SQLite מבצעת commit לכל פקודה כשהיא רצה, אלא אם התחלתם טרנזקציה במפורש.
הבא: כלים גרפיים ל-SQLite
ה-CLI מהיר וניתן לכתיבת סקריפטים, אבל לפעמים רוצים ללחוץ ולעבור בין טבלאות, למיין עמודות ולערוך שורות באופן חזותי. יש כמה כלים גרפיים טובים ל-SQLite, וזה העמוד הבא.
שאלות נפוצות
איך פותחים מסד נתונים עם ה-SQLite CLI?
הריצו sqlite3 mydata.db מהטרמינל. אם הקובץ לא קיים, SQLite יוצרת אותו ברגע שכותבים את הטבלה הראשונה. הרצה של sqlite3 בלי שם קובץ פותחת מסד נתונים זמני בזיכרון שנעלם כשיוצאים.
איך יוצאים מה-shell של sqlite3?
הקלידו .exit או .quit ולחצו Enter. שתיהן עובדות אותו דבר. ברוב המערכות גם Ctrl+D (או Ctrl+Z ואז Enter ב-Windows) סוגר את ה-shell.
מה הן פקודות נקודה ב-SQLite?
פקודות נקודה הן פקודות מובנות של ה-shell שמתחילות ב-., כמו .tables, .schema, .mode ו-.import. הן לא SQL: הן הוראות ל-CLI עצמו, ולכן הן לא צריכות נקודה-פסיק בסוף והן עובדות רק בתוך ה-shell של sqlite3.
איך מריצים קובץ SQL ב-SQLite CLI?
השתמשו ב-.read filename.sql מתוך ה-shell, או הזרימו אותו מבחוץ עם sqlite3 mydata.db < filename.sql. שתי הדרכים מריצות את הפקודות לפי הסדר מול מסד הנתונים הפתוח.