W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów.



Podobne dokumenty
Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Krótki przegląd zapytań

Bazy danych. Polecenia SQL

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Projektowanie systemów baz danych

Bazy Danych i Usługi Sieciowe

Autor: Joanna Karwowska

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych i usługi sieciowe

Instalacja MySQL.

PHP: bazy danych, SQL, AJAX i JSON

Relacyjne bazy danych. Podstawy SQL

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Ref. 7 - Język SQL - polecenia DDL i DML

Kurs. Podstawy MySQL

Bazy danych 7. SQL podstawy

Wykład 5. SQL praca z tabelami 2

Język SQL, zajęcia nr 1

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

CREATE USER

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

15. Funkcje i procedury składowane PL/SQL

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Wykład 05 Bazy danych

Wykład 8. SQL praca z tabelami 5

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Relacyjne bazy danych. Podstawy SQL

Przestrzenne bazy danych Podstawy języka SQL

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

P o d s t a w y j ę z y k a S Q L

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

Składowane procedury i funkcje

Bazy danych. Dr inż. Paweł Kasprowski

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

Struktura drzewa w MySQL. Michał Tyszczenko

2. Podstawy języka SQL

Autor: Joanna Karwowska

Wdrożenie modułu płatności eservice. dla systemu Magento

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

SQL (ang. Structured Query Language)

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Połączenie z bazą danych : mysql h u root -p Enter password: *******

Informatyka 3 : Instrukcja 4

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Wykład 5 Charakterystyka języka SQL. Elementy obliczeń relacyjnych.

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Wykład 4. SQL praca z tabelami 1

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Bazy danych 5. Samozłaczenie SQL podstawy

Bazy danych 10. SQL Widoki

Imię i Nazwisko Data Ocena. Laboratorium 7

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Wykład 5: PHP: praca z bazą danych MySQL

Informatyka 3 : Instrukcja 4 / 5

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Bazy danych 6. Klucze obce. P. F. Góra

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Systemy GIS Tworzenie zapytań w bazach danych

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Leszek Stasiak Zastosowanie technologii LINQ w

Wykład 6. SQL praca z tabelami 3

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Ćwiczenie 14 autoryzacja

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Bazy danych 4. SQL podstawy. P. F. Góra

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Oracle PL/SQL. Paweł Rajba.

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Programowanie w Ruby

Język SQL, zajęcia nr 2

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Oracle PL/SQL. Paweł Rajba.

Aplikacje WWW - laboratorium

Część VII Baza danych MySQL i PHP

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Transakcje jednocześnie ACID

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Ćwiczenie zapytań języka bazy danych PostgreSQL

Instrukcja warunkowa i złoŝona.

Instrukcja do instalacji/aktualizacji systemu KS-FKW

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Transkrypt:

W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów. Logujemy się do bazy danych (jak pamiętamy, słuŝy do tego oprogramowanie klienta, czyli programik mysql). ZałóŜmy sobie przede wszystkim nową bazę do ćwiczeń. Zanim to zrobimy warto upewnić się, jakie bazy juŝ istnieją. Wykonajmy polecenie SHOW DATABASES. UWAGA: Polecenie SHOW DATABASES nie jest poleceniem języka SQL! Polecenie to jest charakterystyczne dla bazy danych mysql (choć większość serwerów obsługuje podobne narzędzia). Mamy, jak wać 3 standardowe bazy danych mysql i naszą bazę poligon. Usuńmy bazę poligon i załóŝmy ją ponownie (dzięki czemu będzie ona na pewno pusta). Przy okazji zobaczymy, Ŝe w jednej linijce moŝna wydawać kilka poleceń SQL wystarczy oddzielać je średnikiem. Teraz trzeba podłączyć się do bazy poligon (prawdopodobnie nadal jesteśmy jeszcze w bazie głównej, czyli mysql). Robimy to za pomocą polecenia USE (to takŝe jest komenda specyficzna dla mysql). Alternatywnie, moŝemy wyjść z klienta mysql (słuŝy do tego skrót /q) i zalogować się z parametrem D poligon. ZałóŜmy sobie tablice bazy danych na podstawie takiego oto diagramu ERD: nazwa MIASTO kod pesel STUDENT STUPRZ EDYCJA nazwisko WYDZIAŁ ocena imie s m nazwa p PRZEDMIOT nazwa

Sprawdźmy, czy utworzyły się wszystkie tablice: Wnikliwy czytelnik zauwaŝy, Ŝe tablica STUDENT nie została utworzona w takiej formie, jak wnieje na diagramie ERD. Zajmiemy się tym jednak później. Wprowadźmy kilka miast. Jak pamiętamy, słuŝy do tego polecenie INSERT INTO. Ma ono następującą składnię (poniŝszy zapis nie obejmuje wszystkich moŝliwości): INSERT INTO nazwa_tabeli (kolumna) VALUES ( wartość ) Pamiętać naleŝy, Ŝe z zasady nie ustawia się wartości pól oznaczonych jako auto_increment. Teoretycznie moŝna to zrobić (o ile wartości się nie powtórzą), ale nie jest to zgodne z regułami dobrego programowania. W tym miejscu warto teŝ przypomnieć, Ŝe własność kolumny auto_increment nie jest częścią standardu SQL (czy raczej: SQL92). W oryginale funkcjonowało pojęcie SEQUENCE (sekwencji), czyli specjalnego obiektu, którego wielkość zwiększała się o 1 przy kaŝdym odczycie, co pozwalało korzystać z niego jako z generatora zwiększających się liczb. Jeśli tabela ma więcej niŝ jedną kolumnę, posługujemy się taką postacią polecenia INSERT: INSERT INTO nazwa_tabeli (kol1, kol2,... koln) VALUES (wartość1, wartość1, wartośćn)

W ten sposób moŝemy wpisać jeszcze kilka rekordów. Sprawdźmy, jakie wartości wpisaliśmy do tabeli: Warto zwrócić uwagę na interesujące polecenie mysql, które umoŝliwia przesłanie wyniku zapytania SELECT do pliku. SłuŜy do tego konstrukcja SELECT (...) INTO OUTFILE nazwa_pliku: Po jego wykonaniu, utworzony zostaje plik o następującej zawartości: Jak wać, jest to bardzo prosty plik tekstowy co jest akurat w typ przypadku zaletą, bo umoŝliwia w miarę bezbolesne przenoszenie pliku pomiędzy platformami takimi jak Unix i Windows. W tym miejscu powiedzmy teŝ, Ŝe aby importować pliki danych do mysql powinny mieć one właśnie taką prostą postać. Oznacza to, Ŝe Ŝeby zaimportować plik np. Excela (czy nawet inny tekstowy w którym pola oddzielają np. przecinki) musimy pobawić się trochę z jego edycją. Usuńmy teraz istniejące rekordy z tablicy i sprawdźmy, czy udało się to zrobić: Do ładowania danych z pliku słuŝy polecenie LOAD DATA INFILE plik INTO TABLE tablica:

Jak wać, w tablicy STUDENT znajduje się niepotrzebna kolumna nazwa. Z drugiej strony, brakuje pola m łączącego ją z tabelą MIASTO. PoniewaŜ nie chcemy utracić wpisanych rekordów, dokonamy modyfikacji działającej tabeli, do czego posłuŝymy się poleceniem ALTER TABLE: Po pierwsze usuniemy istniejącą, zbędną kolumnę: ALTER TABLE student DROP COLUMN nazwa Po drugie dostawiamy nową kolumnę (oczywiście specyfikując jej typ): ALTER TABLE student ADD COLUMN m int Jak wać, polecenie ALTER TABLE słuŝy do wykonywania operacji na całej tabeli (ściślej: na jej strukturze).

Kolumna PESEL zawiera wartości puste. śeby być ścisłym są to wartości NULL, czyli: nie ustawione, bowiem formalnie wartością pustą kolumny typu char jest łańcuch pusty:. Spróbujmy ustawić je na wartość brak danych. SłuŜy do tego polecenie UPDATE: UPDATE student SET pesel = brak danych Jak wać, UPDATE zmieniło wartości wszystkich rekordów. Polecenie to moŝe jednak być zastosowane dla wybranych wierszy tabeli: Spróbujmy teraz zasymulować błędne działanie ustawmy ten sam pesel innej osobie. Jak wać, serwer nie protestuje. Dzieje się tak dlatego, Ŝe kolumna pesel nie ma wartości UNIQUE (unikalność). Spróbujmy jeszcze raz skorzystać z polecenia ALTER TABLE. Jest ono na tyle wszechstronne, Ŝe umoŝliwia takŝe najróŝniejsze modyfikacje kolumn łącznie ze zmianą typu. Warto zwrócić tu uwagę, Ŝe polecenie ALTER TABLE składa się niejako z dwóch części: po pierwszej określamy tabelę, na której chcemy dokonać zmian, a następnie precyzujemy, co chcemy osiągnąć (np. ADD COLUMN, DROP COLUMN, albo MODIFY COLUMN): ALTER TABLE student MODIFY COLUMN pesel char(11) UNIQUE

