Podstawy języka SQL cz.1



Podobne dokumenty
Projektowanie systemów baz danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

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

Wykład 4. SQL praca z tabelami 1

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

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

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

Tworzenie baz danych i tabel

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

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

Bazy danych. Dr inż. Paweł Kasprowski

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

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

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Autor: Joanna Karwowska

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

Bazy danych 7. SQL podstawy

Administracja i programowanie pod Microsoft SQL Server 2000

Systemy GIS Tworzenie zapytań w bazach danych

Krzysztof Kadowski. PL-E3579, PL-EA0312,

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wykład 5. SQL praca z tabelami 2

MySQL. Darmowa baza danych. Æwiczenia praktyczne

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Instrukcja CREATE TABLE

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

Wykład 2. SQL 1 Structured Query Lenguage

Bazy danych Ćwiczenia projektowe

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

Przestrzenne bazy danych Podstawy języka SQL

Język SQL, zajęcia nr 1

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

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

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Bazy danych 5. Samozłaczenie SQL podstawy

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

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

Dr Michał Tanaś(

Bazy danych. Polecenia SQL

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

Lab.8: Podstawy języka SQL.

Wykład 8. SQL praca z tabelami 5

SIECI KOMPUTEROWE I BAZY DANYCH

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Bazy danych 4. SQL- podstawy

Podstawowe informacje o bazach danych. Technologie Informacyjne

Wykład :45 BD-1 W_3

Wprowadzenie do języka SQL

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

Paweł Rajba

Język SQL. Rozdział 2. Proste zapytania

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

2 Przygotował: mgr inż. Maciej Lasota

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Aspekty aktywne baz danych

Typy Oracle atrybutów relacji Typ NUMBER (1)

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

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Relacyjne bazy danych. Podstawy SQL

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Typy Oracle atrybutów relacji Typ NUMBER (1)

Wykład 05 Bazy danych

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Księgarnia internetowa Lubię to!» Nasza społeczność

Bazy danych - wykład wstępny

Instalacja MySQL.

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

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

(ang. Structured Query Language).

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Widok Connections po utworzeniu połączenia. Obszar roboczy

SQL Structured Query Language

CREATE USER

Język baz danych SQL cz.1

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

Relacyjne bazy danych. Podstawy SQL

Bazy danych - Materiały do laboratoriów VIII

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

WPROWADZENIE DO JĘZYKA SQL

BAZY DANYCH. Wykład 1: Wprowadzenie do baz danych. Marcin Czajkowski. Przygotowanie wykładu: Małgorzata Krętowska

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

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

Oracle11g: Wprowadzenie do SQL

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Przedmowa Rozpoczęcie pracy z bazą danych Microsoft SQL Server Podstawowe instrukcje języka SQL...39

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

Bazy danych i usługi sieciowe

Projektowanie Baz Danych GiG-2-KG Ćw. 5. Podstawy języka SQL

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Wprowadzenie do baz danych

TEST E.14 BAZY DANYCH

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Laboratorium nr 7. Temat: Podstawy języka zapytań SQL (część 1) 1. Wprowadzenie do laboratorium

Transkrypt:

Język SQL (ang. Structured Querty Language) jest to język zapytao, stosowany w relacyjnych bazach danych do komunikowania się z bazą. Jest również podstawowym językiem programowania baz danych. Język SQL został opracowany w latach 60. w firmie IBM. W 1986 SQL został oficjalnym standardem, wspieranym przez Międzynarodową Organizację Normalizacyjną (ISO) i jej członka, Amerykaoski Narodowy Instytut Normalizacji (ANSI). Język SQL to język deklaratywny, w którym definiuje się warunki, jakie musi spełniad koocowy wynik, natomiast nie definiuje się sposobu, w jaki ten wynik zostanie osiągnięty. W języku SQL wyrażenia nazywane są kwerendami. Język SQL wykonuje operacje na obiektach tworzących strukturę hierarchiczną. Obiekt w bazie musi mied niepowtarzalną nazwę (ang. Alias). Odwołanie do obiektu bazy danych: nazwa_serwera.nazwa_bazy_danych.nazwa_schematu.nazwa_obiektu Serwer zawiera wiele baz danych, baza zawiera wiele schematów, a w każdym schemacie może byd wiele tabel, tabela składa się z wielu kolumn. W praktyce, w ścieżce dostępu do obiektu pomija się elementy powyższego schematu: - pominiecie nazwy_serwera spowoduje wykonanie instrukcji przez serwer z którym jesteśmy połączeni; - pominięcie nazwy_bazy_danych spowoduje wykonanie instrukcji w bazie, z którą jesteśmy połączeni; - pominięcie nazwy_schematu spowoduje wykonywanie instrukcji w domyślnym schamiacie użytkownika dbo. Zmienna relacyjna (tabela) posiada dane pogrupowane w atrybuty (kolumny). Domeną (dziedziną) są wartości jakie mogą przyjąd dane umieszczone w kolumnie. Identyfikator to nazwa kolumny. Język SQL podzielony jest na następujące podgrupy: - instrukcje DDL (ang. Data Definition Language) realizują zadania definiowania danych (służą do tworzenia, modyfikowania i usuwania obiektów baz danych): CREATE ALTER DROP TRUNCATE - instrukcje DML (ang. Data Manipulation Language) realizują zadania manipulowania danymi (służą do odczytywania i modyfikowania danych): INSERT UPDATE DELETE - instrukcje DCL (ang. Data Control Language) realizują zadania kontrolowania dostępu do danych(służą do nawadnia i odbierania uprawnieo użytkownikom): GRANT DENY 1

REVOKE - instrukcje DQL (ang. Data Querty Language) realizują zadania pobierania informacji spełniające określone warunki: SELECT - instrukcje TCL (ang. Transaction Control Language) realizują zadania sterowania przepływem danych (kontrola transakcji): COMMIT ROLLBACK SAVEPOINT Składnia języka SQL - identyfikator to nazwa jednoznacznie definiująca obiekt, taki jak baza danych, tabela czy kolumna. Zasady tworzenia identyfikatorów: dł. maks. 128 znaków, może zawierad cyfry, litery i symbole: @ $ # (pozostałe znaki specjalne i spacje są niedozwolone!); nie może zaczynad się cyfrą - musi zaczynad się literą (zaczynające się @ oznaczają zmienną a zaczynające się # oznaczają obiekt tymczasowy), nie może byd słowami kluczowymi języka SQL, gdy identyfikator składa się z kilku wyrazów zamiast spacji używamy _ nazwy krótkie, jednoznacznie opisujące obiekt. Uwaga! Dla przejrzystości polecenia języka SQL piszemy wielkimi literami, np. CREATE TABLE magazyn; - literał to wartośd stała: napisy, ciągi znaków umieszczone w apostrofach, np. 'dzieo', 'Numer domu' napisy bitowe, poprzedzone literą B, np. B'11011' napisy szesnastkowe, poprzedzone literą x, np. X'A18B' dokładne wartości liczbowe (ze znakiem lub bez) z możliwością stosowania kropki dziesiętnej, np. -25.4 lub 0.03 UWAGA! Wszystkie wartości liczbowe, ciągi znaków i daty jeśli nie są identyfikatorami, są traktowane jako stałe, czyli literały, ciągi znaków są umieszczane w apostrofach, np. 'Zakopane', 'BMW','20-09- 2014 - operator odgrywa rolę łączników, wyróżniamy operatory: arytmetyczne: suma + równica - iloczyn * iloraz / modulo % 2

znakowe: konkatencja (złączenie ciągu znaków) + lub dowolny ciąg znaków % jeden znak _ logiczne: koniunkcja AND alternatywa OR negacja NOT porównania: równy = mniejszy < większy > mniejszy lub równy <= większy lub równy >= różny <> lub!= operatory relacji: IN (...) - służy do sprawdzania, czy wartośd znajduje się na wcześniej zdefiniowanej liście, BETWEEN... AND... - służy do sprawdzania, czy wartośd znajduje się w podanym przedziale, LIKE - służy do wybierania wartości, które odpowiadają wcześniej ustalonemu wzorcowi. Wzorzec ustalamy za pomoca symboli: % i _ REGEXP, RLIKE - służy do dopasowania do wyrażania regularnego ISNULL - służy do wyszukiwania wartości NULL. - słowa kluczowe to wyrazy zastrzeżone w języku SQL: instrukcje, np. CREATE, SELECT klauzule, np. WHERE, JOIN; nazwy typów danych, np. INT, CHAR; nazwy funkcji systemowych, np. ISNULL, ABS; terminy zarezerwowane do późniejszego użycia w systemie. - komentarze, które są ignorowane przez język SQL: komentarz jednowierszowy -- komentarz wielowierszowy /*...*/ - terminatory SQL: terminatory poleceo kooczą polecenia, są związane z dialektami (w Oracle MySQl, PostgreSQL polecenie kooczy się średnikiem) terminatory wsadowe kooczą ciąg poleceo. Typy danych w języku SQL Typy danych określają rodzaj informacji przechowywanych w kolumnach tabeli. http://www.promotic.eu/pl/pmdoc/subsystems/db/mssql/datatypes.htm 3

Typy liczbowe - liczby całkowite (ang. Integer) int - od -2^31 (-2 147 483 648) do 2^31-1 (2 147 483 647)(zajmują 4 bajty pamięci) (może byd z unsigned, wtedy jest bez znaku) smallint - od -2^15 (-32 768) do 2^15-1 (32 767)( zajmują 2 bajty pamięci) bigint - od -2^63 (-9 223 372 036 854 775 808) do 2^63-1 (9 223 372 036 854 775 807) (zajmują 8 bajtów pamięci) tinyint - od 0 do 255 (zajmuje 1 bajt pamięci) numeric (p,s) - precyzja 1-38, domyślna 18 a skala 0-p, domyślna 0) duże wartości liczbowe, np. kwoty pieniężne, np. numeric(8,2) będzie przechowywał liczby do 99999999,99 p - precyzja (ang. Precision) liczba miejsc przed przecinkiem - liczba znaczących cyfr, służy do wykonywania obliczeo (musi byd dodatnia) s - skala (ang. Scale) dopuszczalna liczba miejsc po przecinku, nie może byd ujemna (równa 0 lub dodatnia) - liczby zmiennoprzecinkowe (ang. Floating Point) (liczby rzeczywiste czyli wartości ułamkowe) real - (1E-37 do 1E+37 z precyzją przynajmniej 6 znaków po przecinku, zajmuje 4 bajty pamięci) double - (1E-307 do 1E+308 z precyzją przynajmniej 15 znaków po przecinku, zajmuje 8 bajtów pamięci) float (n) - typ danych ze zmienną dokładnością, gdzie n wynosi ilośd bitów mantysy (1-24, dokładnośd 7 cyfr, wielkośd 4 bajty i 25-53, dokładnośd 15 czfr i wielkośd 8 bajtów) decimal - podobnie jak numeric - typy daty i czasu datetime - typ danych określający datę i czas od 1.1.1753 do 31.12.9999 z dokładnością około 3ms. Wartości są zaokrąglone na.000,.003 a.007. (długośd 8 bajtów) smalldatetime - typ danych określający datę i czas od 1.1.1900 do 6.6.2079 z dokładnością 1m. Wartości do 29.998 są zaokrąglane w dół a wartości od 29.999 są zaokrąglane wgórę na najbliższą minutę (długośc 4 bajty) year typ danych określający rok, jeśli zostanie podany zły, jego wartośd zmieni się w 0000 data typ danych określający datę w formacie określonym przez ustawienia serwera - typy znakowe (ang. charakter) Uwaga! Używając typu znakowego w nawiasie określamy maksymalną liczbę znaków, którą będzie przechowywał, np. varchar(10), a wprowadzany ciąg znaków umieszczamy w apostrofach, np. 'Robert' char - łaocuch znaków o stałej długości, długośd 8000 znaków varchar (ang. character varying)- łaocuch znaków o zmiennej długości, długośd maksymalna 8000 znaków. Uwaga! Jeśli kolumnę definiujemy jako varchar(10) system dynamicznie na każdą krotkę przydzieli 10 znaków, ale jeśli umieścimy imię 'Maciek' to system przydzieli tylko 6 znaków. W przypadku char(10) i wpisania do krotki 'Maciek' system bez względu na ilośd znaków w imieniu przydzieli na nie 10 znaków. 4

