日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqlite和MySQL一些常用命令_sqlite3常用命令语法

發布時間:2023/12/14 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite和MySQL一些常用命令_sqlite3常用命令语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sqlite數據庫只用一個文件就ok,小巧方便,所以是一個非常不錯的嵌入式數據庫,SQLite大量的被用于手機,PDA,MP3播放器以及機頂盒設備。

Mozilla Firefox使用SQLite作為數據庫。

Mac計算機中的包含了多份SQLite的拷貝,用于不同的應用。

PHP將SQLite作為內置的數據庫。

Skype客戶端軟件在內部使用SQLite。

SymbianOS(智能手機操作平臺的領航)內置SQLite。

AOL郵件客戶端綁定了SQLite。

Solaris 10在啟動過程中需要使用SQLite。

McAfee殺毒軟件使用SQLite。

iPhones使用SQLite。

Symbian和Apple以外的很多手機生產廠商使用SQLite。

下面就sqlite中的常用命令和語法介紹

http://www.sqlite.org/download.html可下載不同操作系統的相關版本sqlite ?gedit

也可以使用火狐中的插件sqlite manager

新建數據庫

sqlite3 databasefilename

檢查databasefilename是否存在,如果不存在就創建并進入數據庫(如果直接退出,數據庫文件不會創建) ?如果已經存在直接進入數據庫 對數據庫進行操作

sqlite中命令:

以.開頭,大小寫敏感(數據庫對象名稱是大小寫不敏感的)

.exit

.help 查看幫助 針對命令

.database 顯示數據庫信息;包含當前數據庫的位置

.tables 或者 .table 顯示表名稱 ?沒有表則不顯示

.schema 命令可以查看創建數據對象時的SQL命令;

.schema databaseobjectname查看創建該數據庫對象時的SQL的命令;如果沒有這個數據庫對象就不顯示內容,不會有錯誤提示

.read FILENAME 執行指定文件中的SQL語句

.headers on/off ?顯示表頭 默認off

.mode list|column|insert|line|tabs|tcl|csv ? 改變輸出格式,具體如下

sqlite> .mode list

sqlite> select * from emp;

7369|SMITH|CLERK|7902|17-12-1980|800||20

7499|ALLEN|SALESMAN|7698|20-02-1981|1600|300|30

如果字段值為NULL 默認不顯示 也就是顯示空字符串

sqlite> .mode column

sqlite> select * from emp;

7369 ? ? ? ?SMITH ? ? ? CLERK ? ? ? 7902 ? ? ? ?17-12-1980 ?800 ? ? ? ? ? ? ? ? ? ? 20

7499 ? ? ? ?ALLEN ? ? ? SALESMAN ? ?7698 ? ? ? ?20-02-1981 ?1600 ? ? ? ?300 ? ? ? ? 30

7521 ? ? ? ?WARD ? ? ? ?SALESMAN ? ?7698 ? ? ? ?22-02-1981 ?1250 ? ? ? ?500 ? ? ? ? 30

sqlite> .mode insert

sqlite> select * from dept;

INSERT INTO table VALUES(10,'ACCOUNTING','NEW YORK');

INSERT INTO table VALUES(20,'RESEARCH','DALLAS');

INSERT INTO table VALUES(30,'SALES','CHICAGO');

INSERT INTO table VALUES(40,'OPERATIONS','BOSTON');

sqlite> .mode line

sqlite> select * from dept;

DEPTNO = 10

DNAME = ACCOUNTING

LOC = NEW YORK

DEPTNO = 20

DNAME = RESEARCH

LOC = DALLAS

DEPTNO = 30

DNAME = SALES

LOC = CHICAGO

DEPTNO = 40

DNAME = OPERATIONS

LOC = BOSTON

sqlite> .mode tabs

sqlite> select * from dept;

10 ACCOUNTING ?NEW YORK

20 RESEARCH ?DALLAS

30 SALES ?CHICAGO

40 OPERATIONS ?BOSTON

sqlite> .mode tcl

sqlite> select * from dept;

"10" "ACCOUNTING""NEW YORK"

"20" "RESEARCH""DALLAS"

"30" "SALES" ?"CHICAGO"

"40" "OPERATIONS""BOSTON"

sqlite> .mode csv

sqlite> select * from dept;

10,ACCOUNTING,"NEW YORK"

20,RESEARCH,DALLAS

30,SALES,CHICAGO

40,OPERATIONS,BOSTON

.separator "X" 更改分界符號為X

sqlite> .separator '**'

sqlite> select * from dept;

10**ACCOUNTING**"NEW YORK"

20**RESEARCH**DALLAS

30**SALES**CHICAGO

