Kā uzdot saprātīgu jautājumu

Maijs 27, 2008

Agrāk vai vēlāk gandrīz katrs programmētājs nonāk pie vēlmes uzdot jautājumu publiskā vidē – forumos, e-pasta listēs vai kādos citos līdzīgos tiešsaistes resursos. Taču diemžēl krietns bariņš no tiem neko laikam nav mācījies par pieklājību ne parastā sabiedrībā, ne interneta sabiedrībā. Un nez kāpēc cilvēki brīnās, kāpēc pret viņiem izturas noraidoši, nicinoši, skeptiski un visādi citādi slikti, jo kurš gan gribēs, ka ballē ieveļas skursteņslauķis vai metinātavā cilvēks smokingā un baltos cimdos? Skaidrs, ka pārējie pret tādu labākajā gadījumā izturas skeptiski. Tad nu lūk Latvijā ir bariņš ar šādiem tiešsaistes forumiem, kuros katrā parasti ir savi publicēti noteikumi, bet diemžēl mēdz būt ļaudis, kas tos neievēro ne mazākajā mērā tādējādi sarežģot dzīvi gan sev, gan potenciālajiem palīgiem. Es uzskaitīšu tikai dažus no it kā vispārzināmajiem ieteikumiem, kurus būtu vēlams pildīt:

  1. Lieto latviešu valodu. Ja jau Tu reiz esi izvēlējies latviski runājošu forumu, tad lieto latviešu valodu līdz galam, cik nu tas IT nozarē iespējams. Lai gan iespējams daži latviskotie termini neskan perfekti un nav īsti pierasti, nevajadzētu kultivēt priekšstatu, ar ko cīnījās jau mūsu tēvutēvi pirms gadiem 100-150, kad gan vācieši, gan diemžēl arī daži paši latvieši uzskatīja, ka latviešu valoda ir zemnieku valoda un zinātniski šai valodā izteikties nevar. Šis etaps tā kā jau būtu noiets un tagad nevajadzētu labprātīgi visus terminus pagrābt tikai no angļu valodas.
  2. Izvēlies korektu forumu un tā kategoriju. Pirmkārt tas ir vērtīgi Tev pašam, jo nebūt ne visi atbildēt alkstošie cilvēki lasa visas foruma kategorijas un parasti jau lasa tās, kas katram tuvākas un zināmākas, līdz ar to Tu zaudē potenciālus atbildētājus. Otrkārt, jāatceras, ka dažas lietas vispār ir ļoti bīstami jautāt ne tiem paredzētajās kategorijās, jo Tu riskē dabūt atpakaļ veselu baru ķengu atbilžu.
  3. Raksti saprātīgu virsrakstu. Nekas nav nepatīkamāk, kā lasīt nepārtrauktus heelp, palīgā un Ir problēma jautājumus. Patiesību sakot, es personīgi tādus lasu tikai retos izņēmuma gadījumos, ja kaut kas cits mani uz to ļoti pamudina. Virsrakstā ir jāatspoguļo problēmas būtība un jāpaskaidro par ko jautājumā ir runa, tas, ka Tev ir potenciāla problēma vai jautājums, ir skaidrs jau tāpēc vien, ka Tu ievieto jautājumu forumā.
  4. Paskaidro precīzi savu jautājumu, kādā vidē darbojies, kādu programmēšanas valodu lieto utt. Atbildētājiem nav zināma Tava situācija, viņiem nav pieejamas arī kristāla bumbas vai tik daidz kafijas biezumi, lai to noskaidrotu. Tie ir papildus jautājumi, papildus pieņēmumi, Tu riskē ar to, ka Tev nemaz nesāks prasīt vai arī saņemsi atbildi krietni vēlāk.
  5. Pastāsti kādu darbu esi ieguldījis pats. Nav diez ko patīkami atbildēt uz elementāriem jautājumiem. Neviens no mums nav piedzimis kā visu zinošs ģēnijs, taču katra pienākums ir mācīties un nevis lūkot izpildīt savu uzdevumu tikai uz citu rēķina.
  6. Nemēģini uzsvērt, ka Tava problēma ir svarīgāka kā citas. Tā varbūt ir ļoti svarīga Tev, bet citiem tā nav ne par matu svarīgāka kā visas pārējās. Ar šādu mēģinājumu izcelt tieši savu problēmu, Tu tikai radi potenciālu nepatiku pret sevi un rezultātā iespēju, ka Tavus jautājumus nelasīs vai speciāli uz tiem neatbildēs.
  7. Nekļūsti nepieklājīgs pret tiem, kas Tev atbild. Tu esi tas, kas ir nācis ar savu vajadzību vai problēmu, Tu esi tas, kam kaut ko vajag. Tu saņem no citiem cilvēkiem viņu brīvo laiku par to nemaksājot, esi pieklājīgs un vismaz pasaki paldies par pūlēm, pat tad, ja piedāvātais risinājums Tev neder.
  8. Pirms uzdod jautājumu, paskaties kā to dara citi. Kad aizej pie citiem ciemos, paskaties kā uzvedas pārējie ļaudis, lai nesanāk izgāzties kā vecai sētai. Pat, ja Tev šķiet, ka pārējie rīkojas dīvaini, stulbi un visādi citādi Tev nepieņemami, tad Tev ir iespēja šo vietu atstāt un iet citur vai arī kļūt par šīs vietas respektējamu dalībnieku un tad piedāvāt savas izmaiņas. Tas nozīmē arī vietas rakstīto noteikumu izlasīšanu un saprātīgu ievērošanu. 