nchar - łaocuch znaków Unicode o stałej długości, długośd maksymalna 4000 znaków. nvarchar - łaocuch znaków Unicode o zmiennej długości, długośd maksymalna 4000 znaków text - łaocuch znaków o zmiennej długości, maksymalna długośd 2^31-1 (2 147 483 647) znaków. ntext - łaocuch znaków Unicode o zmiennej długości, długośd maksymalna 2^30-1 (1 073 741 823) znaków. - typ walutowy money - pieniężny typ danych od -2^63 (-922 337 203 685 477.5808) do 2^63-1 (922 337 203 685 477.5807) z dokładnością jednej dziesięciotysięcznej jednostki (8 bajtów) smallmoney - pieniężny typ danych od -2^31 (-214 748.3648) do 2^31-1 (214 748.3647) z dokładnością jednej dziesięciotysięcznej (4 bajty) - typ binarny binary - dane binarne o stałej długości, długośd maksymalna 8000 bajtów. varbinary - dane binarne o zmiennej długości, długośd maksymalna 8000 bajtów. typy specjalne image - dane binarne o zmiennej długości, długośd maksymalna 2^31-1 (2 147 483 647) bajtów. xml - bit - liczba całkowita 0 lub 1 (rozmiar 1 bit) - typ pusty NULL Jest wartością specjalną, oznacza wartośd pustą (w komórce nie została umieszczona żadna wartośd). NULL jest różny od wartości 0 i od pustego ciągu znaków. - typ wyliczeniowy ENUM Definicja własnego typu wyliczeniowego CREATE TYPE tydzien AS ENUM ('PONIEDZIAŁEK', 'WTOREK', 'ŚRODA', 'CZWARTEK', 'PIĄTEK', 'SOBOTA', 'NIEDZIELA'); Uwaga! Wprowadzone dane rozpoznają wielkości liter: 'Piatek' to nie to samo, co 'piątek' Użycie nowego typu CREATE TABLE przepracowanie_dni (dni tydzien); Oprogramowanie do tworzenia baz danych: - MySQL firmy Oracle, elementy: serwer MySQL Community Server http://dev.mysql.com/downloads/mysql/ śrowisko graficzne MySQL Workbench http://dev.mysql.com/downloads/workbench/ 5

- Pakiety wolnego oprogramowani do obsługi witryn internetowych, zawierający programy Open Source: serwer Apache, język skryptowy PHP, bazę danych MySQL i oprogramowanie uzupełniające: WAMP (Windows Apache MySQL PHP) pakiet dla systemu Windows; http://www.wampserver.com/en/ LAMP pakiet dla systemów Linuksowych; FAMP pakiet dla systemu FreeBSD; MAMP pakiet dla systemu Mac OS X. Dialekty języka SQL w zależności od systemu bazodanowego: - PL/SQL (ang. Procedural Language/SQL) serwery Oracle MySQL Server - PL/pgSQL (ang. Procedural Language/PostgreSQL) serwery PostgreSQL - T-SQL (ang. Transact-SQL) serwery Microsoft SQL Server i Sybase Adaptive Server - SQL PL (ang. SQL Procedural Language) serwery IBM Instrukcje DDL (ang. Data Definition Language) - CREATE nazwa_obiektu - tworzy nowy obiekt; - DROP nazwa_obiektu - usuwa istniejący obiekt; - ALTER nazwa_obiektu - zmienia strukturę obiektu; Uwaga! Usunąd bazę może tylko administrator lub właściciel bazy danych, nikt do bazy nie może byd w tym czasie podłączony. TWORZENIE BAZ DANYCH Tworzenie nowej bazy danych CREATE DATABASE nazwa_bazy; CREATE DATABASE szkola; Pokazywanie baz danych SHOW DATABASES; Użycie bazy danych USE nazwa_bazy; USE szkola; Usuwanie bazy DROP DATABASE nazwa_bazy; DROP DATABASE szkola; TWORZENIE TABEL Tworzenie tabeli w bazie danych CREATE TABLE nazwa_tabeli (nazwa_kolumny_1 typ_kolumny_1 [ atrybuty], 6

nazwa_kolumny_2 typ_kolumny_2 [ atrybuty],...); CREATE TABLE uczniowie ( id int(11) AUTO_INCREMENT PRIMARY KEY, imie varchar(30), nazwisko varchar(40), pesel varchar(11), ulica varchar(30), nr_domu varchar(8), kod_miasto varchar(6), miasto varchar(40) ); Uwaga! Każda tabela powinna mied pole, które zawiera klucz podstawowy PRIMARY KEY. Kolumna z kluczem głównym nie może byd pusta - dodajemy zawsze NOT NULL Pokazywanie tabel w bazie danych SHOW TABLES; Pokazywanie pól tabeli DESCRIBE nazwa_tabeli; DESCRIBE uczniowie; Usuwanie tabeli DROP TABLE nazwa_tabeli; DROP TABLE uczniowie; Zasady: - słowa kluczowe pisane są dużymi literami; - argumenty wyrażeo pisane są małymi literami; - nazwa_tabeli i nazwa_kolumny muszą mied unikatową nazwę; - każda kolumna musi mied zdefiniowany typ; - jeśli kolumna jest typu znakowego trzeba podad jej maks. długośd, np. nazwisko varchar(40); - utworzone tabele są puste; - bazy danych mają formę katalogów, a tabele są plikami; - pole to przecięcie wiersza i kolumny; - wpis do bazy to rekord (krotka). Atrybuty definiują ograniczenia dla tabeli, określają jakie dane mogą byd w niej zapisane. - NULL - w kolumnie mogą wystąpid wartości puste (domyślnie ustawiony atrybut); - NOT NULL - w kolumnie nie mogą wystąpid wartości puste, np. pesel varchar(11) NOT NULL; - PRIMARY KEY klucz główny, identyfikuje jednoznacznie każdą krotkę (wiersz). Uwaga! Co najmniej jedna z kolumn musi byd kluczem głównym, jest unikatowa i automatycznie indeksowana. Kolumna z kluczem głównym nie może byd pusta - dodajemy zawsze NOT NULL, np. id_goscia int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL; 7

Jeżeli jest wiele kluczy głównych to podajemy je na koocu, np. PRIMARY KEY (nazwa_kolumny_1, nazwa_kolumny_2,...nazwa_kolumny_n); Klucz główny może zostad wybrany z kluczy kandydujących automatycznie, jeżeli wybieramy go sami to jest to wymuszenie klucza głównego (ang. PRIMARY KEY constraint) - AUTO_INCREMENT - automatyczna numeracja kolumny (automatyczne wypełnianie kolumny po dodaniu kolejnej krotki (wiersza w tabeli); - IDENTITY - oznacza wzrost wartości w kolumnie dla której został zdefiniowany, np. id_goscia INT IDENTITY (1,1) NOT NULL PRIMARY KEY; oznacza wzrost wartości kolumny o 1 począwszy od wartości 1 - DEFAULT - wprowadzenie do tabeli domyślnej wartości, np. rok_wydania varchar(4) NOT NULL DEFAULT '2012'; - UNIQUE - stosowany, gdy wartości w kolumnie nie mogą się powtarzad, nie blokuje wprowadzenia wartości NULL, np. tytul varchar(100) NOT NULL UNIQUE; - CHECK pozwala wprowadzid ograniczenia zakresu danych, można używad operatorów NOT, OR, AND, np. rok_wydania int CHECK (BETWEEN 2010 AND 2014); MODYFIKACJA TABELI Modyfikacja tabeli ALTER TABLE nazwa_tabeli zmiana; Przykłady: - dodanie kolumny, np. ALTER TABLE Ksiazki ADD liczba_stron varchar(5); - usunięcie kolumny ALTER TABLE Ksiazki DROP COLUMN Liczba_stron; - zmiana nazwy kolumny ALTER TABLE nauczyciele RENAME TO pracownicy; - zmiana definicji istniejącej kolumny ALTER TABLE uczniowie MODIFY imie varchar(10) NOT NULL; 8