Iepriekšējās sadaļās mēs apskatījām darbu, kas saistīts ar datu izgūšanu no iepriekš izveidotām tabulām. Tagad ir pienācis laiks izdomāt, kā mēs varam izveidot/dzēst tabulas, pievienot jaunus ierakstus un dzēst vecos. Šiem nolūkiem iekšā SQL Ir tādi operatori kā: IZVEIDOT- izveido tabulu, ALTER- maina tabulas struktūru, NOLIET- dzēš tabulu vai lauku, IEVIETOT- pievieno datus tabulai. Sāksim iepazīties ar šo operatoru grupu no operatora IEVIETOT.
Kā norāda nosaukums, operators IEVIETOT izmanto, lai datu bāzes tabulā ievietotu (pievienotu) rindas. Pievienošanu var veikt vairākos veidos:
Tātad, lai pievienotu tabulai jaunu rindu, mums ir jānorāda tabulas nosaukums, jāuzskaita kolonnu nosaukumi un jānorāda katras kolonnas vērtība, izmantojot konstrukciju INSERT INTO tabulas_nosaukums (lauks1, lauks2...) VĒRTĪBAS (vērtība1, vērtība2...). Apskatīsim piemēru.
INSERT INTO Pārdevēju (ID, adrese, pilsēta, pārdevēja_nosaukums, valsts) VĒRTĪBAS("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")
Varat arī mainīt kolonnu nosaukumu secību, taču tajā pašā laikā jums ir jāmaina parametra vērtību secība VĒRTĪBAS.
Iepriekšējā piemērā, izmantojot operatoru IEVIETOT mēs esam skaidri atzīmējuši tabulas kolonnu nosaukumus. Izmantojot šī sintakse, mēs varam izlaist dažas kolonnas. Tas nozīmē, ka jūs ievadāt vērtības dažām kolonnām, bet nenodrošiniet tās citām. Piemēram:
INSERT INTO Pārdevēju (ID, pilsēta, Pārdevēja_nosaukums) VĒRTĪBAS("6", "Losandželosa", "Harijs Monro")
IN šajā piemērā mēs nenorādījām vērtību divām kolonnām Adrese Un Valsts. Varat izslēgt dažas kolonnas no paziņojuma INSERT INTO, ja tas pieļauj tabulas definīciju. Šajā gadījumā ir jāizpilda viens no nosacījumiem: šī kolonna ir definēta kā derīga NULL(nav nekādas vērtības) vai tabulas definīcijā norādītā noklusējuma vērtība. Tas nozīmē, ka, ja vērtība nav norādīta, tiks izmantota noklusējuma vērtība. Ja tabulā trūkst kolonnas, kas neļauj rindās parādīties vērtībām NULL un nav definēta noklusējuma vērtība, DBVS ģenerēs kļūdas ziņojumu un rinda netiks pievienota.
Iepriekšējos piemēros mēs ievietojām datus tabulās, manuāli ievadot tos vaicājumā. Tomēr operators INSERT INTOļauj automatizēt šo procesu, ja vēlamies ievietot datus no citas tabulas. Šim nolūkam SQL ir tāda konstrukcija kā INSERT INTO... ATLASĪT.... Šis dizains ļauj vienlaikus atlasīt datus no vienas tabulas un ievietot tos citā. Pieņemsim, ka mums ir cita tabula Pārdevēji_ES ar mūsu preču pārdevēju sarakstu Eiropā un mums tie jāpievieno vispārējai tabulai Pārdevēji. Šo tabulu struktūra ir vienāda (vienāds kolonnu skaits un vienādi nosaukumi), taču dati atšķiras. Lai to izdarītu, mēs varam uzrakstīt šādu vaicājumu:
INSERT INTO Pārdevēji (ID, adrese, pilsēta, pārdevēja_nosaukums, valsts) ATLASĪTID, adrese, pilsēta, pārdevēja_nosaukums, valsts NO Pārdevēji_ES
Jums jāpievērš uzmanība, lai neatkārtotos iekšējo atslēgu vērtības (lauks ID), pretējā gadījumā radīsies kļūda. Operators ATLASĪT var ietvert arī ieteikumus KUR lai filtrētu datus. Jāņem arī vērā, ka DBVS nepievērš uzmanību paziņojumā ietverto kolonnu nosaukumiem ATLASĪT, viņai ir svarīga tikai kārtība, kādā tie ir sakārtoti. Tāpēc dati pirmajā norādītajā kolonnā, kas tika atlasīti sakarā ar ATLASĪT, jebkurā gadījumā tiks aizpildīta tabulas pirmajā ailē Pārdevēji, norādīts aiz operatora INSERT INTO, neatkarīgi no lauka nosaukuma.
Bieži vien, strādājot ar datu bāzēm, ir nepieciešams izveidot jebkuru tabulu kopijas dublēšanas vai modifikācijas nolūkos. Lai izveidotu pilnu tabulas kopiju, SQL nodrošina atsevišķu paziņojumu IZVĒLĒTIES. Piemēram, mums ir jāizveido tabulas kopija Pārdevēji, jums būs jāraksta pieprasījums šādi:
SELECT * INTO Sellers_new FROM Pārdevēji
Atšķirībā no iepriekšējā dizaina INSERT INTO... ATLASĪT... kad tiek pievienoti dati esošā tabula, konstrukcija kopē datus jaunā tabulā. Varat arī teikt, ka pirmā konstrukcija importē datus, bet otrā eksportē. Izmantojot dizainu IZVĒLĒTIES ... UZ ... NO ... Jāņem vērā sekojošais:
Vispārējā sintakse:
a) ievietojot vienu jauna līnija pie galda:
IEVIETOT<таблица>[(kolonnas)]
VĒRTĪBAS
b) vienas vai vairāku rindu ievietošana tabulā, kas ņemta no apakšvaicājumā norādītā avota:
IEVIETOT<таблица>[(kolonnas)]
Noteikumi:
Elementu skaitam sadaļā "Slejas" ir jāatbilst elementu skaitam sadaļā "Vērtības"; datu tipiem ir jāsakrīt vai jāatļauj netieša konvertēšana;
Gadījumā, ja nav sadaļas "Slejas", sadaļā "Vērtības" ir jābūt tādam pašam vērtību skaitam, kāds ir rediģējamajā tabulā ir kopējais kolonnu skaits, turklāt vērtības ir jānorāda tajā pašā secība, kādā tiek deklarētas tabulas kolonnas; Tāpēc ieteicams vienmēr skaidri norādīt to kolonnu sarakstu, kurām tiks pievienotas jaunas vērtības;
Izmantojot sintaksi (b), SELECT apakšvaicājumu var adresēt vai nu tai pašai tabulai, vai citai datu bāzes tabulai, vai citai servera datu bāzei;
Ja noteiktai tabulas kolonnai ir norādīta noklusējuma vērtība un pievienotajā ierakstā vēlaties izmantot tieši šo vērtību, tad šīs kolonnas sadaļā “Vērtības” ir jāieraksta atslēgvārds NOKLUSĒJUMS.
Piemēri :
INSERT INTO detalizēti (detail_name)
VĒRTĪBAS
INSERT INTO piegādes (piegādātāja_id, piegādes_daudzums, piegādes_izmaksas,
piegādes_datums, detalizācijas_id)
VĒRTĪBAS (4, 177, 453,45, "25.09.2009", 1)
INSERT piegādātāju (piegādātāja_veids, piegādātāja_nosaukums)
VĒRTĪBAS (NOKLUSĒJUMS, "Smirnov S. S.")
Vispārējā sintakse:
ATJAUNINĀT<таблица>
IESTATĪT<столбец> = <значение> [, <столбец> = <значение>]
Piemēri :
SET svars = 210
SET material_name = "Alva"
KUR materiāla_id = 2
SET Department_id = NULL,
piegādes_datums = piegādes_datums + 1 /*palieliniet piegādes datumu par dienu
KUR piegādes_id = 1 VAI nodaļas_id > 3
SET detail_name = detaļas_nosaukums + "!!!"
KUR detaļas_nosaukums PATĪK "_а%" UN svars NO 6 UN 10
Vispārējā sintakse:
DZĒST<таблица>
<условие>
Piemēri :
WHERE detail_id IN (2, 5, 8)
KUR svars IR NULL
Vingrinājums:
Aizpildiet datu bāzi, izmantojot ManagementStudio.
Vispārējā atlases vaicājuma sintakse<список столбцов>
ATLASĪT<таблица(-ы) источник>
NO
Vaicājuma ieviešanas piemēri
Vienkāršākie jautājumi:
1. Izvēlieties detaļu nosaukumu un svaru
Rīsi. 5.1. Vaicājuma Nr.1 rezultāti
2. Materiālu tabulā atlasiet visu informāciju
Rīsi. 5.2. Vaicājuma Nr.2 rezultāti
DISTINCT unikalitāte
3. Piegādes tabulā atlasiet unikālus piegādātāju kodus
Rīsi. 5.3. Vaicājuma Nr.3 rezultāti
WHERE ierobežojums
Rīsi. 5.4. Vaicājuma Nr.4 rezultāti
5. Izvēlieties piegādātāju nosaukumus ar kodiem 1, 4 un 6
Rīsi. 5.5. Vaicājuma Nr.5 rezultāti
6. Atlasiet visu informāciju par piegādēm, kas veiktas līdz 2009. gada 1. oktobrim
Rīsi. 5.6. Vaicājuma Nr.6 rezultāti
7. Atlasiet visu informāciju par daļām, kas nesākas ar burtu “B” (jebkurā gadījumā) un kuru svars ir mazāks par 50
Rīsi. 5.7. Vaicājuma Nr.7 rezultāti
8. Izvēlieties nosaukumu un materiāla kodu daļām, kas sver no 5 līdz 10 g vai kurām ir burts “n” nosaukuma trešajā pozīcijā.
Rīsi. 5.8. Vaicājuma Nr.8 rezultāti
9. Izvēlieties piegādātāju nosaukumus, kas nav garāki par 15 rakstzīmēm
Rīsi. 5.9. Vaicājuma Nr.9 rezultāti
10. Izvēlieties detaļu piegādes mēnešus un gadus
Rīsi. 5.10. Vaicājuma Nr.10 rezultāti
Kārtošana PĒC
11. Sakārtojiet piegādes vispirms pēc piegādātāja koda un pēc tam pēc piegādes datuma
Rīsi. 5.11. Vaicājuma Nr.11 rezultāti
12. Izvēlieties piegādātāju nosaukumus ar kodiem 4, 6, 8, 9, sakārtotus alfabēta secībā apgrieztā secībā
Rīsi. 5.12. Vaicājuma Nr.12 rezultāti
Apkopošana un grupēšana GROUP BY
Rīsi. 5.13. Vaicājuma Nr.13 rezultāti
14. Noteikt vidējo svaru detaļām, kas izgatavotas no materiāla ar kodu 2
Rīsi. 5.14. Vaicājuma Nr.2 rezultāti
15. No piegādēm, kas veiktas līdz 2009. gada 1. oktobrim, izvēlieties lielāko piegādi un mazāko
Rīsi. 5.15. Vaicājuma Nr.15 rezultāti
16. Piegādātājiem, kuru kodi ir diapazonā no 5 līdz 8, aprēķiniet kopējo piegādāto detaļu skaitu
Rīsi. 5.16. Vaicājuma Nr.16 rezultāti
Rīsi. 5.17. Vaicājuma Nr.17 rezultāti
Ierobežojumi HAVING grupām
18. Izvēlieties materiālus, kuriem no tiem izgatavoto detaļu kopējais svars nav lielāks par 20
Rīsi. 5.18. Vaicājuma Nr.18 rezultāti
19. No 2008. gada piegādēm atlasiet detaļas, kuras tika piegādātas vairāk nekā vienu reizi
Rīsi. 5.19. Vaicājuma Nr.19 rezultāti
Veids ConversionCAST
20. Saņemt informāciju par piegādes datumiem teksta veidā
Rīsi. 5.20. Vaicājuma Nr.20 rezultāti
21. Iegūstiet informāciju no detaļu tabulas rindu veidā “X daļai ir Y svars”
Rīsi. 5.21. Vaicājuma Nr.21 rezultāti
AlternatīvasLIETAS
22. Sadaliet detaļas vieglās (svars līdz 20), vidējas (no 20 līdz 50) un smagas
Rīsi. 5.22. Vaicājuma Nr.22 rezultāti
NULL vērtību apstrāde
23. Iegūstiet informāciju par detaļām un to svariem un, ja detaļas svars nav norādīts, rakstiet -100, nevis NULL
Rīsi. 5.23. Vaicājuma Nr.23 rezultāti
Esamības funkcija EXISTS
24. Izvēlieties nosaukumu un materiāla kodu tikai tām detaļām, kuras kādreiz tika piegādātas
Rīsi. 5.24. Vaicājuma Nr.24 rezultāti
25. Izvēlieties to materiālu nosaukumus, no kuriem nav izgatavota neviena detaļa
Rīsi. 5.25. Vaicājuma Nr.25 rezultāti
Apakšvaicājumi
26. Saņemt informāciju par pēdējo (pēc datuma) piegādi
Rīsi. 5.26. Vaicājuma Nr.26 rezultāti
27. Saņemt visas detaļu piegādes, kas izgatavotas no materiāla koda 2
Rīsi. 5.27. Vaicājuma Nr.27 rezultāti
28. Iegūstiet informāciju par katru piegādātāju par tā piegādes pirmo (pēc datuma) datumu
Rīsi. 5.28. Vaicājuma Nr.28 rezultāti
29. Katram piegādātājam saņemiet viņa vārdu un pēdējā pasūtījuma datumu
Rīsi. 5.29. Vaicājuma Nr.29 rezultāti
Galdu savienošana ar JOIN
30. Iegūstiet veidlapas tabulu: detaļas nosaukums, materiāla nosaukums, no kura izgatavota šī daļa
Rīsi. 5.30. Vaicājuma Nr.30 rezultāti
31. Iegūstiet tabulu, piemēram: piegādātājs, daļas nosaukums, daudzums un piegādes datums daļām, kurām ir noteikts svars
Rīsi. 5.31. Vaicājuma Nr.31 rezultāti
32. Atlasiet visu informāciju par tām daļām, kas jebkad ir piegādātas
Rīsi. 5.32. Vaicājuma Nr.32 rezultāti
Rīsi. 5.33. Vaicājuma Nr.33 rezultāti
34. Izvēlieties materiālu un no tiem izgatavoto detaļu nosaukumus
Rīsi. 5.34. Vaicājuma Nr.34 rezultāti
35. Iegūstiet visus datus par piegādātājiem, piegādēm un detaļām
Rīsi. 5.35. Vaicājuma Nr.35 rezultāti
Pievienošanās UNION galdiem
36. Iegūstiet tabulu ar detaļu nosaukumiem un svaru, un tabulas pēdējā rindā jāietver kopsummas visu detaļu kopējā svara veidā.
Rīsi. 5.36. Vaicājuma Nr.36 rezultāti
37. Iegūstiet tabulu ar diviem laukiem, kur pirmais lauks ir detaļas, materiāla, piegādātāja vai piegādes datuma nosaukums, bet otrais lauks ir rindas garums no pirmā lauka.
Rīsi. 5.37. Vaicājuma Nr.37 rezultāti
SQL INSERT INTO un INSERT SELECT priekšraksti tiek izmantoti, lai tabulā ievietotu jaunas rindas. Ir divi veidi, kā izmantot instrukcijas:
Sintakse:
INSERT INTO tabulas_nosaukums VĒRTĪBAS (vērtība1, vērtība2, vērtība3,...); tabulas_nosaukums: tabulas nosaukums. vērtība1, vērtība2,.. : pirmās kolonnas, otrās kolonnas,... vērtības jaunajam ierakstam
Sintakse:
INSERT INTO tabulas_nosaukums (kolonna1, kolonna2, kolonna 3,..) VALUES (vērtība1, vērtība2, vērtība3,...); tabulas_nosaukums: tabulas nosaukums. kolonna 1: pirmās kolonnas nosaukums, otrā kolonna... vērtība1, vērtība2,.. : pirmās kolonnas, otrās kolonnas vērtības,... jaunam ierakstam
Pieprasījumi:
1. metode ( ievietojot tikai vērtības):
INSERT INTO Student VALUES ("5","HARSH","WEST BENGAL","8759770477","19");
Rezultāts:
Pēc INSERT INTO SELECT izmantošanas studentu tabula izskatīsies šādi:
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
1 | Ram | Deli | 9455123451 | 18 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Deli | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
5 | SARBI | RIETBENGĀLIJA | 8759770477 | 19 |
2. metode ( vērtību ievietošana tikai norādītajās kolonnās):
INSERT INTO Skolēna (ROLL_NR., VĀRDS, Vecums) VĒRTĪBAS ("5","PRATIK","19");
Rezultāts:
Studentu tabula tagad izskatīsies šādi:
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
1 | Ram | Deli | 9455123451 | 18 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Deli | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
5 | PRATIK | null | null | 19 |
Ņemiet vērā, ka kolonnas, kurām nav norādītas vērtības, ir iestatītas uz nulli.
Varat izmantot MySQL INSERT SELECT priekšrakstu, lai kopētu rindas no vienas tabulas un ievietotu tās citā.
Šī paziņojuma lietošana ir līdzīga INSERT INTO lietošanai. Atšķirība ir tāda, ka SELECT tiek izmantots, lai atlasītu datus no citas tabulas. Zemāk ir dažādi veidi izmantojot INSERT INTO SELECT:
Sintakse:
INSERT INTO first_table SELECT * FROM second_table; first_table: pirmās tabulas nosaukums. second_table: otrās tabulas nosaukums.
Mēs izmantojām priekšrakstu SELECT, lai kopētu datus no vienas tabulas, un INSERT INTO, lai to ievietotu citā.
Sintakse:
INSERT INTO pirmās_tabulas(kolonnu_nosaukumi1) SELECT kolonnas_nosaukumi2 FROM second_table; first_table: pirmās tabulas nosaukums. second_table: otrās tabulas nosaukums. col_names1: ar komatu(,) atdalīti kolonnu nosaukumi 1. tabulai. col_names2: ar komatu(,) atdalīti kolonnu nosaukumi 2. tabulai.
Mēs izmantojām priekšrakstu SELECT, lai kopētu datus tikai no otrās tabulas atlasītajām kolonnām, un MySQL INSERT INTO SELECT, lai tos ievietotu pirmajā tabulā.
Sintakse:
2. tabula: LateralStudent
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | KĀDAS | ROHTAK | 9687543210 | 20 |
Pieprasījumi:
1. metode ( ievietot visas rindas un kolonnas):
INSERT INTO Student SELECT * FROM LateralStudent;
Rezultāts:
Šis vaicājums visus datus no tabulas LateralStudent ievietos studentu tabulā. Pēc SQL INSERT INTO SELECT izmantošanas Studenta tabula izskatīsies šādi:
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
1 | Ram | Deli | 9455123451 | 18 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Deli | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | NIRAJ | NOIDA | 9786543210 | 19 |
9 | KĀDAS | ROHTAK | 9687543210 | 20 |
2. metode ( ievietojot atsevišķas kolonnas):
INSERT INTO Student(ROLL_NR,VĀRDS,Vecums) SELECT ROLL_NO, NAME, Age FROM LateralStudent;
Rezultāts:
Šis vaicājums studenta tabulā ievietos datus no tabulas LateralStudent kolonnām ROLL_NO, NAME un Age. Pārējās studentu tabulas kolonnas tiks iestatītas uz nulli. Pēc SQL INSERT SELECT izmantošanas tabula izskatīsies šādi:
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
1 | Ram | Deli | 9455123451 | 18 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Deli | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
7 | SOUVIK | Null | null | 18 |
8 | NIRAJ | Null | null | 19 |
9 | KĀDAS | Null | null | 20 |
Rezultāts:
Šis vaicājums atlasīs tikai pirmo rindu no tabulas LateralStudent, ko ievietot studentu tabulā. Pēc INSERT SELECT izmantošanas tabula izskatīsies šādi:
ROLL_NO | VĀRDS | ADRESE | TELEFONIS | Vecums |
1 | Ram | Deli | 9455123451 | 18 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | Deli | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
2 | RAMESH | GURGAONS | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
Šī publikācija ir draudzīgas projekta komandas sagatavotā raksta “SQL INSERT INTO Statement” tulkojums
Izmaiņu vaicājumi tiek izmantoti, lai pievienotu (INSERT INTO), dzēstu (DELETE) un atjauninātu (UPDATE) ierakstus tabulās.
Komandu INSERT INTO var izmantot, lai tabulas beigās pievienotu vienu vai vairākus ierakstus.
Komandas INSERT INTO sintakse ir šāda:
INSERT INTO Tabulas_nosaukums [(Field_Name)] VALUES (Data_Values);
Piemēram, tabulā "Grupas" ievietosim ierakstu, kas satur datus (1, BF-16a, 1, 1) attiecīgajās kolonnās (Grupas kods, nosaukums, kurss, semestris).
Lai to izdarītu, pieprasiet šādā formātā:
INSERT INTO Grupas (Grupas kods, nosaukums, kurss, semestris) VĒRTĪBAS (1, BF-16a, 1, 1);
ievadiet vaicājumu veidlapā, izpildot komandu "Query Builder" cilnē "Izveide" režīmā "SQL režīms" no izvēlnes Skats.
Saglabājiet pieprasījumu ar nosaukumu "Add_1_records". Rezultātā “Navigācijas apgabalā” parādīsies nesaistīts objekts - “Add_1_records” (1. att.).
Rīsi. 1.
Pēc pieprasījuma saglabāšanas šis pieprasījums ir jāizpilda, noklikšķinot uz ikonas “Palaist”. Komandas “Add_1_records” izpildes rezultātā pirmais ieraksts parādīsies tukšajā tabulā (2. att.)
Rīsi. 2.
Komanda UPDATE ir paredzēta, lai mainītu esošos ierakstus tabulas kolonnās, kas ļauj atjaunināt vērtības norādītajās tabulas kolonnās.
Komandas UPDATE sintakse ir šāda:
UPDATE Tabulas_nosaukums SET Kolonnas_nosaukums = New_Value WHERE Atlases_nosacījums;
SET klauzula norāda kolonnu nosaukumus, kuru dati ir jāmaina. WHERE klauzula nav obligāta, taču to var izmantot, lai norādītu tikai tās rindas kolonnās (tabulās), kuras ir jāatjaunina.
Izveidosim pieprasījumu mainīt ierakstu datu bāzes sql_training_st.mdb tabulā "Grupas".
Piemēram, mainīsimies jau esošais ieraksts pirmā atslēgas lauka ID tabulas "Grupas" slejā "Nosaukums".
Pieprasījums šādā formātā:
UPDATE Grupas SET nosaukums = "BF-16b" WHERE ID=1;
Saglabājiet pieprasījumu ar nosaukumu "Change_record_1". Rezultātā “Pārejas apgabalā” parādīsies objekts “Change_record_1” (3. att.).
Rīsi. 3.
Pēc pieprasījuma saglabāšanas šis pieprasījums ir jāizpilda, noklikšķinot uz ikonas “Palaist”. Komandas “Change_record_1” izpildes rezultātā parādīsies dialoglodziņš, kurā jāievada parametra vērtība ID=1 un jānospiež OK. Pēc šīm darbībām tabulā “Grupas” ieraksts laukā “Nosaukums” mainīsies no BF-16a uz BF-16b (4. att.).
Rīsi. 4.
Komanda DELETE ir paredzēta ierakstu dzēšanai no tabulas.
Ierakstu dzēšanas pieprasījuma formāts:
DELETE FROM Table_Name WHERE Atlases_nosacījums;
Izveidosim pieprasījumu mainīt ierakstu datu bāzes sql_training_st.mdb tabulā "Grupas".
Piemēram, dzēsīsim esošo ierakstu pirmā atslēgas lauka ID visās tabulas "Grupas" kolonnās (laukos).
Lai to izdarītu, pieprasiet šādā formātā:
DELETE FROM Groups WHERE ID=1;
izveidojiet vaicājumu veidlapā, izpildot komandu "Query Builder" cilnē "Izveide" režīmā "SQL režīms" no izvēlnes Skats.
Mēs saglabājam pieprasījumu ar nosaukumu “Delete_record_1”. Rezultātā “Pārejas apgabalā” parādīsies objekts “Delete_record_1” (5. att.).
Rīsi. 5.
Pēc pieprasījuma saglabāšanas šis pieprasījums ir jāizpilda, noklikšķinot uz ikonas “Palaist”. Komandas “Delete_record_1” izpildes rezultātā parādīsies dialoglodziņš, kurā jāievada parametra ID=1 vērtība un jānospiež OK. Pēc šīm darbībām tiks atvērts dialoglodziņš “Apstiprināt ierakstu dzēšanu”. Pēc apstiprināšanas tabulā "Grupas" tiks dzēsti dati visos laukos, t.i. ieraksts tika dzēsts (6. att.).
Rīsi. 6.
Jāņem vērā, ka, lai dzēstu datus atsevišķos tabulas laukos, ieteicams izmantot komandu UPDATE un aizstāt vērtības nepieciešamajos laukos ar Null. Ja vēlaties dzēst tabulu kopumā, izmantojiet operatoru DROP TABLE (operatora sintakse: DROP TABLE tabulas_nosaukums;).
Atjaunosim pirmo ierakstu tabulā "Grupas", izpildot komandu "Add_1_records", kā rezultātā atjaunosim pirmo ierakstu (7. att.).
Rīsi. 7.
Reizēm programmētājiem ir kvēla vēlme kaut ko nolasīt no datu bāzes. Programmētāji kļūst nervozi un aizkaitināmi, zaudē miegu un izmisīgi rāda ar pirkstiem uz tastatūru. Ikviena labklājības un pasaules miera labad apskatīsim dažas vienkāršas datu bāzes pārvaldības no C#, izmantojot ADO.NET un OLE DB. Lai gan šis mehānisms atbalsta dažādas datu bāzes, piemēram, Oracle, šeit un tagad mēs izmantosim MS SQL serveris.
Divi galvenie uzdevumi, strādājot ar datu bāzi
2. SQL komandas izpilde, kas kaut ko veic serverī (ievietot, atjaunināt, dzēst, izsaukt funkciju vai saglabāto procedūru
3. Secīgā nolasīšana no atlasītās atlases rindas pa rindiņai. Galvenokārt izmanto tīmekļa lietojumprogrammās, ir vieglāk lejupielādēt visu atlasi uzreiz RAM, ietaupījums, lasot tikai nepieciešamās rindas, ir niecīgs.
4. Rets gadījums. Automātiska atjaunināšana tabulas datu bāzē, pamatojoties uz izmaiņām DataTable (parasti rediģēt, izmantojot vizuālo saskarni). Reālajā dzīvē dati parasti tiek nolasīti, izmantojot sarežģītu kaudzes savienojuma vaicājumu vai skatu, tāpēc automātiskā sinhronizācija nav piemērota.
Galvenās šiem nolūkiem izmantotās klases: OleDbConnection - savienojums ar datu bāzi, izveidots ar virkni, kurā ir savienojuma parametri, atvērt, aizvērt, OleDbCommand - izveidots ar savienojuma gadījumu un sql komandu, ja jums vienkārši nepieciešams veikt atjauninājumu vai iegūt ar vienu vērtību, tad ar to pietiek, OleDbDataAdapter — izveidots ar OleDbCommand, specializējas vienreizēja rindu kopu nolasīšanā DataTable, var automātiski izveidot DataTable kolonnas, pamatojoties uz atlasi, pārsūtīt izmaiņas no DataTable uz tabulu datu bāze, OleDbDataReader - datu tabulas rindu secīga lasīšana pa vienam (tas darbojas iekšēji OleDbDataAdapter), DataTable / DataSet - galvenais datu konteiners. OleDbType uzskaitījums saglabā datu bāzes datu tipus.
Izmantojot System.Data; izmantojot System.Data.OleDb; // savienojuma virkne, izmantotā sistēma(Integrated Security=SSPI;) string connString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=databaseName;Data Source=serverName"; // alternatīva savienojuma virkne, izmantojot MS SQL Server autentifikāciju // connString = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=databaseName;Connect Timeout=20;Data Source=serverName;Uid=userName;Pwd=userPassword ; " OleDbConnection dbConn = new OleDbConnection(connString); dbConn.Open(); someDataTable = new DataTable(); OleDbDataAdapter dbAdapteris = new OleDbDataAdapter("izvēlieties COLUMN1, COLUMN2 no TEST_TABLE ORDER BY COLUMN2", dbConn); // tukšas tabulas iekšējā struktūra tiks izveidota automātiski, pamatojoties uz nolasītajiem datiem, ja tabulas struktūra jau ir norādīta (piemēram, izmantojot drukātu DataSet), tad dati tiks ierakstīti kolonnās ar atbilstošiem nosaukumiem vai jauni; kolonnas tiks pievienotas dbAdapter.Fill(someDataTable); // alternatīva iespēja lai aizpildītu tabulu DataSet // dbAdapter.Fill(someDataSet, "someDataTable"); dbConn.Close();
2. SQL komandas izpilde, kas kaut ko veic serverī (ievietot, atjaunināt, dzēst, izsaukt funkciju vai saglabātu procedūru.
Īpaši vērts atzīmēt problēmas ar datumiem. Datumu ieviešana .Net ir ārkārtīgi greiza - sākotnēji datumi nevar būt tukši, bet dzīvē tie ir visu laiku tukši. Visvairāk pareizais lēmums- izmantojiet īpašu datuma klasi, kas izlabo Microsoft programmētāju kļūdas. Slinkāki izstrādātāji saglabā visus datumus kodā kā virknes un pārvērš tos par DateTime tikai nepieciešamības gadījumā, piemēram, rakstot datu bāzē vai DataTable. Nullable DateTime nepalīdz, jo tukšam datumam saskarnē vajadzētu izskatīties kā tukšai virknei, un, ierakstot datu bāzē kā DBNull.Value, pat banāls nulles kods netiek pārvērsts šajās vērtībās bez papildu dejošanas ar tamburīns.
Pirmā opcija ietver vienkāršu vaicājuma virknes sapludināšanu. Uzskata par sliktu praksi un īpaši bīstamu tīmekļa lietojumprogrammās, jo tā ir neaizsargāta pret hakeru uzbrukumiem. Problēma ar tukšiem datumiem nav tik vienkārši atrisināta. Turklāt, strādājot ar datumiem, parādās papildu problēma - dažādi datumu virkņu formāti atkarībā no .Net Framework, izstrādes vides un sql servera reģionālajiem iestatījumiem. Tas var izskatīties sirreāli — tas pats vaicājums darbojas programmā SQL Managment Studio, taču, izpildot no koda, avarē. Daļēji saglabāts ar īpašu datumu virknes formātu Tomēr tas bieži tiek darīts mazās iekšējai lietošanai paredzētas programmās, kuru esamība ārpasauli nekad neuzzinās.
OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "IEVIETOT TEST_TABULA (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VĒRTĪBAS (" + intVariable", " + stringVariable" , " + dateTimeVariable.ToString("ggggMMdd") +""); dbCommand.ExecuteNonQuery();
Pareizā opcija ietver komandas izveidi ar stingri drukātu parametru kopu. Uzskatiet, ka iepriekšējā rindkopa nepastāvēja.
OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "IEVIETOT TEST_TABULA (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VĒRTĪBAS (?, ?, ?)"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Vērtība = intMainīgs; dbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar).Vērtība = virkneMainīgs; if (stringDate == "") ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Vērtība = DBNull.Vērtība; ) else ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value). Convert.ToDateTime(stringDate) dbCommand.ExecuteNonQuery();
Saglabātā procedūra tiek izsaukta tieši tādā pašā veidā, daudzveidības labad ir vēl viena iespēja ierakstīt vērtības parametros (tas nav īpaši saistīts ar saglabāto procedūru):
OleDbCommand someDbComm = new OleDbCommand("someStoredProcedure", this.dbConn); someDbComm.CommandType = CommandType.StoredProcedure; someDbComm.Parameters.Add("@parameter1", OleDbType.VarChar); someDbComm.Parameters.Add("@parameter2", OleDbType.VarChar); someDbComm.Parameters.Value = "Katrai problēmai vienmēr ir risinājums — vienkāršs, ērts un, protams, nepareizs"; someDbComm.Parameters.Value = "Henrijs Luiss Menkens"; someDbComm.ExecuteNonQuery(); !}
Parametra apraksta paplašināta versija, kas norāda lauka lielumu un piesaisti noteiktai tabulas kolonnai.
DbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar, 100, "VARCHAR_COLUMN").Vērtība = virkneMainīgs;
Ja mums nav jāpiesaista komandas parametrs konkrētam DataTable laukam, tad izmēru vislabāk nenorādīt vispār, piemēram, ja virkne ir mazāka par norādīto Varchar garumu, tad labais .Net framework pievienos atstarpes virknei līdz norādītajam garumam, sabojājot uz serveri nosūtītos datus.
Viena lauka vērtību nolasa, izmantojot ExecuteScalar() metodi
OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "ATLASĪT TEST_SLEJU NO PĀRBAUDES_TABULAS, KUR ID_SLENA = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Vērtība = intMainīgs; int rezultāts = Convert.ToInt32(dbCommand.ExecuteScalar());
Īpaši jāatzīmē, ka ExecuteScalar atgriež Object un, ja pieprasījums vispār neko neatgrieza, tad rezultāts būs nulle un konvertēšana uz parastu datu tipu neizdosies ar kļūdu. Ja ir iespējama situācija, kad mēs neko nesaņemam, mums ir jādara šādi:
OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "ATLASĪT TEST_SLEJU NO PĀRBAUDES_TABULAS, KUR ID_SLENA = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Vērtība = intMainīgs; objekta rezultātsObj = dbCommand.ExecuteScalar() int rezultāts = -1; // noklusējuma vērtība, kas nozīmē tukšu rezultātu if(resultObj != null) ( rezultāts = Convert.ToInt32(dbCommand.ExecuteScalar()); )
3. Secīgā nolasīšana no atlasītās atlases rindas pa rindiņai
Nolasa vienu rindiņu (vairākas tiek lasītas cilpā);
OleDbCommand dbCommand = new OleDbCommand(atlasiet PERSONAS_ID, VĀRDS, UZVĀRDS no TEST_TABLE, dbConn); OleDbDataReader dbReader = dbCommand.ExecuteReader(); dbReader.Lasīt(); virknes nosaukums = Convert.ToString(dbReader["NAME"]); virknes uzvārds = Convert.ToString(dbReader["UZVĀRDS"]); dbReader.Close();
4. Rets gadījums. Tabulas automātiska atjaunināšana datu bāzē, pamatojoties uz izmaiņām DataTable (parasti rediģē, izmantojot vizuālo saskarni).
Katram iespējamajam gadījumam nepieciešams uzrakstīt četras komandas DbAdapter - atlasīt, ievietot, atjaunināt, dzēst.
DbAdapter.InsertCommand = new OleDbCommand("ievietot TEST_TABLE (NAME, ĢIMENE, AGE) vērtības (?, ?, ?)", dbConnection); dbAdapter.InsertCommand.Parameters.Add("NAME", OleDbType.VarChar, 100, "NAME"); dbAdapter.InsertCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); // datu tipiem ar nemainīgu garumu komandā norādītais garums tiek ignorēts dbAdapter.InsertCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); // pievienot atjaunināšanas komandu dbAdapter.UpdateCommand = new OleDbCommand("atjaunināt TEST_TABELAS komplektu NOSAUKUMS = ?, ĢIMENE = ?, AGE = ? kur ID = ?, dbConnection); dbAdapter.UpdateCommand.Parameters.Add("NAME", OleDbType.VarChar,100, "NAME"); dbAdapter.UpdateCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); dbAdapter.UpdateCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); dbAdapter.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); // pievienot dzēšanas komandu dbAdapter.DeleteCommand = new OleDbCommand("dzēst no TEST_TABELAS kur ID = ?", dbSavienojums); dbAdapter.DeleteCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); try ( // pārsūta visas izmaiņas no DataTable uz tabulu datubāzē dbAdapter.Update(table); ) catch (Izņēmuma kļūda) ( MessageBox.Show("Kļūda saglabājot datus!" + error.Message); return; ) MessageBox Rādīt ("Izmaiņas saglabātas!");