Oczywiście baza danych napotyka na problem związany z wielokrotnym wpisem brak danych co kłóci się z postulatem unikalności. Jedyną wartością, która moŝe się powtarzać w takiej kolumnie jest NULL: Sprawdźmy teraz, co stałoby się, gdybyśmy próbowali wprowadzić ponownie ten sam pesel: Jak wać, ochroniliśmy naszą bazę danych przed błędnymi wpisami. Nadal jednak nie mamy ustawionych połączeń z tablicą MIASTO (zawiera ono miasto, w którym urodził się nasz student). PokaŜemy teraz prostą sztuczkę, która pozwoli nam uporać się z tym problemem. Po pierwsze, sprawdźmy, jakie wartości występują w tablicy MIASTO: Jak wać, są to wartości od 1 do 7. Oznacza to, Ŝe powinniśmy do pola m tabeli STUDENT wpisywać właśnie takie liczby. Sztuczka polega na wykorzystaniu funkcji RAND. Serwer bazy danych ma wbudowany generator liczb losowych jest nim funkcja rand(). MoŜemy wywołać ją za pomocą SELECT: UwaŜny czytelnik zapewne zauwaŝy, Ŝe coś jest niejasne. SELECT... FROM powinno odnosić się do tablicy, podczas gdy nie utworzyliśmy tablicy o nazwie dual. Nie zauwaŝmy jej takŝe, jeśli wykonamy SHOW TABLES: Zapytanie odnoszące się do funkcji rand() zwróciło jednak poprawny wynik. Dzieje się tak dlatego, Ŝe kaŝda baza SQL ma wbudowaną niewoczną tabelę o nazwie dual. Jej istnienie było potrzebne

właśnie po to, aby moŝna było wykonywać takie pobrania wartości, jak to wzieliśmy w przykładzie z random. Co ciekawe, funkcja agregująca count() pokazuje, Ŝe w tabeli dual znajduje się jeden rekord, ale nie moŝna go wyświetlić zwykłym selectem: Warto teŝ dodać, Ŝe mysql pozwala na ominięcie frazy FROM w tym przypadku ale nie kaŝda baza danych zachowuje się w ten sposób. Innymi słowy, w przypadku serwera mysql polecenia SELECT rand() FROM dual SELECT rand() są równoznaczne. Funkcja rand() zwraca wartości z przedziału <0,1). PoniewaŜ interesuje nas większy zakres zmienności, jej wynik pomnoŝymy przez 6. Oznacza to, Ŝe 6*rand() jest liczbą z zakresu <0,6). Teraz wystarczy dodać 1, aby uzyskać przedział <1,7). Ostatnim krokiem jest zaokrąglenie wyniku, co zapewnia nam, Ŝe otrzymamy liczbę całkowitą z przedziału 1-7: Pozostaje teraz wykorzystać zgromadzona wiedzę do automatycznego (choć LOSOWEGO) przypisania miast do studentów. Taka operacja nie ma sensu w rzeczywistej bazie, ale jest często wykorzystywana do prac testowych lub dla inicjalnego wypełnienia danymi. Dla ćwiczenia, moŝna sprawdzić, czy pamiętamy, jak policzyć liczbę studentów w kaŝdym mieście:

Usuńmy teraz jednego studenta na przykład tego, któremu wpisaliśmy juŝ pesel. MoŜemy to zrobić na dwa sposoby albo specyfikując określone, albo nakładając warunek na kolumnę pesel: DELETE FROM student WHERE = 4 Lub DELETE FROM student WHERE pesel IS NOT NULL W tym miejscu jedna uwaga raczej naleŝy unikać intuicyjnej składni pesel <> NULL. Większość serwerów baz danych traktuje wartość NULL specyficznie i dlatego dla jej obsługi w warunkach logicznych uŝywa się klauzul: kolumna IS NULL lun kolumna IS NOT NULL.