40**OPERATIONS**BOSTON

.dump ?TABLE? ? ? ? ? ? ?生成形成數據庫表的SQL腳本

.dump 生成整個數據庫的腳本在終端顯示

.output stdout ? ? ? ? ? 將輸出打印到屏幕 ?默認

.output filename ?將輸出打印到文件(.dump ?.output 結合可將數據庫以sql語句的形式導出到文件中)

.nullvalue STRING ? ? ? ?查詢時用指定的串代替輸出的NULL串 默認為.nullvalue ''

字段類型:

數據庫中存儲的每個值都有一個類型,都屬于下面所列類型中的一種,(被數據庫引擎所控制)

NULL: 這個值為空值

INTEGER: 值被標識為整數,依據值的大小可以依次被存儲為1,2,3,4,5,6,7,8個字節

REAL: 所有值都是浮動的數值,被存儲為8字節的IEEE浮動標記序號.

TEXT: 文本. 值為文本字符串,使用數據庫編碼存儲(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB數據,如何輸入就如何存儲,不改變格式.

值被定義為什么類型只和值自身有關,和列沒有關系,和變量也沒有關系.所以sqlite被稱作 弱類型 數據庫

數據庫引擎將在執行時檢查、解析類型,并進行數字存儲類型(整數和實數)和文本類型之間的轉換.

SQL語句中部分的帶雙引號或單引號的文字被定義為文本,

如果文字沒帶引號并沒有小數點或指數則被定義為整數,

如果文字沒帶引號但有小數點或指數則被定義為實數,

如果值是空則被定義為空值.

BLOB數據使用符號X'ABCD'來標識.

但實際上,sqlite3也接受如下的數據類型:

smallint 16位的整數。

interger 32位的整數。

decimal(p,s) 精確值p是指全部有幾個十進制數,s是指小數點后可以有幾位小數。如果沒有特別指定,則系統會默認為p=5 s=0 。

float ?32位元的實數。

double ?64位元的實數。

char(n) ?n 長度的字串,n不能超過 254。

varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。

graphic(n) 和 char(n) 一樣,不過其單位是兩個字節, n不能超過127。這個形態是為了支持兩個字節長度的字體,如中文字。

vargraphic(n) 可變長度且其最大長度為n的雙字元字串,n不能超過2000

date ?包含了 年份、月份、日期。

time ?包含了 小時、分鐘、秒。

timestamp 包含了 年、月、日、時、分、秒、千分之一秒。

SQLite包含了如下時間/日期函數:

datetime() 產生日期和時間 ? ?無參數表示獲得當前時間和日期

sqlite> select datetime();

2012-01-07 12:01:32

有字符串參數則把字符串轉換成日期

sqlite> select datetime('2012-01-07 12:01:30');

2012-01-07 12:01:30

select date('2012-01-08','+1 day','+1 year');

2013-01-09

select datetime('2012-01-08 00:20:00','+1 hour','-12 minute');

2012-01-08 01:08:00

select datetime('now','start of year');

2012-01-01 00:00:00

select datetime('now','start of month');

2012-01-01 00:00:00

select datetime('now','start of day');

2012-01-08 00:00:00

select datetime('now','start of week');錯誤

select datetime('now','localtime');

結果:2006-10-17 21:21:47

date()產生日期

sqlite> select date('2012-01-07 12:01:30');

2012-01-07

同理 有參和無參

select date('now','start of year');

2012-01-01

select date('2012-01-08','+1 month');

2012-02-08

time() 產生時間

select time();

03:14:30

select time('23:18:59');

23:18:59

select time('23:18:59','start of day');

00:00:00

select time('23:18:59','end of day');錯誤

在時間/日期函數里可以使用如下格式的字符串作為參數:

YYYY-MM-DD

YYYY-MM-DD HH:MM

YYYY-MM-DD HH:MM:SS

YYYY-MM-DD HH:MM:SS.SSS

HH:MM

HH:MM:SS

HH:MM:SS.SSS

now

其中now是產生現在的時間。

日期不能正確比較大小,會按字符串比較,日期默認格式 dd-mm-yyyy

select hiredate from emp order by hiredate;

17-11-1981

17-12-1980

19-04-1987

20-02-1981

22-02-1981

strftime() 對以上三個函數產生的日期和時間進行格式化

strftime()函數可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉換成其它形式的字符串。 strftime(格式, 日期/時間, 修正符, 修正符, …) ?select strftime('%d',datetime());

它可以用以下的符號對日期和時間進行格式化:

%d 在該月中的第幾天, 01-31

%f 小數形式的秒,SS.SSS

%H 小時, 00-23

%j 算出某一天是該年的第幾天,001-366

%m 月份,00-12

%M 分鐘, 00-59

%s 從1970年1月1日到現在的秒數

%S 秒, 00-59

%w 星期, 0-6 (0是星期天)

%W 算出某一天屬于該年的第幾周, 01-53

%Y 年, YYYY

%% 百分號

select strftime('%Y.%m.%d %H:%M:%S','now');

select strftime('%Y.%m.%d %H:%M:%S','now','localtime');

結果:2006.10.17 21:41:09

select hiredate from emp

order by strftime('%Y.%m.%d %H:%M:%S',hiredate); 正確

select strftime('%Y.%m.%d %H:%M:%S',hiredate) from emp

order by strftime('%Y.%m.%d %H:%M:%S',hiredate); 錯誤

算術函數

abs(X) 返回給定數字表達式的絕對值。

max(X,Y[,...]) 返回表達式的最大值。 ?組函數 max(列名)

sqlite> select max(2,3,4,5,6,7,12);

12

min(X,Y[,...]) 返回表達式的最小值。

random() 返回隨機數。

sqlite> select random();

3224224213599993831

round(X[,Y]) 返回數字表達式并四舍五入為指定的長度或精度。

字符處理函數

length(X) 返回給定字符串表達式的字符個數。

lower(X) 將大寫字符數據轉換為小寫字符數據后返回字符表達式。

upper(X) 返回將小寫字符數據轉換為大寫的字符表達式。

substr(X,Y,Z) 返回表達式的一部分。 ?從Y開始讀Z個字符 ?Y最小值1

sqlite> select substr('abcdef',3,3);

cde

quote(A) 給字符串加引號

sqlite> select quote('aaa');

'aaa'

條件判斷函數

ifnull(X,Y) ?如果X為null 返回Y

select ifnull(comm,0) from emp;

0

300

500

0

1400

集合函數

avg(X) 返回組中值的平均值。

count(X) 返回組中項目的數量。

max(X) 返回組中值的最大值。

min(X) 返回組中值的最小值。

sum(X) 返回表達式中所有值的和。

其他函數

typeof(X) 返回數據的類型。

sqlite> select typeof(111);

integer

sqlite> select typeof('233');

text

sqlite> select typeof('2012-12-12');

text

sqlite> select typeof('223.44');

text

sqlite> select typeof(223.44);

real

last_insert_rowid() 返回最后插入的數據的ID。

sqlite_version() 返回SQLite的版本。

sqlite> select sqlite_version();

3.7.9

change_count() 返回受上一語句影響的行數。

last_statement_change_count()

create table emp_bak select * from EMP;不能在sqlite中使用

插入記錄

insert into table_name values (field1, field2, field3...);

查詢

select * from table_name;查看table_name表中所有記錄;

select * from table_name where field1='xxxxx'; 查詢符合指定條件的記錄;

select .....

from table_name[,table_name2,...]

where .....

group by....

having ....

order by ...

select .....

from table_name ?inner join | left outer join | right outer join table_name2

on ...

where .....

group by....

having ....

order by ...

子查詢:

select *

from EMP m

where SAL>

(select avg(SAL) from EMP where DEPTNO=m.DEPTNO);

支持case when then 語法

update EMP

set SAL=

(

case

when DEPTNO=10 and JOB='MANAGER' then SAL*1.1

when DEPTNO=20 and JOB='CLERK' then SAL*1.2

when DEPTNO=30 ?then SAL*1.1

when DEPTNO=40 ?then SAL*1.2

else SAL

END

);

select ENAME,

case DEPTNO

when 10 then '后勤部'

when 20 then '財務部'

when 30 then '內務部門'

else '其他部門'

end as dept

from EMP;

支持關聯子查詢 ?in后面的語法中可以有limit(mysql不可以)

select *

from emp e

where e.EMPNO in

(

select empno

from EMP

where deptno=e.DEPTNO

order by SAL desc

limit 0,2

);

支持表和表之間的數據合并等操作

union 去重復 ?union all 不去掉重復

select deptno from emp

union

select deptno from dept;

select deptno from emp

union all

select deptno from dept;

在列名前加distinct也是去重復

sqlite> select distinct deptno from emp;

刪除

delete from table_name where ...

刪除表

drop table_name; ? ? 刪除表;

drop index_name; ? ? 刪除索引;

修改

update table_name

set xxx=value[, xxx=value,...]

where ...

建立索引

如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:

create index film_title_index on film(title);

意思是針對film資料表的name字段,建立一個名叫film_name_index的索引。這個指令的語法為

CREATE [ UNIQUE ] ?NONCLUSTERED ?INDEX index_name

ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )

create index index_name on table_name(field_to_be_indexed);

一旦建立了索引,sqlite3會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕后自動發生的,無須使用者特別指令。

其他sqlite的特別用法

sqlite可以在shell底下直接執行命令:

sqlite3 film.db "select * from emp;"

輸出 HTML 表格:

sqlite3 -html film.db "select * from film;"

將數據庫「倒出來」:

sqlite3 film.db ".dump" > output.sql

利用輸出的資料,建立一個一模一樣的數據庫(加上以上指令,就是標準的SQL數據庫備份了):

sqlite3 film.db < output.sql

在大量插入資料時,你可能會需要先打這個指令:

begin;

插入完資料后要記得打這個指令,資料才會寫進數據庫中:

commit;

sqlite> begin;

sqlite> insert into aaaa values('aaa','333');

sqlite> select * from aaaa;

2|sdfds

sdfsd|9

2012-12-12|13:13:13

aaa|333

sqlite> rollback;

sqlite> select * from aaaa;

2|sdfds

sdfsd|9

2012-12-12|13:13:13

創建和刪除視圖

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

DROP VIEW view_name

create view ?e as

select avg(SAL) avgsal,DEPTNO

from EMP

group by DEPTNO;

select ENAME,EMP.DEPTNO,SAL,avgsal

