Kwa nini kila mtu analalamika kwamba SQLite ni polepole? "Seti kamili ya SQL" inamaanisha nini?

Utangulizi

SQLite ni hifadhidata ya uhusiano ambayo inaweza kuulizwa kwa kutumia lugha Maswali ya SQL. Hifadhidata haiauni vipengele vyote vya SQL na ni duni katika utendakazi kwa DBMS zingine zilizotengenezwa, lakini inafaa kabisa kwa kuhifadhi na kupata habari.

Tofauti kati ya SQLite na MySQL na DBMS zinazofanana

DBMS za kawaida kama vile MySQL (na vile vile MS SQL, Oracle, PostgreeSQL) zinajumuisha seva tofauti, ambayo inasaidia uendeshaji wa hifadhidata na kusikiliza kwenye bandari maalum kwa maombi ya mteja. Mteja pia anaweza kuwa Ugani wa PHP, ambayo hutumia kiolesura ambacho maswali kwa hifadhidata hufanywa. Injini ya SQLite na interface yake inatekelezwa katika maktaba moja, ambayo huongeza kasi ya utekelezaji wa hoja. Seva hii mara nyingi huitwa iliyojengwa ndani.

Maoni

Hifadhidata zingine, kama vile MySQL, pia zina seva iliyojengewa ndani, lakini matumizi yake yanahitaji ada za leseni na kwa hivyo haitumiki sana katika ulimwengu wa chanzo huria.

SQLite ni hifadhidata isiyo na aina. Kwa usahihi, kuna aina mbili tu - integer "integer" na maandishi "text". Aidha, "integer" hutumiwa hasa kwa ufunguo wa msingi meza, na kwa data iliyobaki "maandishi" yataenda. Urefu wa kamba iliyoandikwa kwenye uwanja wa maandishi inaweza kuwa urefu wowote.

Vipengele vya SQLite

Hifadhidata zote zimehifadhiwa katika faili, faili moja kwa hifadhidata. Idadi ya hifadhidata, pamoja na meza ndani yao, ni mdogo tu nafasi ya bure inapatikana kwenye tovuti. Na ukubwa wa juu unaowezekana wa hifadhidata moja ni 2 TB.

Kwa kuwa data zote zimehifadhiwa kwenye faili, hakuna matatizo na kuhamisha database kutoka kwa mwenyeji mmoja hadi mwingine - unahitaji tu kunakili faili zinazofanana.

Inasakinisha SQLite

Katika PHP5, usaidizi wa SQLite umesakinishwa na kuwezeshwa kwa chaguo-msingi.

Ufungaji chini ya Windows: Ili kusakinisha SQLite, unahitaji kupakua na kunakili maktaba ya "php_sqlite.dll" kwenye folda ya viendelezi, ambayo inaweza kupakuliwa kutoka kwa kiungo: http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll. Kisha unahitaji kufuta (au kuongeza) mstari "extension=php_sqlite.dll" katika faili ya "php.ini". Ili SQLite ifanye kazi vizuri, unahitaji pia kutengua mstari "extension=php_pdo.dll".

Maoni

Maoni

Maktaba "php_pdo.dll" lazima ipakiwa kabla ya "php_sqlite.dll" kupakiwa. Hiyo ni, katika php.ini mstari "extension=php_sqlite.dll" inapaswa kuonekana baada ya "extension=php_pdo.dll".

