Sqlite常用命令及基本知識


 
 
常用命令:
.sqlite3 --從dos命令模式進入sqlite命令行
.quit --退出sqlite命令行,回到dos命令
.databases  --查看有哪些數據庫
.tables  --查看有哪些表
.schema 表名 --查看指定的表的DDL(表結構)
 
sqlite數據庫中特殊的表    (系統自帶表)sqlite_master
select name from sqlite_master where type='table'; 

 字符串連接用 ||

--sqlite中查找所有表對應的select count(*) 語句:

select  'select count(*) from '||name||';' from sqlite_master where type='table';

 

 

 
創建/打開指定名稱的數據庫 .sqlite3 test.db (dos命令行輸入,有則打開指定名稱的數據庫,沒有則創建指定名稱的數據)
 
導入數據: .read 數據文件(如 .read a.sql,數據庫腳本文件放到數據庫名.db相同路徑下)

 

 

 
刪除數據庫表  drop table actor(表名字);
 
 
建表語句:
 
--基本建表1
CREATE TABLE employees (
    emp_no int(11) NOT NULL,
    birth_date date NOT NULL,
    first_name varchar(14) NOT NULL,
    last_name varchar(16) NOT NULL,
    gender char(1) NOT NULL,
    hire_date date NOT NULL,
    PRIMARY  KEY (emp_no)
)
 
--基本建表2
CREATE TABLE actor (
    actor_id smallint(5) NOT NULL,
    first_name  varchar(45) NOT NULL,
    last_name varchar(45) NOT NULL,
    last_update  timestamp NOT NULL DEFAULT (datetime('now','localtime')),
    PRIMARY  KEY (actor_id)
);
 
--建表同時建索引
CREATE TABLE salaries (
    emp_no int(11) NOT NULL,
    salary int(11) NOT NULL,
    from_date date NOT NULL,
    to_date date NOT NULL,
    PRIMARY  KEY (emp_no, from_date)
);
CREATE INDEX idx_emp_no ON salaries (emp_no);
 
--如果表已經存在就不創建
CREATE TABLE IF NOT EXISTS film (film_id smallint(5) NOT NULL);
 
注意,對於已經建好的表,sqlite中不能通過Alter table 來添加外健。

https://www.nowcoder.com/questionTerminal/aeaa116185f24f209ca4fa40e226de48

 
--花式建表
1.快速復制/備份一個表的數據
create table actor_backup20180106 as select * from actor;
注意:這種方式會把默認值、主鍵約束、NOT NULL等等這些給玩丟了。
2.已知表A,並且已經有數據,創建表B,並且表B的字段都(或部分)來源於表A,並導入表A對應的數據
解法1:
CREATE TABLE actor_name (
    first_name  varchar(45) NOT NULL,
    last_name varchar(45) NOT NULL
);
insert into actor_name  select first_name, last_name from actor;
解法2:
create table actor_name as select first_name,last_name from actor;
解法2更方便,但是會丟失Not Nul 主鍵等信息。
 
--插入數據
用inset into 表名 select插入子查詢的結果集
inset into 表名 values (....),(.....),(......)
inset into 表名(字段1,字段2,字段3....)   values (....),(.....),(......)
 
--插入單條數據
INSERT INTO employees VALUES (1,datetime('1986-01-12 04:00'),'Luoke','Li','M',datetime('2010-01-12 04:00'));
--批量插入數據(多條Insert)
BEGIN TRANSACTION;
INSERT INTO actor  VALUES (1,'PENELOPE','GUINESS',datetime('2006-02-15 12:34:33'));
INSERT INTO actor  VALUES (2,'NICK','WAHLBERG',datetime('2006-02-15 12:34:33'));
COMMIT;
 
--用一條sql語句就批量插入多條數據-方法1
INSERT INTO actor(actor_id,first_name,last_name,last_update)
select 3,'Jones','Jim',datetime('2006-02-15 12:34:33')
UNION ALL
select 4,'DiLun','Bob',datetime('2006-02-15 12:34:33');
--用一條sql語句就批量插入多條數據-方法2
INSERT INTO actor values(5,'Luffy','MonkeyD',datetime('2006-02-15 12:34:33')),(6,'SuoLong','Luoluonua',datetime('2006-02-15 12:34:33'));
 
--用一條sql語句就批量插入多條數據並且不要插入已存在的數據(不能用replace)--方法1
INSERT INTO actor
select 5,'Luffy','MonkeyD',datetime('2006-02-15 12:34:33') where not exists(select * from actor where actor_id=5);
--用一條sql語句就批量插入多條數據並且不要插入已存在的數據(不能用replace)--方法2
在 SQLite 中,用 INSERT OR IGNORE 來插入記錄,或忽略插入與表內UNIQUE字段都相同的記錄
INSERT OR IGNORE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33');
 
用 INSERT OR REPLACE 來插入記錄,或更新替代與表內UNIQUE字段都相同的記錄
INSERT OR REPLACE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')
 
REPLACE   用法詳解
Sqlite3中replace語句用法詳解: http://blog.csdn.net/zhangjg_blog/article/details/23267761
 
 
創建索引:
CREATE UNIQUE INDEX uniq_idx_firstname on actor  (first_name); --創建唯一索引
CREATE INDEX idx_lastname on actor  (last_name); --創建普通索引
 
強制索引查詢--SQLite中,使用 INDEXED BY 語句進行強制索引查詢
SELECT * FROM salaries INDEXED BY idx_emp_no WHERE emp_no = 10005
 
 
創建視圖:
create view actor_name_view as select first_name as fist_name_v, last_name as last_name_v from actor;
等價於
CREATE VIEW actor_name_view (fist_name_v, last_name_v) AS  SELECT first_name, last_name FROM actor
 
--日期時間
select datetime('now','localtime'); --獲取系統當前時間

 

轉義字符如:

--' 默認情況下, '是字符串的邊界符, 如果在字符串中包含', 則必須使用兩個', 第1個'就是轉義符

select last_name||''''||first_name from employees;

(或SELECT last_name || "'" || first_name FROM employees;)

 

常用字符串函數:

length  replace   substr

replace函數的用法:replace('A','b','c') 用c替換字符串A中所有的b

例子:

select (length('10,A,B')-length(replace('10,A,B',",",""))/length(','));

函數:substr(string string,num start,num length)用法:
string為字符串;
start為起始位置;字符串的第一個字符的位置為1,不是從0開始計算
length為長度。

/*例如:獲取某個字符串中最后2個字母
select substr('abcdefg',length('abcdefg')-1,2);*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM