数据库初级入门sqlite3版本
0.數(shù)據(jù)庫大綱
數(shù)據(jù)庫是什么 ?
如何在在命令行使用SQL語句操作數(shù)據(jù)庫 ?
如何在C/C++程序中操作數(shù)據(jù)庫
1.數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)及數(shù)據(jù)庫系統(tǒng)
數(shù)據(jù)庫是一個存儲數(shù)據(jù)(電子化表格)的倉庫.
數(shù)據(jù)庫, 簡單來說可以看做是一個電子化的文件柜,—> 存儲電子文件的工具,
用戶可文件中的數(shù)據(jù)進行 , 增 , 刪 , 改 , 查等操作.
其實我們常說的"數(shù)據(jù)庫" 值的是 “數(shù)據(jù)管理系統(tǒng)”.
數(shù)據(jù)庫(DataBase) :存儲數(shù)據(jù)(電子化表格)的倉庫.
數(shù)據(jù)庫管理系統(tǒng)(DBMS DataBase Management System) : 數(shù)據(jù)庫對外操作數(shù)據(jù)的接口.
數(shù)據(jù)庫系統(tǒng)(DBS DataBase System) : 帶有數(shù)據(jù)庫的計算機系統(tǒng), 一般由數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng)
(及其開發(fā)工具),相關(guān)的硬件,軟件和各類人員組成.
數(shù)據(jù)庫系統(tǒng) 包含 數(shù)據(jù)庫 和 數(shù)據(jù)庫管理系統(tǒng).
數(shù)據(jù)庫管理系統(tǒng)(DBMS)是為數(shù)據(jù)庫設(shè)計的計算機軟件,一般都是可以對數(shù)據(jù)進行, 增 , 刪 , 改 , 查等操作.
我們數(shù)據(jù)庫(DB) 和 數(shù)據(jù)庫管理系統(tǒng)(DBMS) 之間的關(guān)系和現(xiàn)實中 :
? excel中學(xué)生表(多個表) 和 excel關(guān)系.
1.關(guān)系型數(shù)據(jù)庫(Relational Database)
關(guān)系型數(shù)據(jù)庫是創(chuàng)建在關(guān)系模型(E-R模型)基礎(chǔ)上的數(shù)據(jù)庫(數(shù)據(jù)和數(shù)據(jù)是存在關(guān)系的)關(guān)系 ? 表格
表 是行和列的形式組織起來的數(shù)據(jù)的集合;
關(guān)系型數(shù)據(jù)庫是由多個表組成的數(shù)據(jù)庫.
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yACgTkaP-1667307229748)(…/3-pic/image-20221101093019425.png)]
行 : 一條完整的記錄 , 包含多個不同的屬性.
列 : 具有相同屬性的數(shù)據(jù)集合 .
表中的每一行稱為一條記錄 , 一列稱為一個字段(屬性), 每一列的標題稱為字段名.
如果給關(guān)系型數(shù)據(jù)庫中的每一個關(guān)系取一個名字 , 則一個有n個字段的關(guān)系表可以表示為 :
? 關(guān)系表名(字段1 , 字段2 , 字段3 , … , 字段n);
? 如 : 學(xué)生信息表(學(xué)號 , 姓名 , 地址 , 班級)
常用的關(guān)系型數(shù)據(jù)庫(數(shù)據(jù)庫管理系統(tǒng)有很多)
? Oracle
? Mysql
? Sqlite3 輕量級的開源的關(guān)系型數(shù)據(jù)庫 , 很適合在嵌入式設(shè)備上使用
? SQL server
? DB2
關(guān)系型表格如何創(chuàng)建 ?
E-R模型(可以描述現(xiàn)實生活中的關(guān)系模型)
實體-關(guān)系模型
實體-關(guān)系模型圖 ,由三個部分組成 :
? 實體 : 客觀存在的事物, 用矩形表示 , 如 : 學(xué)生 ,成績
? 聯(lián)系 : 實體之間的聯(lián)系, 用菱形表示 , 如 : 考試
? 屬性 : 實體所具有的某一個屬性 ,用橢圓表示 ,如 : 學(xué)號, 姓名
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ij9jBgZd-1667307229751)(…/3-pic/image-20221101095015125.png)]
一般來說 ,一個實體就會對應(yīng)一個表格 ,實體的屬性就是對應(yīng)表格中的字段 ,多個表格可以通過 主鍵 和 外鍵相互聯(lián)系
-
主鍵
關(guān)系型數(shù)據(jù)庫中一條記錄中有若干個屬性 ,若一個屬性能唯一的標識一條記錄.
該屬性就可以設(shè)置成一個主鍵.
如 :
? 學(xué)生信息表(學(xué)號 ,姓名 ,地址 ,班級)
? 其中每一個學(xué)生的學(xué)號是唯一的, 學(xué)號就是學(xué)生表中的一個主鍵.
? 課程表(課程編號 ,任課老師 ,開課時間)
? 其中的課程編號是唯一的,課程編號就是課程表中的一個主鍵
成績表中單一的一個屬性無法唯一標識一條記錄 , 學(xué)號 和 科目的組合可以
唯一標識一條記錄 , 主鍵可以是屬性的集合.
-
外鍵
在當前表中不是主鍵 ,但是在其他表中是主鍵.
成績表中的學(xué)號不是成績表的主鍵 ,但是他和學(xué)號表中的學(xué)號是對應(yīng)的,
并且學(xué)生表中的學(xué)號是學(xué)生表的主鍵 ,則把成績表中的學(xué)號叫做學(xué)生表的外鍵.
主鍵 和 外鍵主要是維護關(guān)系數(shù)據(jù)的完整性.
? a . 主鍵能在當前表中唯一標識一條一條記錄.
? b.外鍵是用于和另外一張表的關(guān)聯(lián).
2.關(guān)系型數(shù)據(jù)庫語言 SQL語言
SQL (Structtured Query Language)結(jié)構(gòu)化的查詢語言 ;
是一種通用的功能強大的關(guān)系型數(shù)據(jù)庫語言 .
結(jié)構(gòu)化的查詢語言包含六個部分 :
數(shù)據(jù)查詢語言 DQL Data Quary Language
從數(shù)據(jù)庫中獲取/查詢數(shù)據(jù)(SELECT)
用來操作數(shù)據(jù)庫中的用戶數(shù)據(jù) ,包括增加數(shù)據(jù)(INSERT) ,刪除數(shù)據(jù)(DELETE) ,
修改數(shù)據(jù)(UPDATE)
確保DML語句的作業(yè)及時的更新到數(shù)據(jù)庫中;
數(shù)據(jù)控制語言 DCL
數(shù)據(jù)定義語言 DDL Data Define Language
用來操作數(shù)據(jù)庫中的元數(shù)據(jù)
包括創(chuàng)建一個表 ,刪除一個表 , 修改一個表中的字段.
數(shù)據(jù)查詢語言 DQL Data Quary Language
? 從數(shù)據(jù)庫中獲取/查詢數(shù)據(jù)(SELECT)
數(shù)據(jù)庫的操作語言 DML Data Manipulation Language
? 用來操作數(shù)據(jù)庫中的用戶數(shù)據(jù) ,包括增加數(shù)據(jù)(INSERT) ,刪除數(shù)據(jù)(DELETE) ,
? 修改數(shù)據(jù)(UPDATE)
數(shù)據(jù)定義語言 DDL Data Define Language
? 用來操作數(shù)據(jù)庫中的元數(shù)據(jù)
? 包括創(chuàng)建一個表 ,刪除一個表 , 修改一個表中的字段.
所有的SQL語句都是在命令行中執(zhí)行的 執(zhí)行sqlite3命令就要進入sqlite3命令行 sqlite3 .help .quit .exit 退出sqlite3的程序(1) 創(chuàng)建一個sqlite數(shù)據(jù)庫(里面沒有數(shù)據(jù))對象
終端 :
sqlite3 數(shù)據(jù)庫對象名字 //打開或創(chuàng)建一個數(shù)據(jù)庫如 : sqlite3 test.db通過SQL語句操作數(shù)據(jù)庫都是在sqlite3的命令行程序中 :
注意 :
a.在sqlite3命令下面 ,SQL語句以分號(" ; ")結(jié)束
b.SQL語句支持大小寫 ,但是在實際使用中建議使用大寫 ;
? 因為所有的語句在執(zhí)行的時候 ,都是先轉(zhuǎn)換為大寫的形式.
(2) 在數(shù)據(jù)庫對象(test.db)中創(chuàng)建一個表
CREATE TABLE : 用來創(chuàng)建一個關(guān)系表
語法 :
CREATE TABLE 表名(列名1 數(shù)據(jù)類型 "約束",列名2 數(shù)據(jù)類型 "約束",列名3 數(shù)據(jù)類型 "約束",...列名n 數(shù)據(jù)類型 "約束" );表名 : 數(shù)據(jù)庫中關(guān)系表的名字 列名 : 關(guān)系表中的字段名 數(shù)據(jù)類型 : 說明字段中的數(shù)據(jù)的類型integer(size) 此字段必須為整數(shù) size規(guī)定數(shù)字的最大的位數(shù)int(size)smallint(size)...decimal(size,d)容納帶小數(shù)的數(shù)字,size規(guī)定數(shù)字的最大位數(shù),d表示小數(shù)點右側(cè)的最大位數(shù)floatdoublerealchar(size) 固定從長度的字符串 ,size規(guī)定字符串的長度varchar(size) 可變長度的字符串,size規(guī)定字符串的最大長度textdata 日期2022/11/12022-11-1約束 :NOT NULL 此字段不能為空UNIQUE 此字段唯一(不能重復(fù))PRIMARY KEY 主鍵 ,主鍵必須是 NOT NULL AND UNIQUEFOREGIN KEY 外鍵 ,這一列在其他表中是主鍵,在自己的表中不是主鍵CHECK 用于限制數(shù)據(jù)的范圍CHECK SCORE>=0 AND SCORE<=100例子 : 在test.db中創(chuàng)建一個學(xué)生表
? STUINFO(學(xué)號 ,名字 ,地址 ,分數(shù))
CREATE TABLE STUINFO(NUM int(4) PRIMARY KEY,NAME varchar(255) NOT NULL,ADDR varchar(255) NOT NULL,SCORE real(4) CHECK(SCORE>=0 AND SCORE<=100) ); CREATE TABLE STUINFO(NUM int(4) PRIMARY KEY,NAME varchar(255) NOT NULL,ADDR varchar(255) NOT NULL,SCORE real(4) CHECK(SCORE>=0 AND SCORE<=100));CREATE TABLE STU(NUM int(4) PRIMARY KEY,NAME varchar(255) NOT NULL,ADDR varchar(255) NOT NULL,SCORE real(4) CHECK(SCORE>=0 AND SCORE<=100));查詢數(shù)據(jù)庫中的表格
.table查看表格的結(jié)構(gòu)
.schema刪除數(shù)據(jù)庫中的一個表
語法 :
DROP TABLE 表名;如 : DROP TABLE STUTEST;修改表的結(jié)構(gòu) :
a . 修改表名
ALTER TABLE 表名 RENAME TO 新名字;如 : ALTER TABLE STU RENAME TO STUINFO;b . 增加字段
ALTER TABLE 表名 ADD 字段名 字段類型;如 : ALTER TABLE STUINFO ADD TEL INT;//在STUINFO中增加一個新的字段(3) 向表中插入新行(一條新的記錄)
INSERT INFO : 用于向表格插入新行
語法 :
INSERT INFO 表名 VALUES(值1,值2,...,值n); INSERT INFO 表名(字段1,字段2,...) VALUES(值1,值2,...,值n);如 : INSERT INTO STUINFO VALUES(1,"zhangsan","cs",88,10086);INSERT INTO STUINFO(NUM,NAME,ADDR,SCORE) VALUES(2,"lisi","cs",89);(4) SELECT用于從表中選取數(shù)據(jù) ,把結(jié)果列舉出來
語法 :
SELECT 列名1,列名2... FROM 表名 WHERE 列 運算符 值; SELECT * FROM 表名;//查看表中所有的信息如 : SELECT * FROM STUINFO;INSERT INTO STUINFO VALUES(3,"wangwu","bj",68,10000); INSERT INTO STUINFO VALUES(4,"zhaoliu","jx",99,119);運算符 :
= 等于 <> 不等于 > 大于 < 小于 BETWEEN ANDSELECT * FROM STUINFO WHERE NUM=1;//查看學(xué)號為1的學(xué)生信息SELECT * FROM STUINFO WHERE NUM<>1;//查看學(xué)號不為1的學(xué)生信息SELECT * FROM STUINFO WHERE NUM>3;//查看學(xué)號大于3的學(xué)生信息//查看學(xué)生表中學(xué)號為2-4之間的學(xué)生信息SELECT * FROM STUINFO WHERE NUM BETWEEN 2 AND 4; WHERE 表示條件查詢?nèi)绻卸鄠€條件 :AND 并且OR 或者//查看學(xué)號為2或者電話為10086的學(xué)生信息SELECT * FROM STUINFO WHERE NUM=2 OR TEL=10086;限定 + 排序SELECT * FROM 表名 ORDER BY 字段 ASC/DESC//查看學(xué)生表中根據(jù)分數(shù)降序排序的前三條記錄SELECT * FROM STUINFO ORDER BY SCORE DESC LIMIT 3;查找模糊值(like)//查找姓zhang的學(xué)生信息SELECT NAME,NUM,TEL FROM STUINFO WHERE NAME LIKE 'zhang%';SELECT NAME,NUM,TEL FROM STUINFO WHERE NAME LIKE '%i%';(5) 多表查詢–多表連接
CREATE TABLE KCB(NUM INT,KCH INT PRIMARY KEY,NAME VARCHAR,SCORE REAL); INSERT INTO KCB VALUES(1,1,"yuwen",89); INSERT INTO KCB VALUES(1,2,"shuxue",68); INSERT INTO KCB VALUES(1,3,"yingyu",70);語法 :
SELECT 表名.列名1,表名.列名2... FROM 表名1,表名2 WHERE 列 運算符 值;如果在多表查詢中不指定連接條件,就會自動的連接,導(dǎo)致將一個表中所有的行都連接到另一個表中所有的行上面 --- 卡迪爾積 如果第一個表中有50行,第二個表中有10行,得到的結(jié)果就有500 多表查詢的時候,實際上是從產(chǎn)生的"卡迪爾積"的結(jié)果中得到滿足條件的記錄. SELECT STUINFO.NUM,STUINFO.NAME,STUINFO.ADDR,KCB.NUM,KCB.KCH,KCB.SCORE FROM STUINFO,KCB;SELECT STUINFO.NUM,STUINFO.NAME,STUINFO.ADDR,KCB.NUM,KCB.KCH,KCB.SCORE FROM STUINFO,KCB WHERE STUINFO.NUM=KCB.NUM; .header on //列舉結(jié)果的時候,會顯示表頭 .mode colum //按照列的方式顯示結(jié)果這樣看起來會順眼一些SQL語句 ,需要掌握的有 :
創(chuàng)建一個表 CREATE TABLE 刪除一個表 DROP TABLE 修改一個表的元數(shù)據(jù) ALTTER TABLE 查詢數(shù)據(jù) SELECT 增加表中的用戶數(shù)據(jù) INSERT INTO 刪除表中的用戶數(shù)據(jù) DELETE FROM 修改表中的用戶數(shù)據(jù) UPDATE4.數(shù)據(jù)庫對C/C++的API接口
通過C/C++程序去操作數(shù)據(jù)庫
如何通過API函數(shù)接口 ,執(zhí)行SQL語句
Sqlite3的API函數(shù)接口的核心部分 :
? 兩大對象 和 八大函數(shù)
-
兩大對象
數(shù)據(jù)庫連接對象(The Database Connection Object)
數(shù)據(jù)庫連接句柄/數(shù)據(jù)庫自己的文件描述符 ,表示一個已經(jīng)打開的數(shù)據(jù)庫
sqlite3 * 代表你打開的那一個sqlite3的數(shù)據(jù)庫文件(test.db);
后續(xù)對數(shù)據(jù)庫的所有操作都需要通過這個連接對象.
SQL語句對象(The prepare Statement Object)
sqlite3_stmt
就是一條準備好的SQL語句.
操作數(shù)據(jù)庫的標準語言就是SQL語句 ,在這里 ,使用準備好的SQL語句對象
表示的SQL語句去操作數(shù)據(jù)連接對象表示的數(shù)據(jù)庫.
-
利用SQL語句操作數(shù)據(jù)庫的流程(八大函數(shù))
1.建立連接
2.打開/創(chuàng)建一個數(shù)據(jù)
sqlite3_open();//打開或創(chuàng)建一個sqlite3的數(shù)據(jù)庫連接對象3.利用SQL語句對象操作數(shù)據(jù)庫
sqlite3_prepare_v2();//準備一個SQL語句對象 sqlite3_bind_*();//綁定參數(shù) sqlite3_step();//執(zhí)行sql語句 sqlite3_column();//輸出查詢到的數(shù)據(jù)庫的數(shù)據(jù) sqlite3_finalize();//釋放資源,銷毀SQL語句對象sqlite3_exec();4.關(guān)閉數(shù)據(jù)庫
sqlite3_close();//關(guān)閉一個數(shù)據(jù)庫連接對象
5.具體的API函數(shù)的使用
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hipXwlnD-1667980048382)(…/3-pic/image-20221102102404172.png)]
(1) 打開數(shù)據(jù)
sqlite3_open
sqlite3 * 代表你打開的那一個sqlite3的數(shù)據(jù)庫文件(test.db) ,
后續(xù)對數(shù)據(jù)的所有操作都需要通過這個連接對象.
SQLITE_API int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ );filename : 要打開的sqlite3的數(shù)據(jù)庫名字(帶路徑)ppDb : 二級指針,用來保存打開的數(shù)據(jù)庫的連接對象(連接句柄)ppdb指向的內(nèi)存是用來保存打開的數(shù)據(jù)庫對象的地址.返回值 :成功 返回SQLITE_OK失敗 返回其他值(2) 關(guān)閉一個sqlite3數(shù)據(jù)庫連接對象
sqlite3_close
SQLITE_API int sqlite3_close(sqlite3*);參數(shù)為你要關(guān)閉的數(shù)據(jù)庫指針(3) 關(guān)于SQL語句對象的API函數(shù)(準備)
sqlite3_stmt 這個結(jié)構(gòu)體來描述一個SQL語句對象
我們的應(yīng)用程序都是通過SQL語句對象去發(fā)送SQL語句的.
sqlite3_stmt * stmt;//SQL語句對象的指針 sqlite3_prepare_v2();//準備一個SQL語句 SQLITE_API int sqlite3_prepare_v2( sqlite3 *db, //數(shù)據(jù)庫連接對象,語句作用在哪一個數(shù)據(jù)庫上const char *zSql, //要執(zhí)行的原始的sql語句的字符串形式 int nByte, //原始sql語句的長度 sqlite3_stmt **ppStmt, //OUT: 用來保存解析后的SQL語句對象 const char **pzTail //OUT: 指向原始的sql語句中未使用的部分 );nByte : 原始sql語句的長度(原始語句可以包含多條SQL語句)<0 :編譯到zSql指向的sql語句的第一個'\0'為止.>0 :編譯到zSql指向的sql語句的nByte指定的字節(jié)為止.=0 :什么都不編譯.ppStmt : 二級指針,用來保存解析后的SQL語句對象的地址要改變指針變量的值,指針不在作用范圍內(nèi),只能間接訪問,把指針變量的地址傳入函數(shù),在函數(shù)的內(nèi)部就可以改變指針變量的值.在函數(shù)內(nèi)部,可能會讓指針變量指向一個準備好的SQL語句對象.pzTail :二級指針,用來指向原始的SQL語句總未使用的部分(如果不需要,也就是說zSql指向的字符串中只有一條SQL語句,則可以指定為NULL);可以實現(xiàn)一個字符串中寫多條SQL語句,準備一條語句后,指針指向的位置為未使用的部分.sqlite3_stmt * stmt;//SQL語句對象的指針const char *p = NULL;sqlite3_prepare_v2(test.db,str,-1,&stmt,&p);在函數(shù)執(zhí)行完畢后,stmt指向準備好的SQL語句對象p指向str中未使用的部分.返回值 :成功 返回SQLITE_OK失敗 返回其他值(4) 執(zhí)行一條準備好的SQL語句(SQL語句對象)
sqlite3_step
SQLITE_API int sqlite3_step(sqlite3_stmt*);stmt : 指針,指向你準備好的SQL語句對象,也是你要執(zhí)行的SQL語句對象返回值 :成功 返回SQLITE_DONE失敗 返回其他值(5) 釋放資源
sqlite3_finalize
SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);在prepare的時候,很有可能讓stmt指針指向了動態(tài)分配的內(nèi)存空間,通過函數(shù)釋放所有的資源.
-
<1> pzTail :二級指針,用來指向原始的SQL語句總未使用的部分(如果不需要,也就是
說zSql指向的字符串中只有一條SQL語句,則可以指定為NULL); -
<2> 從標準輸入往數(shù)據(jù)庫中添加數(shù)據(jù)
-
<3> 讀取文件數(shù)據(jù)并添加到數(shù)據(jù)庫中
-
<4> 通過綁定索引值往數(shù)據(jù)庫中添加數(shù)據(jù)
(6) 一步查詢的執(zhí)行操作(sqlite3_exec)
sqlite3_exec()接口[sqlite3_prepare_v2 , sqlite3_step , sqlite3_finalize ]集合,他可以
讓應(yīng)用程序運行多個SQL語句 ,而不必使用大量的C語言代碼.
SQLITE_API int sqlite3_exec( sqlite3*, //數(shù)據(jù)庫連接對象 const char *sql, //是一條你要執(zhí)行的SQL語句 int (*callback)(void*,int,char**,char**), //回調(diào)函數(shù),只有在SELECT的時候才有用 void *, //回調(diào)函數(shù)的第一個參數(shù) char **errmsg //出錯信息的指針 ); int (*callback)(void*,int,char**,char**)函數(shù)指針,執(zhí)行你要執(zhí)行的函數(shù),函數(shù)的返回值為int,有四個參數(shù)當調(diào)用sqlite3_exec 去執(zhí)行SELECT語句的時候,就會執(zhí)行這個回調(diào)函數(shù),主要作用是處理SELECT的結(jié)果信息. int (*callback)(void*,int,char**,char**)回調(diào)函數(shù)參數(shù)的詳細信息 :第一個參數(shù)是指針,可以傳入用戶自己的數(shù)據(jù)第二個參數(shù)是執(zhí)行SELECT語句后,查詢到結(jié)果的列數(shù)第三個參數(shù)是一個指向字符串的指針數(shù)組,就是結(jié)果數(shù)據(jù)的每一列信息第四個參數(shù)是一個指向字符串的指針數(shù)組,就是結(jié)果數(shù)據(jù)每一列的表頭信息sqlite3_exec參數(shù)詳解 :
第一個參數(shù)是你要操作的數(shù)據(jù)連接對象 第二個參數(shù)是以分號分隔的SQL的原始語句第三個參數(shù)如果為空,表示沒有回到函數(shù),如果不為空,在執(zhí)行SELECT語句的時候 會調(diào)用回調(diào)函數(shù),回調(diào)函數(shù)主要是處理SELECT查詢到的結(jié)果第三四個參數(shù)作為回調(diào)函數(shù)的第個參數(shù)(作用用戶自定義)第五個參數(shù)不為NULL,則將錯誤信息寫入[sqlite3_nalloc]分配內(nèi)存中, 并且讓第五個參數(shù)指向的分配的內(nèi)存,為了避免內(nèi)存泄漏,應(yīng)用程序在處理完 錯誤信息后,通過sqlite3_free釋放第五個參數(shù)指向的內(nèi)存.只有在執(zhí)行SELECT語句的時候,才需要回調(diào)函數(shù)
SELECT有多少條記錄,就會執(zhí)行多少次回調(diào)函數(shù)
總結(jié)
以上是生活随笔為你收集整理的数据库初级入门sqlite3版本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易2018校园招聘编程题真题集合2相反
- 下一篇: HDOJ 6078-Wavel Sequ