Ufungaji chini ya Unix: Pakua toleo jipya zaidi la SQLite kutoka kwa tovuti rasmi (http://sqlite.org/download.html). Soma faili ya "INSTALL" iliyotolewa na majaribio ya moduli ya chanzo. Au tumia tu amri ya usakinishaji ya PEAR: "pear install sqlite".

Kufanya kazi na SQLite

Uundaji wa hifadhidata: Ili kuunda hifadhidata mpya, lazima utumie kitendakazi sqlite_open(). Ikiwa hifadhidata ambayo jina lake limetajwa katika parameter ya "jina la faili" haipo, basi kazi itaunda hifadhidata mpya kwa jina "jina la faili" na kurudisha kitambulisho cha hifadhidata.

Rasilimali sqlite_open (jina la faili la kamba [, modi ya int [, kamba &error_message]])

Nakala hapa chini inaonyesha uumbaji msingi mpya data:

// Unda hifadhidata

ikiwa (! $db) toka( "Imeshindwa kuunda hifadhidata!");
?>

Kama matokeo, kwenye folda iliyo na hati tutakuwa na faili inayoitwa "my_database.db" - hifadhidata yetu.

Kutengeneza meza: Hoja zote kwenye hifadhidata zinatekelezwa na kitendakazi cha sqlite_query(), ambacho kina sintaksia ifuatayo:

Rasilimali sqlite_query (dbhandle ya rasilimali, swala la kamba)

Maoni

Kufanya kazi na SQLite kama yoyote msingi wa uhusiano data kwa kutumia lugha ya swala ya SQL. Kwa hivyo, unaweza kuunda jedwali la data kwa kutumia swali la kawaida la CREATE TABLE, ingiza rekodi kwa kutumia taarifa ya INSERT, na urejeshe rekodi kwa kutumia. msaada CHAGUA, na sasisha kiingilio kilichopo kwa kutumia ombi la UPDATE.

Mfano hapa chini huunda jedwali la jedwali1 lililo na sehemu tatu: sehemu ya kitambulisho kamili ambayo hufanya kama ufunguo msingi, na mbili. nyanja za maandishi shamba1 na shamba2.

$db = sqlite_open("my_database.db" );
ikiwa (! $db) toka();
"UNDA jedwali la 1
(id UFUNGUO MSINGI WA INTEGER,
shamba1 TEXT,
field2 TEXT);
"
);
ikiwa (! $query_table ) toka();
$query_insert = sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("PHP5", "Apache");");
ikiwa (! $query_insert ) toka( "Imeshindwa kuandika data kwenye jedwali!");
?>

Baada ya kuunda jedwali, rekodi inaongezwa kwake iliyo na mistari "PHP5" na "Apache", uga wa kitambulisho hupokea thamani 1 kiatomati.

Kutoa data kutoka kwa hifadhidata: Ili kuonyesha data kutoka kwa meza, kazi sawa hutumiwa - sqlite_query(). Ikiwa rekodi nyingi zitachukuliwa, matokeo ya kuleta yanapaswa kuchakatwa kwa kutumia kitanzi cha while() na sqlite_fetch_array() chaguo la kukokotoa, ambalo lina sintaksia ifuatayo:

Mkusanyiko wa sqlite_fetch_array (matokeo ya rasilimali [, aina_ya_ya_ya_matokeo ya int [, msimbo wa bool_binary]])

Ifuatayo ni hati inayoonyesha matokeo ya rekodi kadhaa kutoka kwa hifadhidata:

// Unda hifadhidata mpya
$db = sqlite_open("my_database.db" );
ikiwa (! $db) toka( "Haijaweza kuunda hifadhidata!");
// Unda jedwali "meza1" kwenye hifadhidata
$query_table = sqlite_query ($db, "UNDA jedwali la 1
(id UFUNGUO MSINGI WA INTEGER,
/* kitambulisho kitaongezeka kiotomatiki */
shamba1 TEXT,
field2 TEXT);
"
);
ikiwa (! $query_table ) toka( "Imeshindwa kuunda jedwali katika hifadhidata!");
// Andika kitu kwenye meza
sqlite_query($db, );
sqlite_query($db, );
sqlite_query($db, );
// Wacha tuchukue sampuli za data
$res = sqlite_query ($db, "SELECT * FROM table1;" );
wakati (safu ya $ = sqlite_fetch_array ($ res))
{

" );
}
?>

Kama matokeo ya hati tunapata:

PHP5+Apache (kitambulisho cha kiingilio:1)

Kuhariri chapisho: Ili kubadilisha uga, tutatumia kitendakazi sqlite_query() na kuipitisha ombi la kusasisha (UPDATE).