Vēl es gribētu uzsvērt dažas lietas, kas ir specifiskas jautājumiem par datubāzēm:

  1. Paskaidro par kādu DBVS ir jautājums. Tā kā Latvijas auditorijas un forumi ir pietiekami mazi, tad parasti vienā foruma kategorijā tiek uzdoti jautājumi par daudzām un dažādām datubāzēm (DBVS). Man patīk salīdzināt datubāzes ar mašīnām un šis prasīt prasās pēc analoģijas, ka Tu ieej auto veikalā un jautā – man lūdzu priekšējo lukturi manai mašīnai. Parasti pārdevēja balsī jau varēs just nelielu neapmierinātības pieskaņu, jautājot par kādu marku, modeli un izlaiduma gadu ir runa un noteikti viņš ir padomājis, ka nu ir gan atnākusi “blondīne” tās klasiskajā izpratnē ;) Ja Tu pēc tam nespēsi konkrēti to paskaidrot, tad Tevi vienkārši sāks uzskatīt par nedaudz garā vāju, jo katram ir skaidrs, ka katrs lukturis neder katram auto. Diemžēl attiecībā uz datubāzēm nez kāpēc cilvēki bieži aizmirst pieminēt, par tieši kādu DBVS ir runa.
  2. Mini ar kādu DBVS versiju tu darbojies. Jebkurai plašāk izplatītai DBVS ir vairākas vienlaicīgi diezgan izplatītas versijas. Katrā nākošajā versijā ir pieejamas jaunas iespējas, kas Tavu problēmu var padarīt atrisināmu kā tādu vai var padarīt atrisināmu daudz vienkāršāk.
  3. Ja Tev nepieciešams SQL vaicājums, kas atlasa datus noteiktā veidā no noteiktām tabulām, tad dod šo tabulu izveides (CREATE TABLE) skriptus un datu pievienošanas (INSERT) skriptus. Ar tādiem ir daudz vieglāk operēt un daudz vieglāk uzrakstīt SQL teikumu, nekā tad, ja vai nu jāsacer SQL teikums tikai teksta redaktorā vai atbildētājam pašam jāmēģina izveidot tabulas un pievienot tajās testa datus. Atvieglo atbildētajam šo uzdevumu! 

Tālākā lasāmviela


Merge teikuma sintakse SQL Server

Maijs 20, 2008

Pārējos rakstus var lasīt SQL pamatos.

SQL MERGE teikums ir visu pārējo DML teikumu maisījums. Tajā noteikti ir apakšvaicājums, tātad SELECT, tajā var būt gan INSERT, gan DELETE, gan UPDATE daļas. Tā galvenā doma un sūtība ir lielu datu kopu atjaunošana, kur piemēram, mums periodiski atnāk jauna datu kopa un tad atkarībā no tās vecajā datu kopā ir ieraksti jāpieliek klāt, jākoriģē vai jādzēš. Protams, ka to vienmēr var panākt 3 reiz skanējot cauri gan veco un jauno datu kopu un katrā reizē attiecīgi ierakstu pievienot ar INSERT, koriģēt ar UPDATE vai dzēst ar DELETE, taču ar MERGE to var panākt vienā piegājienā, kas, protams, ir gan uzskatāmāk, gan vispārīgā gadījumā ātrāk.

Šoreiz, lai dzīve nešķistu pārāk vienmuļa un Oracle orientēta ;) sākšu ar piemēru no Microsoft SQL Servera. Tiesa gan MERGE ir pieejams tikai jaunajā 2008 versijā, kas tika acīmredzot ar pompu un varoņiem pārnestā nozīmē nopārdota “kamēr lācis vēl mežā”, un līdz ar to oficiāli kā produkcijas versija vēl joprojām nav pieejama. Tai pašā laikā kaut kādas tādas kā betas (Community Technology Preview) ir pieejamas un pat strādā, kā arī šai versijai eksistē dokumentācija, tāpēc piemērus izveidot var. Tādējādi šis pie reizes būs raksts, kas apskatīs vienu no SQL Server 2008 jaunajām iespējām.

SQL Server vienkāršota MERGE sintakse ir šāda:

MERGE INTO <mērķa tabula>
USING <izejas dati>
ON <salīdzināšanas nosacījums>
WHEN MATCHED THEN <darbības ja nosacījums patiess>
WHEN TARGET NOT MATCHED THEN <darbības, ja nosacījums aplams mērķa datos>
WHEN SOURCE NOT MATCHED THEN <darbības ja nosacījums aplams izejas datos> Lasīt pārējo šī ieraksta daļu »


Literatūra par Oracle

Maijs 15, 2008

Par spīti tiešsaistes (online) resursu uzvaras gājienam, tai skaitā programmēšanā, grāmatas kā būtisks zināšanu elements nekur nav pazudušas.
Es uzskatu, ka tām vēl joprojām ir vairākas labas īpašības, salīdzinot ar tiešsaistes resursiem:

  • tās var ērti paņemt vakarā dīvānā;
  • tām nav nepieciešams krāms, ko saucam par datoru, un interneta pieslēgums;
  • tās rada mazliet vairāk emocionālu saprašanos ar autoru, nekā raksti tiešsaistē;
  • un pēdējais laikam, jau pats svarīgākais arguments – tajās (vismaz zemāk minētajās) ir papildus informācija, ko tiešsaistes resursos nav iespējams atrast vispār, vai tas ir izsvaidīts pa neskaitāmiem resursiem un atšķaidīts ar daudz nederīgu info.

Tātad šīs grāmatas ir vērtīgas vairāk no izstrādātāja viedokļa, iespējams, ka tīram DBA (datu bāzu administratoram) ne visas būs interesantas.

Expert Oracle Database Architecture by Thomas Kyte. Grāmata satur Oracle arhitektūras pārskatu, informāciju par failiem, atmiņas struktūrām, fona procesiem, bloķēšanas mehānismu (locks and latches), laiksakritību (concurrency) un ieraksta vairākām versijām (multi-versioning), transakcijām, redo un undo, tabulām, indeksiem, datu tipiem, particionēšanu, paralēlo izpildi un datu ielādi un izlādi (SQL*Loader, ārējās (external) tabulas). Kā jau visas šī autora grāmatas, arī šī ir uzrakstīta labi lasāmā valodā ar piemēriem un, manuprāt, ir saprotama arī tiem, kas nav absolūti Oracle adepti :) Augšminētajā saitē Jūs varat atrast vienu sadaļu, ko lejuplādēt par brīvu, kā arī paskatīties saturu.

Effective Oracle by Design by Thomas Kyte. Pārskats par to, kā efektīvi veidot jūsu programmatūru, apraksts par rīkiem, kas ļauj pārliecināties par SQL teikumu un procedūru efektivitāti un to salīdzināt, pārskats par to, kā tiek izpildīti SQL teikumi, pārskatas par Optimizatoru un par to kā rakstīt efektīvu SQL un PL/SQLu. Grāmata ir izdota pirms 10 versijas, līdz ar to tajā nav šīs versijas uzlabojumu un jaunāko lietu, bet pamatlietas, kas šeit minētas vēl joprojam ir spēkā un droši vien būs spēkā vēl ilgi.

Cost-Based Oracle Fundamentals by Jonathan Lewis. Labākā grāmata par to, kā darbojas Oracle optimizators, kā tiek izveidots izpildes plāns, kā optimizators rēķina sagaidāmo ierakstu skaitu, kā tiek klakulēta izpildes plāna un to soļu maksa (cost). Šī grāmata nav īsti tāda, ko var kā daiļliteratūru palsīties pirms gulētiešanas, jo šeit ir alogoritmi, formulas un piemēri, kuriem nemaz nav tik vienkārši izsekot līdzi. Šī ir grāmata, kas atbildēs uz tādiem jautājumiem, kā – kāpēc Oracle nelieto manu indeksu?

Optimizing Oracle Performance By Cary Millsap and Jeff Holt. Grāmata, kas stāsta par to kā ar garantiju atrast to, kas jūsu datubāzē bremzē lietotojot Oracle trace. Tātad stāsts par to kāpēc trace ir tas, kas droši pateiks, kur paliek jūsu izpildes laiks, kā to iespējot, atspējot, kā lasīt un saprast trace failus, kā arī pamatinformācija, par biežāk izplatītajām problēmām un kā ar tām cīnīties.

Oracle Insights: Tales of the Oaktable by Dave Ensor, Tim Gorman, Kyle Hailey, Anjo Kolk, Jonathan Lewis, Connor McDonald, Cary Millsap, James Morle, Mogens Nørgaard, David Ruthven, Gaja Krishna Vaidyanatha. Šī grāmata ir netipiska ar to, ka katrs no augšminētajiem autoriem ir uzrakstījis vienu nodaļu. Daži no tiem ir vairāk kā pamācoši stāstiņi, ko palasīt pirms gulētiešanas, daži krietni sarežģītāki, bet visi kopā veido interesantu buķeti. Šī nav grāmata, ko ieteikt speciālam mērķim, bet drīzāk vispārējai izglītībai Oracle kontekstā.

Scaling Oracle8i by James Morle. No vienas puses šī grāmata it kā attiecas uz Oracle 8i versiju un tātad šķiet novecojusi. No otras puses tajā ir izklāstītas daudzas pamatlietas, kas principā nenoveco un paliek spēkā jebkurā versijā un jebkurā aplikācijā. Grāmatā ir arī ievads un pamatjēdzieni par UNIX operētājsistēmu. Papildus tam visam šai grāmatai ir viens nenoliedzams pluss salīdzinājumā ar visām pārējām augšminētajām – to var pilnībā lejuplādēt par brīvu no augšminētās vietnes.
 
Vispār izskatās, ka pēdējā laikā grāmatas, ko izlaiž APRESS ir kvalitatīvas un tās ir sarakstījuši zinoši autori, tāpēc iespējams, ka arī citas šīs izdevniecības grāmatas ir vērts iepētīt.

Es labi apzinos, ka šai sarakstā nav tīri nevienas grāmatas par PL/SQL un DBA (datu bāzes administratora) uzdevumiem un iespējām. Bet tas, ko šeit es vēlējos uzskaitīt bija tās grāmatas, ko esmu lasījis, un DBA un/vai tīras PL/SQL grāmatas nav to skaitā. Tā kā cilvēkiem, kam ir pieredze ar šāda veida grāmatām – laipni lūgti izteikties komentāros! :)


Vienkāršs SQL Insert teikums

Maijs 10, 2008

Pārējos rakstus var lasīt SQL pamatos.

Vienkāršam Insert teikumam ir divi veidi. Ja izmanto VALUES klauzu, tad tiek pievienota tieši viena rinda (pieņemot, ka pievienošana noritēja bez kļūdām), savukārt izmantojot apakšvaicājumu, tiek pievienoti tik ieraksti, cik apakšvaicājums atgriež, tātad iespējams neviens, viens vai daudzi.

Insert teikums ar VALUES klauzu

Sintakse šim SQL teikumam ir šāda:

INSERT INTO <tabula un kolonas>
VALUES <vērtības>

INSERT INTO ir atslēgvārdi, bez kuriem nevar iztikt. Tālak tiek rakstīts tabulas nosaukums, kurā tiks pievienots ieraksts. Pēc tabulas nosaukuma var neobligāti uzskaitīt kolonas, kurās tiks pievienotas vērtības. Ja kolonu uzskaitījums netiek dots, tādā gadījumā VALUES klauzā ir jānorāda visas vērtības tādā skaitā, cik ir kolonas tabulā un vērtības tiek liktas tabulā skatoties pēc kolonu pozicionālā novietojuma.
Piemēriem izmantosim tabulas, kas definētas ierakstā par dekarta reizinājumu.

Piemērs 1. INSERT teikums ar VALUES klauzu bez kolonu uzskaitījuma.
SQL> INSERT INTO adreses
  2  VALUES (1, 'RĪGA', 'BRĪVĪBAS IELA 123, dz. 456');
1 row created.

Piemērs 2. INSERT teikums ar VALUES klauzu bez kolonu uzskaitījuma – ja vērtību skaits nesakrīt ar tabulas kolonu skaitu ir kļūda.
SQL> INSERT INTO adreses VALUES (2, 'LIELĀ IELA 12, dz. 34');
INSERT INTO adreses VALUES (2, 'LIELĀ IELA 12, dz. 34')
*
ERROR at line 1:
ORA-00947: not enough values

Var izvairīties no šādām kļūdām un tai kolonai, kurai vērtību negribam pievienot, norādīt atslēgas vārdu DEFAULT. Tas gan nestrādās visās DBVS.

Piemērs 3. INSERT teikums ar VALUES klauzu bez kolonu uzskaitījuma ar DEFAULT atslēgas vārdu.
SQL> INSERT INTO adreses VALUES (2, DEFAULT,'LIELĀ IELA 12, dz. 34');
1 row created.

Otrs veids, kā izvairīties no šādām kļūdām, ir vienkārši uzskaitīt kolonas, kurās ievietot vērtības. Šādā gadījumā jāatceras vairākas lietas:

  • kolonu skaitam un vērtību skaitam ir jāsakrīt;
  • vērtības tiks ievietotas tādā kārtībā kā pozicionāli uzskaitītas kolonas;
  • tām kolonām, kas nav uzskaitījumā, tabulā tiks ieliktas to noklusētās vērtības. Ja tāda netika specificēta, tad noklusētā vērtība parasti ir NULL;
  • ja nav norādīta vērtība kolonai, kam ir NOT NULL ierobežojums un nav noklusētā vērtība, tad jūs iegūsiet kļūdu, ja vien nebūs kādi ļoti speciāli nosacījumi, piemēram, trigeris uz tabulu, kas aizpilda šādas kolonas.

Piemērs 4. INSERT teikums ar VALUES klauzu ar kolonu uzskaitījumu.
SQL> INSERT INTO adreses (
  2     adr_id
  3    ,adr_teksts
  4  ) VALUES (
  5     3
  6    ,'CĒSU IELA 1, dz. 2');
1 row created.

Piemērs 5. INSERT teikums, kurā nav norādīta obligātā kolona.
SQL> INSERT INTO adreses (adr_id) VALUES (4);
INSERT INTO adreses (adr_id) VALUES (4)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("GINTS"."ADRESES"."ADR_TEKSTS")