from EMP inner join e

on EMP.DEPTNO=e.DEPTNO

where SAL>avgsal;

練習員工表:

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE DEPT

(

DEPTNO int(2) not null,

DNAME varchar(14),

LOC ? ?varchar(13)

);

INSERT INTO "DEPT" VALUES(10,'ACCOUNTING','NEW YORK');

INSERT INTO "DEPT" VALUES(20,'RESEARCH','DALLAS');

INSERT INTO "DEPT" VALUES(30,'SALES','CHICAGO');

INSERT INTO "DEPT" VALUES(40,'OPERATIONS','BOSTON');

CREATE TABLE EMP

(

EMPNO ? ?int(4) not null,

ENAME ? ?varchar(10),

JOB ? ? ?varchar(9),

MGR ? ? ?int(4),

HIREDATE date,

SAL ? ? ?int(7 ),

COMM ? ? int(7 ),

DEPTNO ? int(2)

);

INSERT INTO "EMP" VALUES(7369,'SMITH','CLERK',7902,'17-12-1980',800,NULL,20);

INSERT INTO "EMP" VALUES(7499,'ALLEN','SALESMAN',7698,'20-02-1981',1600,300,30);

INSERT INTO "EMP" VALUES(7521,'WARD','SALESMAN',7698,'22-02-1981',1250,500,30);

INSERT INTO "EMP" VALUES(7566,'JONES','MANAGER',7839,'02-04-1981',2975,NULL,20);

INSERT INTO "EMP" VALUES(7654,'MARTIN','SALESMAN',7698,'28-09-1981',1250,1400,30);

INSERT INTO "EMP" VALUES(7698,'BLAKE','MANAGER',7839,'01-05-1981',2850,NULL,30);

INSERT INTO "EMP" VALUES(7782,'CLARK','MANAGER',7839,'09-06-1981',2450,NULL,10);

INSERT INTO "EMP" VALUES(7788,'SCOTT','ANALYST',7566,'19-04-1987',3000,NULL,20);

INSERT INTO "EMP" VALUES(7839,'KING','PRESIDENT',NULL,'17-11-1981',5000,NULL,10);

INSERT INTO "EMP" VALUES(7844,'TURNER','SALESMAN',7698,'08-09-1981',1500,0,30);

INSERT INTO "EMP" VALUES(7876,'ADAMS','CLERK',7788,'23-05-1987',1100,NULL,20);

INSERT INTO "EMP" VALUES(7900,'JAMES','CLERK',7698,'03-12-1981',950,NULL,30);

INSERT INTO "EMP" VALUES(7902,'FORD','ANALYST',7566,'03-12-1981',3000,NULL,20);

INSERT INTO "EMP" VALUES(7934,'MILLER','CLERK',7782,'23-01-1982',1300,NULL,10);

CREATE TABLE SALGRADE

(

GRADE int,

LOSAL int,

HISAL int

);

INSERT INTO "SALGRADE" VALUES(1,700,1200);

INSERT INTO "SALGRADE" VALUES(2,1201,1400);

INSERT INTO "SALGRADE" VALUES(3,1401,2000);

INSERT INTO "SALGRADE" VALUES(4,2001,3000);

INSERT INTO "SALGRADE" VALUES(5,3001,9999);

COMMIT;

總結

以上是生活随笔為你收集整理的sqlite和MySQL一些常用命令_sqlite3常用命令语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。