// Unda hifadhidata mpya
$db = sqlite_open("my_database.db" );
ikiwa (! $db) toka( "Haijaweza kuunda hifadhidata!");
// Unda jedwali "meza1" kwenye hifadhidata
$query_table = sqlite_query ($db, "UNDA jedwali la 1
(id UFUNGUO MSINGI WA INTEGER,
/* kitambulisho kitaongezeka kiotomatiki */
shamba1 TEXT,
field2 TEXT);
"
);
ikiwa (! $query_table ) toka( "Imeshindwa kuunda jedwali katika hifadhidata!");
// Andika kitu kwenye meza
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("PHP5+", "Apache");");
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("SQLite - ", "kitu baridi");");
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("Tembelea ", "sqlite.org");");
// Badilisha uga na id=1
sqlite_query ($db, "SASISHA jedwali1 WEKA uga2="Apache+Linux" WAPI id=1;");
// Wacha tuchukue sampuli za data

// Katika kitanzi tutaonyesha data zote zilizopokelewa

{
echo($array [ "field1" ]. $array [ "field2" ]. " (kitambulisho cha kiingilio: " . $array [ "id" ]. ")
" );
}
?>

Kama matokeo, tunapata:

PHP5+Apache+Linux (kitambulisho cha kiingilio:1)
SQLite ni kitu kizuri (kitambulisho cha chapisho: 2)
tembelea sqlite.org (kitambulisho cha chapisho:3)

Kuondoa rekodi kutoka kwa jedwali: Ili kufuta rekodi kutoka kwa jedwali, unahitaji kupitisha ombi la kufuta (DELETE) kwa sqlite_query() kitendakazi.

// Unda hifadhidata mpya
$db = sqlite_open("my_database.db" );
ikiwa (! $db) toka( "Haijaweza kuunda hifadhidata!");
// Unda jedwali "meza1" kwenye hifadhidata
$query_table = sqlite_query ($db, "UNDA jedwali la 1
(id UFUNGUO MSINGI WA INTEGER,
/* kitambulisho kitaongezeka kiotomatiki */
shamba1 TEXT,
field2 TEXT);
"
);
ikiwa (! $query_table ) toka( "Imeshindwa kuunda jedwali katika hifadhidata!");
// Andika kitu kwenye meza
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("PHP5+", "Apache");");
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("SQLite - ", "kitu baridi");");
sqlite_query ($db, "INGIZA NDANI ya jedwali1(uga1, uga2) THAMANI ("Tembelea ", "sqlite.org");");
// Futa uga kwa id=2
sqlite_query ($db, "FUTA KUTOKA jedwali1 WAPI id=2;");
// Wacha tuchukue sampuli za data
$query = sqlite_query ($db, "SELECT * FROM table1;" );
// Katika kitanzi tutaonyesha data zote zilizopokelewa
wakati ($array = sqlite_fetch_array ($query))
{
echo($array [ "field1" ]. $array [ "field2" ]. " (kitambulisho cha kiingilio: " . $array [ "id" ]. ")
" );
}
?>

SQLite ni hifadhidata inayofanana kwa kiasi fulani na MySQL. Tofauti ya kimsingi kati ya SQLite na hifadhidata zingine ni kwamba hifadhidata nzima ni faili moja. Ikiwa katika MySQL hifadhidata imehifadhiwa mahali pengine kwenye pori la seva na haipatikani kwa uhamishaji, basi katika SQLite kila kitu ni rahisi sana: faili moja - hifadhidata moja.

Kwa kweli, seva lazima iunge mkono dereva wa SQLite (kama hifadhidata nyingine yoyote), lakini kama sheria hakuna shida na hii sasa.

SQLite hukuruhusu kufanya kazi na hifadhidata kwa kutumia SQL kama kawaida, kuunda meza, uwanja, n.k. Kwa ujumla, tunaweza kusema kwamba SQLite sio duni kwa MySQL ya kawaida, isipokuwa, labda, ya kufanya kazi polepole na maswali "nzito" ya SQL ya kusasisha data (ingiza na usasishe). Lakini, tena, hii ni kwa tovuti zenye mzigo mkubwa.

Faida kubwa ya SQLite ni urahisi wa kubebeka. Nakili faili - ni nini kinachoweza kuwa rahisi? Huna haja ya kuwa na wasiwasi kuhusu chelezo, kama katika MySQL, huna haja ya kuunda mtumiaji na nenosiri kwenye seva, huna haja ya kuunda hifadhidata yenyewe. Kwa SQLite tunaichukua tu na kuitumia.

Kufanya kazi na hifadhidata katika PHP, ni bora kutumia PDO - PHP Data Objects - hii ndiyo inayoitwa. muhtasari ambao hutoa kiolesura kimoja cha kufanya kazi na hifadhidata tofauti. Kwa nadharia, kwa kutumia PDO, unaweza kubadili hifadhidata yoyote bila kubadilisha maswali ya SQL, kwa mfano kutoka MySQL hadi SQLite. Vigezo vya uunganisho pekee vinabadilika.

Kwa njia hii SQLite itaunganishwa kupitia PDO. Hakuna kinachohitajika kwa hili, kwani PDO yenyewe tayari imejumuishwa kwenye PHP, na dereva wa SQLite kawaida hujumuishwa kwenye seva pia.

Lakini, kabla ya kuanza programu, unahitaji kuunda msingi yenyewe. Kwa mfano, kwa MySQL kuna phpMyAdmin, kwa njia ambayo unaweza kufanya shughuli mbalimbali. Pia kuna maendeleo sawa kwa SQLite, lakini nitaonyesha jinsi unaweza kufanya hivyo kupitia kivinjari cha FireFox. Ili kufanya hivyo, unahitaji tu kufunga nyongeza.

Ili kuongeza programu-jalizi hii kwenye menyu kuu ya Firefox ("hamburger"), bofya Hariri na uburute ikoni kwenye menyu.

Hii imewekwa na unaweza kuitumia.

Kwanza, hebu tuunde hifadhidata mpya. Katika SQLite, hii ni faili tofauti ambayo itakuwa na kiendelezi cha .sqlite. Kidhibiti cha SQLite kitakuomba ubainishe saraka ambapo faili hii itahifadhiwa. Chagua au unda saraka mpya. Hii haijalishi kwetu bado. Kama matokeo, faili ya sqlite iliyo na hifadhidata mpya itaundwa.

Faili hii inaweza kuhamishwa (na kubadilishwa jina) mahali popote, na kisha kufunguliwa kwa amri ya menyu Hifadhidata - Unganisha hifadhidata.

Sasa unahitaji kuunda meza (au meza) kwenye hifadhidata.

Meneja wa SQLite huunda meza za huduma kiotomatiki sqlite_XXX. Hatuwagusi na wala hawatusumbui.

Jedwali katika hifadhidata ni mahali ambapo habari iliyopangwa huhifadhiwa. Jedwali lazima liwe na seti ya sehemu zilizo na sifa maalum. Kwa mfano, sehemu inaweza kuwa kamili - kwa nambari kamili, au maandishi - kwa maandishi. Idadi ya sehemu inaweza kuwa ya kiholela na inaamuliwa tu na kazi ya msimamizi wa tovuti.

Hebu, kwa mfano, tuna kurasa za meza na mashamba

  • kitambulisho- nambari ya kipekee (kuongeza otomatiki)
  • konokono- kiungo
  • maandishi- maandishi ya bure
  • hits- idadi ya maoni

Baada ya jedwali kuundwa, makini na "taarifa ya SQL iliyounda kitu hiki". Itakuwa na swali la SQL ambalo linaweza kutumika kuunda jedwali. Inaweza kuwa muhimu ikiwa unahitaji kuunda jedwali kwenye hifadhidata kupitia PHP.

Kichupo cha Tazama na Utafutaji hukuruhusu kuhariri jedwali. Kwa mfano, hebu tuunde mistari miwili ambapo shamba konokono itakuwa nyumbani na mawasiliano. Hizi zitakuwa kurasa mbili: nyumbani Na tovuti/mawasiliano.

Shamba hits itakuwa na kihesabu cha kutazama ukurasa. Nakala inaweza kuwa chochote.

Hiyo ndiyo yote, msingi uko tayari, sasa unaweza kuitumia.

Hebu tuweke kazi. Hebu tuwe na tovuti rahisi ambayo itaonyesha maandishi yanayolingana na idadi ya maoni kupitia kiungo kifupi (slug).

Ikiwa tutafanya hivi kwenye seva ya ndani, basi tovuti iwe kwenye saraka sqlite. Kuna subdirectory ndani yake db, ambapo tutanakili yetu kurasa.sqlite.

Tunaweza kufanya routing kama ilivyoelezwa katika makala iliyopita. Faili.htaccess

AddDefaultCharset UTF-8 Chaguzi -Fahasi RewriteEngine kwenye RewriteBase /sqlite/ RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule (.*) /sqlite/index.php?$1

KATIKA index.php Njia yenyewe itaelezewa katika mstari mmoja:

ukurasa wa $ = ($p = ufunguo($_GET))? $p: "nyumbani";

  • kuunganisha msingi
  • tunafanya uteuzi ndani yake kwa ukurasa wa $
  • onyesha data iliyopokelewa
Ninarahisisha algorithm kwa makusudi ili nisifanye msimbo wa PHP kuwa ngumu.

Kuna chaguzi mbili za kufanya kazi na hifadhidata. Ya kwanza ni nambari ya asili ya PHP. Sio ngumu sana, lakini wingi wa vigezo ni hasira kidogo. Kwa hivyo, chaguo la pili ni kutumia maktaba ya ziada ya karakana. Pamoja nao, kanuni inakuwa mafupi zaidi.

Nitatoa msimbo wa index.php katika toleo la kwanza:

setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $sql ="CHAGUA * KUTOKA kurasa AMBAPO slug=:ukurasa LIMIT 1"; $sth = $pdo->tayarisha($sql, safu(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->tekeleza(safu(":page" => ukurasa wa $)); $ safu = $sth->fetchAll(); print_r(safu za $); // data ya pato hapa ) catch(Ila $e) ( echo $e->getMessage(); ) # mwisho wa faili

Kwa chaguo la pili, nilitumia maktaba ya php kutoka kwa tovuti labaka.ru, ambayo niliiweka kwenye orodha ndogo. lib.

msimbo wa index.php:

Mfano huu utaonyesha maandishi tofauti kwa anwani tofauti na kihesabu kutazamwa kitafanya kazi. Ikiwa unahitaji kuongeza ukurasa mpya, basi unahitaji tu kuunda kwenye hifadhidata. Kwa urahisi, katika Meneja wa SQLite unaweza kuunganisha hifadhidata moja kwa moja kutoka kwa saraka ya tovuti.

Kuna mambo kadhaa muhimu ya kuzingatia hapa.

Awali ya yote, kazi zote na PDO zinapaswa kuwa katika jaribio..catch block. Ujumbe wa makosa hunaswa kwa njia hii.

Data inayotumwa kwa hoja ya sql lazima ipitie uthibitisho. Katika PDO, wakati utayarishaji wa data unatumiwa (PDO::tayarisha), kutoroka kwa parameta kunalazimishwa. Hii hukuruhusu kulinda dhidi ya sindano zinazowezekana za SQL.

Wakati hifadhidata ya SQLite imeunganishwa, ikiwa hakuna faili ya hifadhidata, itaundwa kiotomatiki. Huu ndio msingi wa kuunda hifadhidata mara baada ya kuiunganisha na kuunda meza zinazohitajika na swala la kwanza la sql (ambalo niliandika hapo juu).

Ujumbe mmoja zaidi kuhusu SQLite. Kwa kuwa hifadhidata ni faili, inaweza kupakuliwa kutoka kwa URL moja kwa moja kupitia kivinjari. Kwa hiyo, ni bora kulinda saraka na faili za SQLite kupitia .htaccess na Kukataa kutoka kwa mstari wote. Au iweke juu zaidi ya saraka kuu ya www.

SQLite inaweza kuwa muhimu kwa kazi ndogo zinazohitaji hifadhidata ndogo: vihesabio, upigaji kura, metadata ya ukurasa, n.k.

Unaweza kurejelea nakala hii.

Siku nyingine nilihitaji kutengeneza mfumo wa kutoa data haraka na kuihifadhi kwenye hifadhidata ya SQLite. Na yote ilibidi kufanya kazi haraka sana. Kwa njia, ilikuwa ni lazima kuongeza database kwa MySQL. Kama kwa MySQL, kuna uteuzi mpana wa zana za kuongeza data:

  1. rahisi Ingiza
  2. INSERT na maadili mengi yaliyoongezwa (BULK INSERT)
  3. kuongeza kupitia faili za CSV

Chaguo la haraka zaidi, bila shaka, lilikuwa chaguo nambari 3. Kwa kweli, ilikuwa tayari kutumika katika mfumo. Kwa njia, chaguo hili hukuruhusu kuongeza hadi rekodi laki kadhaa / milioni kwenye hifadhidata katika suala la sekunde. Bila shaka, vifaa vya seva pia vina jukumu kubwa hapa, lakini hii haitazingatiwa sasa.

Kama sisi sote tunajua vizuri, na tumeona zaidi ya mara moja, uwezo mkubwa unahitaji rasilimali kubwa na/au programu ya ziada ili kuongeza mwingiliano na mfumo huu na kuweka vikwazo zaidi.

Tofauti na MySQL, SQLite ni nyepesi kabisa na inahitaji maktaba moja tu kufanya kazi nayo. Faili za hifadhidata zinaweza kuwekwa mahali popote na kuhamishwa. Lakini, kuongeza kwenye hifadhidata kunaweza kufanywa tu kupitia INSERT rahisi. Hii inamaanisha kuwa kuongeza kupitia "BULK" INSERT hakutumiki. Na, ikiwa jedwali lina angalau ufunguo mmoja (angalau itakuwa ufunguo wa msingi), kisha kuongeza rekodi moja pia kunamaanisha kujenga upya faharisi. Sasa fikiria unahitaji kuongeza rekodi elfu kadhaa kwa muda mfupi iwezekanavyo. Licha ya jinsi SQLite ilivyo nyepesi na ya haraka, inachukua muda mwingi.

Suluhisho lisilotarajiwa lilipatikana (angalau kwangu - sikujifunza uwezekano wote wa hifadhidata hii) - matumizi ya shughuli. Hii ilitoa ongezeko la mara 10-100 kwa kasi. Kuhifadhi/kukamilisha muamala kwa ufanisi ni haraka - kwa kweli, data hutupwa kwenye faili ya hifadhidata.

Kilichoelezewa kilikuwa kizuri, lakini kwa seti kamili ilihitajika kwamba data hii iandikwe kwa faili tofauti za sqlite. Kwa hili, njia rahisi na kuthibitishwa ilitumiwa - matumizi ya maelezo kadhaa. Kwa bahati nzuri, kulikuwa na faili chache. Baada ya ghiliba hizi zote, tuna hati ambayo inafanya kazi kwa chini ya dakika 5 na huandika data kwa faili za N zilizo na mistari M katika kila moja. Acha nihifadhi mara moja - katika kesi hii kuna jedwali moja katika kila faili ya hifadhidata.

Na sasa nambari kadhaa:

Katika hifadhidata za majaribio, muamala ulifunguliwa kwa kila faili na kisha kufungwa na kuhifadhiwa. Kumbuka muhimu: Kila SQLite inaweza tu kuruhusu mpini mmoja kwa kila faili. Ukijaribu kuingiliana na hifadhidata na mpini wa pili, hitilafu itatupwa.

Kama unaweza kuona, njia hii hukuruhusu kuongeza idadi kubwa ya data kwa muda mfupi.

Inafaa kutaja kwamba niliposema kuwa njia pekee ya kuongeza hifadhidata kwa SQLite ni INSERT rahisi, sikuonyesha kuwa hii ndio chaguo pekee kwa kutumia lugha ya SQL.

Kuna chaguo jingine - analog ya "LOAD DATA ..." katika MySQL - kuingiza data kutoka kwa faili za CSV. Chaguo hili pekee hukuruhusu kuongeza data moja kwa moja kutoka kwa mazingira ya SQLite. Kwa maneno mengine, unahitaji kwanza kufungua hifadhidata - kwa mfano, piga simu kutoka kwa koni.

Ingiza jedwali la path_to_csv_file

Delimiter chaguo-msingi ni herufi "|".

Ili kubadilisha kitenganishi, unahitaji kupiga amri:

Kitenganishi

Kama kitenganishi, unahitaji kutaja kitenganishi cha safu, kwa mfano, ",".

Kasi ya kuongeza katika kesi hii inazidi kasi ya njia iliyoelezwa hapo awali kwa sababu ya 100. Kwa nini njia hii haikutumiwa? Jambo ni hili: lugha ya programu ya upande wa seva (katika kesi hii PHP) inaweza kutumia toleo moja la maktaba ya sqlite, na toleo jingine linaweza (au haliwezi) kusakinishwa kwenye mfumo. Wakati wa kuchanganya njia hizi mbili za mwingiliano wa sqlite, hifadhidata inaweza kuwa haipatikani kwa moja ya chaguzi - hitilafu itatupwa wakati wa kujaribu kuisoma.

Hii ni maktaba iliyoandikwa kwa lugha ya C ambayo hutoa kazi na SQL. Zana hii ni ya Mifumo ya Usimamizi wa Hifadhidata ya Uhusiano. Hifadhidata nyingi za SQL hufanya kazi kwa msingi wa mteja/seva. Hebu tuchukue MySQL kwa mfano. Wakati wa operesheni, data inachukuliwa kutoka kwa seva ya MySQL na kutumwa kama jibu la ombi. Katika kesi ya kutumia SQLite, data itachukuliwa moja kwa moja kutoka kwenye diski, i.e. hakutakuwa na haja ya kuwasiliana na seva.

Ufungaji

Tutaingiliana na hifadhidata kupitia kiolesura cha mstari wa amri sqlite3(CLI) kwenye Linux. Fanya kazi na sqlite3 CLI katika MAC OS na Windows inafanywa kwa njia ile ile, hata hivyo, ninapendekeza utumie dakika 5 kufunga mashine ya kawaida ili usiingie kompyuta yako na programu isiyo ya lazima.

Ili kusakinisha sqlite3 kwenye Linux, endesha amri:

sudo apt-get install sqlite3 libsqlite3-dev

Matokeo yake, mashine yako itakuwa na sqlite3. Ili kufunga chombo hiki kwenye OS nyingine, fuata maagizo. Ili kuanza sqlite, endesha amri ya sqlite3 kwenye koni. Matokeo yake yanapaswa kuwa kama hii:

Mstari wa pili una kidokezo kwamba ili kupata usaidizi unahitaji kuendesha command.help . Hebu tufanye hivyo. Matokeo yake tutaona Amri za Meta na maelezo yao.

Amri za Meta

Amri za Meta- iliyoundwa kwa ajili ya kuzalisha meza na shughuli nyingine za utawala. Wote mwisho nukta. Wacha tupitie orodha ya amri ambazo zinaweza kuwa muhimu:

Amri za kawaida

Sasa hebu tupitie orodha amri za kawaida sqlite3, ambayo imeundwa kuingiliana na hifadhidata. Amri za kawaida inaweza kugawanywa katika vikundi vitatu:

  • Maelezo ya data Lugha DDL: Amri za kuunda jedwali, kurekebisha na kufuta hifadhidata, majedwali na zaidi.
  • Lugha ya Usimamizi wa Data DML: ruhusu mtumiaji kuchezea data (ongeza/badilisha/futa).
  • Lugha ya Maswali ya DQL: Huruhusu urejeshaji data.
  • noti: SQLite pia inasaidia amri nyingine nyingi, orodha ambayo inaweza kupatikana. Kwa kuwa somo hili limekusudiwa kwa wanaoanza, tutajiwekea kikomo kwa seti zilizoorodheshwa za amri.

    Faili za hifadhidata za SQLite ni jukwaa la msalaba. Wanaweza kuwekwa kwenye aina mbalimbali za vifaa.

    • Barua pepe
    • Maoni

    Kati ya sehemu hizi zote, ni anwani ya tovuti pekee inayoweza kuwa tupu. Tunaweza pia kutambulisha safu wima ya kuhesabu maoni. Hebu tuite post_id.

    Sasa hebu tufafanue aina za data kwa kila safu:

    Sifa Aina ya data
    kitambulisho_cha_chapisho INTEGER
    jina MAANDISHI
    barua pepe MAANDISHI
    tovuti_url MAANDISHI
    maoni MAANDISHI

    Utaweza kupata aina zote za data zinazotumika katika SQLite3.

    Inapaswa pia kuzingatiwa kuwa katika SQLite3, data iliyoingizwa kwenye safu inaweza kutofautiana na aina maalum. Hii haitafanya kazi katika MySQL.

    Sasa hebu tutengeneze hifadhidata. Ikiwa bado uko kwenye kiolesura cha sqlite3, kisha chapa command.quit ili kuondoka. Sasa ingiza:

    sqlite3 comment_section.db

    Matokeo yake, katika saraka ya sasa tutakuwa na faili sehemu_ya_maoni.db.

    noti: Ikiwa hutataja jina la faili, sqlite3 itaunda hifadhidata ya muda.

    Kuunda meza

    Ili kuhifadhi maoni tunahitaji kuunda meza. Wacha tuite maoni. Tunatekeleza amri:

    TUNZA maoni YA JEDWALI (post_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, website_url TEXT NULL, comment TEXT NOT NULL);

    NOT NULL itahakikisha kuwa kisanduku hakina thamani batili. PRIMARY KEY na AUTOINCREMENT huongeza uwezo wa uga kitambulisho_cha_chapisho.

    Ili kuthibitisha kwamba jedwali limeundwa, endesha amri ya meta ya .tables. Kama matokeo, tunaona meza yetu ya maoni.

    noti: Ili kupata muundo wa jedwali, charaza maoni ya .schema

    Sasa tunaweza kuingiza data kwenye meza.

    KUINGIZA SAFU

    Tuseme tunahitaji kuingiza ifuatayo:

    Jina: Barua pepe ya Shivam Mamgain: [barua pepe imelindwa] Tovuti: shivammg.blogspot.com Maoni: Mafunzo mazuri kwa wanaoanza.

    Kuingiza tutatumia amri INGIZA.

    INGIA KWENYE maoni (jina, barua pepe, tovuti_url, maoni) THAMANI ("Shivam Mamgain", " [barua pepe imelindwa]", "shivammg.blogspot.com", "Mafunzo mazuri kwa wanaoanza.");

    Hakuna haja ya kubainisha thamani ya post_id kwa sababu itatolewa kiotomatiki kutokana na mpangilio wa AUTOINCREMENT.

    Ili kujaza mkono wako, unaweza kuingiza mistari michache zaidi.

    SAMPULI

    Ili kupata data tutatumia amri CHAGUA.

    CHAGUA kitambulisho cha chapisho, jina, barua pepe, tovuti_url, maoni KUTOKA kwa maoni;

    Ombi sawa linaweza kuonekana kama hii:

    CHAGUA * KUTOKA kwa maoni;

    Matokeo yake, safu zote zitatolewa kutoka kwa meza. Matokeo yanaweza kuonekana bila kikomo cha safu wima na bila kichwa. Ili kurekebisha hii tunafanya:

    Ili kuonyesha kichwa, ingiza .vijajuu ILIVYO .

    Ili kuonyesha safu wima, endesha safu wima ya amri .mode .

    Tunatekeleza CHAGUA ombi tena.

    noti: Aina ya onyesho inaweza kubadilishwa kwa kutumia amri ya meta ya .mode.

    UPDATE

    Hebu tuchukulie kwamba shamba barua pepe kwa mtumiaji 'Shivam Mamgain' inahitaji kubadilishwa kuwa ' [barua pepe imelindwa]'. Tunaendesha amri ifuatayo:

    Kama matokeo, kiingilio kitabadilishwa.

    noti: Thamani ya safuwima jina inaweza isiwe ya kipekee, kwa hivyo zaidi ya safu moja inaweza kuathiriwa na amri. Kwa watumiaji wote ambapo thamani jina= ‘Shivam Mamgain’, shamba barua pepe itabadilishwa kuwa ‘ [barua pepe imelindwa]'. Ili kubadilisha mstari maalum, unahitaji kufuatilia kwa kutumia shamba kitambulisho_cha_chapisho. Tulifafanua kuwa UFUNGUO WA MSINGI, ambao unahakikisha upekee wa thamani.