Protams fiksētu vērtību vietā var lietot funkcijas un izteiksmes, kas katrā DBVS var būt savādākas. Piemēram pievienojam adreses tabulai divas kolonas, kurās likt ieraksta ievietošanas laika nospiedumu (current_timestamp) un pašreizējo lietotāju (user).

SQL> ALTER TABLE adreses ADD (
  2    adr_pievienosanas_datums TIMESTAMP,
  3    adr_lietotajs VARCHAR2(30));
Table altered.

Piemērs 6. INSERT teikums, ar iebūvētajām funkcijām.
SQL> INSERT INTO adreses VALUES (
  2    5, 'JELGAVA', 'RĪGAS IELA 1, dz. 3',
  3    current_timestamp, user);
1 row created.

Insert teikums ar apakšvaicājumu

Sintakse šim SQL teikumam ir šāda:

INSERT INTO <tabula un kolonas>
SELECT <select teikums>

Tātad INSERT INTO klauza ir tāda pati kā augstāk minētajā gadījumā – ir jānorāda tabulas vārds, kurā ieraksti tiks pievienoti, bet kolonas var norādīt un var arī nenorādīt. Savukārt otrā daļa ir kardināli atšķirīga – šeit parasti netiek norādītas specifiskas vērtības, bet ņemtas esošo datu kolonu vērtības un tās pievienotas norādītajai tabulai. Pie tam šis SELECT teikums var būt pēc patikas sarežģīts un atlasīt datus no daudzām tabulām izmantojot savienojumus un jebkādas citas konstrukcijas, kas tiek atļautas SELECT teikumā. Tātad ir vairākas lietas ko ir vērts šeit atcerēties:

  • Ja vien tas iespējams, tad rakstiet Insert teikumu ar apakšvaicājumu, nevis ciklā ejiet cauri Select vaicājuma rezultātam un tad katram ierakstam izpildiet Insert ar Values klauzu. Vispārīgā gadījumā tas ir saprotamāk, jo prasa mazāk kodu, ātrāk, jo datubāze var izmantot iebūvētās optimizēšanas metodes un pievienot ierakstus kā kopu.
  • Dažkārt var šķist, ka Insert ar apakšvaicājums strādā krietni ilgāk nekā vienkāršs Select pieprasījums, kas kaut kādus datus atlasa uz ekrāna. Pirmkārt, tas ir objektīvu iemeslu dēļ, jo, pievienojot ierakstus, ir jāveic to pievienošana gana tabulā, gan iespējams jāuztur indeksi un jāveic vēl citas operācijas, ja uz tabulas, piemēram, ir definēti trigeri. Taču visbiežāk bremze ir šķietama, jo ļoti daudzi GUI (graphical user interface, grafiskā lietotāja saskarne t.i. lietotājam draudzīgie SQL rīki) attēlo tikai pirmos N atlasītos ierakstus un lietotājs nemaz neveic šo datu pilnu atlasi un nepārliecinās, ka VISU pieprasīto datu atlase aizņem daudz vairāk laika, nekā pirmo N rindiņu atlase. Tas pats attiecas arī uz potenciālu ierakstu skaita noskaidrošanu (SELECT COUNT(*) FROM ()) – datubāze, var iekšēji veikt optimizācijas un, lai noskaidrotu ierakstu skaitu, tai iespējams nav jāveic pilns SELECT teikums, kas būtu jāveic, ja tiktu atlasīti visi dati.

Tātad izveidojam otru tabulu, papildus jau esošai adrešu tabulai:

SQL> CREATE TABLE adr_kopija (
  2     adr_id NUMBER NOT NULL
  3    ,adr_pilseta VARCHAR2(40)
  4    ,adr_teksts VARCHAR2(40) NOT NULL
  5    ,adr_pievienosanas_datums TIMESTAMP
  6    ,adr_lietotajs VARCHAR2(30));
Table created.

Piemērs 7. INSERT teikums ar apakšvaicājumu
SQL> INSERT INTO adr_kopija
  2  SELECT * FROM adreses
  3  WHERE adr_id <=2;
2 rows created.

Piemērs 8. INSERT teikums ar apakšvaicājumu, atlasot tikai daļu kolonu un dažas aizstājot ar funkcijām
SQL> INSERT INTO adr_kopija
  2  SELECT adr_id, adr_pilseta, adr_teksts,
  3         current_timestamp, user
  4  FROM adreses
  5  WHERE adr_pievienosanas_datums IS NOT NULL;
1 row created.

Paskatamies kāds rezultāts mums ir sanācis abiem šiem ierakstiem:

SQL> SELECT orig.adr_id,
  2    orig.adr_pievienosanas_datums,
  3    kopija.adr_pievienosanas_datums,
  4    orig.adr_pilseta,
  5    kopija.adr_pilseta,
  6    orig.adr_teksts,
  7    kopija.adr_teksts
  8  FROM adreses orig INNER JOIN adr_kopija kopija
  9  ON orig.adr_id = kopija.adr_id
 10  AND orig.adr_pievienosanas_datums IS NOT NULL;

    ADR_ID ADR_PIEVIENOSANAS_DATUMS      ADR_PIEVIENOSANAS_DATUMS
---------- ----------------------------  ---------------------------
ADR_PILSETA                              ADR_PILSETA
---------------------------------------- ---------------------------
ADR_TEKSTS                               ADR_TEKSTS
---------------------------------------- ---------------------------
         5 2008.05.10 00:29:02,111000    2008.05.10 01:22:54,033000
JELGAVA                                  JELGAVA
RĪGAS IELA 1, dz. 3                      RĪGAS IELA 1, dz. 3

Tātad kā redzam, oriģinālājā ierakstā un kopijas ierakstā pilsētas un teksta lauku sakrīt, bet pievienošanas laikspiedols ne.

Kopsavilkums

Augstākminētie INSERT teikumu sintakses veidi nebūt nav vienīgie un izsmeļošie. Taču ar tiem pamatā pietiek, lai varētu veikt datu pievienošanu gan fiksētām vērtībām vienam ierakstam, gan datu kopēšanu no jau esošām citām tabulām. Pie tam šeit uzskaitītie veidi, ja neskaita funkcijas, tad citādi darbojas pārsvarā visās DBVS. Nākošajā rakstā paskatīsiemies arī uz dažādiem eksotiskākiem ierakstu pievienošanas veidiem, kas gan lielākoties būs specifiski tikai kādām konkrētām DBVS.

Tālākā lasāmviela


NULL, indeksi, surogātvērtības un citi zvēri

Maijs 1, 2008

Šis pagaidām būs pēdējais raksts no rakstu sērijas par NULL speciālo vērtību SQL valodā. Iepriekšējos divi ir redzami šeit:

Šī raksta pirmā lielā daļa ir pārspriedumi un mani komentāri par to vai vajadzētu/nevajadzētu null izmantot, kas principā attiecas uz jebkuru DBVS. Rakstā otrajā pusē ir piemēri no Oracles parādot, kas notiek, ja mākslīgi uzspiež NOT NULL ierobežojumus.

NULL surogātaizstājēji

Tā kā vairums cilvēku baidās no lietām, ko viņi īsti nepazīst, un Null tāda reizēm mēdz būt, tad viens no paņēmieniem, kā tikt no Null vaļā ir tādas vērtības nepieļaut. Ir dzirdēts par stāstiem, kur, piemēram, noteiktā projektā tiek uzspiests absolūts ierobežojums, ka neviena kolona datubāzē nedrīkst atļaut Null vērtības. Citos projektos līdz tādam absurdam gluži nenonāk, bet vienalga mēdz šad tad šur tur Null aizstāt ar kādu citu surogātvērtību. Tad nu lūk paskatīsimies, kādi no tā var būt ieguvumi un kādi zaudējumi.

Galvenie argumenti, kāpēc Null vispār būtu jāaizstāj ar kaut ko citu parasti ir šādi: Lasīt pārējo šī ieraksta daļu »