Bu "çaydanlık" yeni başlayanlar için MySQL'e adanmıştır. Bina SQL İsteklerinin Temelleri

  • Öğretici

Ders kitabı nedir

Bu ders kitabı, SQL (DDL, DML) 'de bir "hafızamın damgası" gibi bir şeydir. Bu, profesyonel faaliyetler sırasında birikmiş olan ve sürekli kafamda depolanan bilgilerdir. Bu, en sık veritabanları ile çalışırken kullanılan benim için yeterli miktarda. Daha eksiksiz SQL tasarımları uygulamak gerekirse, genellikle internette bulunan MSDN kütüphanesine hitap ederim. Benim görüşüme göre, her şeyi kafamda tutmak çok zor ve bunun için özel bir ihtiyaç yok. Ancak temel tasarımların bilmesini çok faydalıdır, çünkü Oracle, MySQL, Firebird gibi birçok ilişkisel veritabanındaki aynı formda dahili olarak uygulanırlar. Farklılıklar temel olarak ayrıntılı olarak farklı olabilecek veri türlerinden oluşur. SQL dilinin ana tasarımları o kadar değil ve sürekli pratikte, çabucak hatırlandılar. Örneğin, nesneleri oluşturmak (tablolar, kısıtlamalar, dizinler vb.) Elinizde olması yeterlidir. metin düzeltici Veritabanıyla çalışmak için ortamlar (IDE) ve belirli bir veritabanı türü (MS SQL, Oracle, MySQL, Firebird, ...) çalışmak üzere görsel araç seti keskinliğini incelemeye gerek yoktur. Uygun ve tüm metnin gözlerin önünde olduğu ve örneğin bir dizin veya sınırlama oluşturmak için sayısız sekmede çalışmanıza gerek yoktur. Veritabanıyla sürekli çalışırsanız, oluşturun, değiştirin ve özellikle yeniden poz verirse, Nesneyi komut dosyalarının yardımıyla, görsel modda yaparsanız daha hızlıdır. Ayrıca komut dosyası modunda (buna göre, doğrulukla), nesnelerimin adı için kuralları ayarlamak ve kontrol etmek daha kolaydır (öznel görüşüm). Ek olarak, komut dosyaları, bir veritabanında yapılan değişikliklerin (örneğin, test) aynı formda başka bir bazda (üretken) aktarılması durumunda uygun bir şekilde kullanılır.

SQL dili birkaç parçaya ayrılmıştır, burada en önemli parçayı değerlendireceğim:
  • DML - Aşağıdaki yapıları içeren Veri Manipülasyonu Dili (Veri Manipülasyonu Dili):
    • Seç - veri örneklemesi
    • Eklemek - yeni veri ekle
    • Güncelleme - Veri Güncellemesi
    • Sil - Verileri Sil
    • Birleştirme - Veri Birleştirme
Çünkü Bu ders kitabındaki teorinin nasıl çok az olacağını ve tüm tasarımların pratik örneklerle açıklanacağı uyguluyucuyum. Ek olarak, programlama dilinin ve özellikle SQL'in sadece pratikte ustalaşabileceğine, kendiniz serpiştirebileceğine ve bunu kendiniz veya bu tasarımı gerçekleştirdiğinizde ne olacağına inanıyorum.

Bu ders kitabı, adım adım prensibin üzerine oluşturuldu, yani. Tutarlı bir şekilde okumak ve derhal örnekleri gerçekleştirmek için arzu edilir. Ancak, bir tür ekibi daha ayrıntılı olarak öğrenmeniz gerektiğinde, örneğin MSDN kütüphanesinde belirli bir İnternet araması kullanın.

Bu ders kitabını yazarken, MS SQL Server sürümünün 2014 veritabanı kullanıldı, komut dosyalarını yürütmek için MS SQL Server Management Studio (SSMS) kullandım.

Kısaca MS SQL Server Management Studio (SSMS) Hakkında

SQL Server Management Studio (SSMS) - Veritabanı bileşenlerini yapılandırmak, yönetmek ve yönetmek için Microsoft SQL Server'ın bir yardımcı programı. Bu yardımcı program, komut dosyası düzenleyicisini (çoğunlukla kullanılacak) ve nesneler ve sunucu ayarlarıyla çalışan bir grafik programı içerir. Ana SQL Server Management Studio Aracı, kullanıcının, sunucu nesnelerini görüntülemesini, sunucu nesnelerini ve ayrıca yönetmesini sağlayan nesne Explorer'dır. Bu metin kısmen Wikipedia'dan ödünç alınmıştır.

Yeni bir komut dosyası düzenleyici oluşturmak için "Yeni Sorgu / Yeni İstek" düğmesini kullanın:

Geçerli veritabanını değiştirmek için açılır listeyi kullanabilirsiniz:

Belirli bir komut (veya komut grubu grubunu) gerçekleştirmek için, onu seçin ve Yürüt / Çalıştır düğmesine veya "F5" tuşuna basın. Sadece bir komut şu anda editörde bulunursa veya tüm komutları yerine getirmeniz gerekirse, hiçbir şey tahsis etmeniz gerekmez.

Komut dosyalarını yürütdükten sonra, özellikle nesneleri oluşturur (tablolar, sütunlar, dizinler) Değişiklikleri görmek için, uygun grubu (örneğin, tablo), tablonun kendisi veya içindeki sütun grubunu seçerek bağlam menüsünden güncellemeyi kullanın.

Aslında, burada verilen örneklerin uygulanmasını bilmemiz gereken tek şey bu. SSMS yardımcı programı boyunca geri kalan, bağımsız olarak öğrenmek kolaydır.

Biraz teori

İlişkisel veritabanı (RBD veya ayrıca basitçe veritabanı bağlamında) birbirleriyle ilgili bir dizi tablodur. Kabaca söylersek, veritabanı verilerin yapılandırılmış biçimde depolandığı bir dosyadır.

DBMS - Bu veritabanlarının kontrol sistemi, yani. Bu, belirli bir veri tabanı türü ile çalışmak için bir takım aracıdır (MS SQL, Oracle, MySQL, Firebird, ...).

Not
Çünkü Hayatta, konuşma konuşmasında, çoğunlukla: "Oracle veritabanı veya hatta sadece" Oracle ", aslında" Oracle DBMS "anlamına gelir, daha sonra bu ders kitabı bağlamında, Veri tabanı bazen kullanılacaktır. Bağlamdan, tam olarak ne söz konusu olduğunu anlayacağını düşünüyorum.

Tablo bir sütun kümesidir. Sütunlar, alanları veya sütunları da arayabilir, tüm bu kelimeler aynı şeyi ifade eden eşanlamlar olarak kullanılacaktır.

Tablo ana RBD nesnesidir, tüm RBD verileri tablo sütunlarında kayıtlı satırdır. Satırlar, Kayıtlar - ayrıca eş anlamlı.

Her tablo için, aslında ve sütunları, daha sonra onlara gittikleri adlar verilir.
MS SQL'de Nesne Adı (Tablo Adı, Sütun Adı, Dizin Adı vb.) Maksimum 128 karakter uzunluğunda olabilir.

Referans için - Oracle veritabanı adları, maksimum 30 karakter uzunluğuna sahip olabilir. Bu nedenle, belirli bir veritabanı için, limiti karakter sayısına göre karşılamak için nesnelerin adı için kurallarınızı geliştirmeniz gerekir.

SQL, veritabanındaki istekleri DBMS üzerinden yapmanızı sağlayan bir dildir. Belirli bir DBMS'de, SQL dili belirli bir uygulamaya (lehçesi) olabilir.

DDL ve DML - SQL dilinin alt kümesi:

  • DDL dili, veritabanının yapısını oluşturmak ve değiştirmek için kullanılır, yani. Tabloları ve bağlantıları oluşturmak / değiştirmek / silmek için.
  • DML Dili, veri verileriyle manipülasyonlara izin verir, yani. Satırlarıyla. Tablolardan bir veri örneği yapmanıza, tabloya yeni veri eklemenizi ve mevcut verileri güncellemenizi ve silmenizi sağlar.

SQL'de, 2 tür yorumu kullanabilirsiniz (tek satır ve çok satır):

Tek hatlı yorum
ve

/ * Çok satır yorum * /

Aslında, bunun teorisi için hepsi yeterli olacaktır.

DDL - Veri Tanımlama Dili (Veri Açıklama Dili)

Örneğin, tabloyu çalışanlardaki verilerle, programcı formu olmayan olağan kişilerde düşünün:

Bu durumda, tablonun sütunları aşağıdaki isimlere sahiptir: tabel numarası, tam adı, doğum tarihi, e-posta, konum, bölüm.

Bu sütunların her biri, içinde bulunan veri türüyle karakterize edilebilir:

  • Tabel Numarası - Tamsayı
  • Tam Adı - Dize
  • Doğum tarihi - Tarih
  • E-posta - Dize
  • Konum - Dize
  • Bölüm - Dize
Sütun tipi, bu sütunu ne tür bir veri depolayabileceğinden bahsedilen bir karakteristiktir.

Başlamak için, yalnızca MS SQL'de kullanılan aşağıdaki ana veri türlerini hatırlamak yeterli olacaktır:

Değer vermek MS SQL Tanımlama Açıklama
Değişken uzunluk satırı varchar (n)
ve
Nvarchar (n)
N Number N kullanarak, ilgili sütun için mümkün olan maksimum dize uzunluğunu belirleyebiliriz. Örneğin, "Tam Ad" sütununun değerinin maksimum 30 karakter içerebileceğini söylemek istiyorsak, NVARCHARCH (30) tipini belirlemek gerekir.
Nvarchar'tan varchar arasındaki fark, Varchar'ın ASCII formatında satırları saklamanıza izin verdiği gerçeğinde, bir karakterin 1 bayt ve NVARCharcher, her karakterin 2 bayt sürdüğü yerde dizeleri depolar.
Varchar Tipi, yalnızca bu alanın Unicode karakterleri saklamanız gerekmediğinden% 100 eminseniz kullanılmalıdır. Örneğin, varchar adresleri saklamak için kullanılabilir. e-postaÇünkü Genellikle sadece ASCII karakterleri içerirler.
Dize Sabit Uzunluğu char (n)
ve
Nchar (n)
Değişken uzunluk dizisinden, bu tip, çizginin uzunluğu N karakterden daha azsa, her zaman uzunluk n boşluklarına doğru tamamlanır ve bu formdaki veritabanında devam eder, yani, yani. Veritabanında, tam olarak N karakterleri kaplar (bir karakterin CHAR için 1 bayt ve NCAR tipi için 2 bayt alır). Uygulamamda, bu tür çok nadiren kullanılır ve kullanılırsa, esas olarak char formatında (1), yani kullanılır. Alan bir karakter tarafından belirlendiğinde.
Tamsayı int. Bu tür, hem olumlu hem de olumsuz olan sütunda yalnızca tamsayıları kullanmamızı sağlar. Referans için (şimdi bizimle çok alakalı değildir) - -2 147 483 648 ila 2 147 483 647'den Int tipine izin veren sayı aralığı. Bu genellikle tanımlayıcıları belirlemek için kullanılan ana tiptir.
Gerçek veya geçerli şamandıra. Eğer konuşursak basit dilBu, bir ondalık noktanın (virgül) bulunabileceği sayılardır.
tarih tarihi. Sütunun sadece üç bileşenden oluşan tarihi kaydedilmesi gerekiyorsa: sayılar, ay ve yıl. Örneğin, 02/15/2014 (15 Şubat 2014). Bu tür "Resepsiyon Tarihi" sütunu, "Doğum Tarihi", vb. İçin kullanılabilir. Sadece tarihi düzeltmemiz için önemli olduğu durumlarda veya kurucu zaman bizim için önemli olmadığında ve atılamazsa veya bilinmiyorsa.
Zaman zaman. Bu tür, sütunun yalnızca zaman verilerini kaydetmesi gerekiyorsa, yani kullanılabilir. İzle, dakika, saniye ve milisaniyeli. Örneğin, 17: 38: 31.3231603
Örneğin, günlük "Uçuş kalkış zamanı".
tarih ve saat datetime. Bu tür, hem tarih hem de saati aynı anda tasarruf etmenizi sağlar. Örneğin, 02/15/2014 17: 38: 31.323
Örneğin, bu bir olayın tarihi ve saati olabilir.
Bayrak bit. Bu tür, "Evet" / "Hayır" tipinin değerlerinin depolanması için uygundur, burada "evet" 1 olarak depolanacak, ancak hayır, 0 olarak kaydedilecektir.

Aynı alan değeri, yasaklanmazsa, bu amaç için null anahtar sözcüğü kullanılamaz.

Örnekleri gerçekleştirmek için, test adı verilen bir test veritabanı oluşturun.

Aşağıdaki komutu çalıştırarak basit bir veritabanı (ek parametreler belirtmeden) oluşturabilirsiniz:

Veritabanı testi oluşturun
Veritabanını komutla kaldırabilirsiniz (bu komuta çok dikkatli olmaya değer):

Damla veritabanı testi.
Veritabanımıza geçmek için, komutu çalıştırabilirsiniz:

Kullanım testi.
Veya SSMS menü alanındaki açılır listede Test Veritabanını seçin. Çalıştığımda, bu genellikle veritabanları arasında geçiş yönteminin kullanılması için kullanılır.

Şimdi veritabanımızda, Kirillerin boşluklarını ve sembollerini kullanarak, açıklamaları kullanarak bir tablo oluşturabiliriz:

Tablo oluşturun [çalışanlar] ([tabel numarası] int, [isim] nvarchar (30), [doğum tarihi] tarihi, nvarchar (30), [pozisyon] nvarchar (30), [bölüm] nvarchar (30))
Bu durumda, köşeli parantez içinde isimleri bitirmek zorunda kalacağız [...].

Ancak, veritabanında daha fazla rahatlık için, nesnelerin tüm isimleri Latin'i ayarlamak ve boşlukları isimlerdeki boşlukları kullanmamak için daha iyidir. MS SQL'de, bu durumda, her kelime bir büyük harfle başlar, örneğin "Tabel Numarası" alanı için, adın kişiyi ayarlayabiliriz. Ayrıca adında, örneğin Phonenumber1 numaralarını kullanabilirsiniz.

Bir notta
Bazı DBMS'de, aşağıdaki "Phone_Number" ad formatı daha çok tercih edilebilir, örneğin, böyle bir format genellikle Oracle veritabanında kullanılır. Doğal olarak, alanın adını belirlerken, DBMS'de kullanılan anahtar kelimelerle çakışmaması arzu edilir.

Bu nedenle, kare parantez ile sözdizimini unutabilir ve tabloyu silebilirsiniz [Çalışanlar]:

Damla masası [çalışanlar]
Örneğin, çalışanlara sahip bir tablo "çalışanlar" olarak adlandırılabilir ve alanları aşağıdaki isimlerden istenebilir:

  • ID - Tabel Numarası (Çalışan Tanımlayıcısı)
  • İsim - Tam Adı
  • Doğum Günü - Doğum Tarihi
  • E-posta - E-posta
  • Pozisyon - Konum
  • Bölüm - Bölüm
Çok sık, Kelime Kimliği, tanımlayıcı alanını adlandırmak için kullanılır.

Şimdi masamızı oluşturalım:

Masa çalışanları oluşturun (ID int, nvarchar (30), doğum günü tarihi, nvarchar (30), pozisyon nvarchar (30), bölüm Nvarchar (30))
Gerekli sütunları doldurmak için ayarlamak için, NULL seçeneğini kullanabilirsiniz.

Önceden var olan bir alan tablosu için aşağıdaki komutları kullanarak geçersiz kılabilirsiniz:

Saha Güncelleme Kimliği Alter Masa Çalışanları Alter Sütun Kimliği Int Null Değil - Güncelleme Adı Alter Tablo Çalışanları Alter Sütun Adı Nvarchar (30) Null Değil

Bir notta
Çoğu DBMS için genel SQL dili kavramı aynı kalır (en azından bu konuda, çalıştığım DBM'leri yargılayabilirim). Farklı DDL farklı DBMS'lerde DDL, esas olarak veri türlerinde sonuçlanır (sadece isimleri, aynı zamanda uygulamalarının parçaları da olabilir), SQL dilinin özgüllüğü (yani, tek başına takımların özü biraz farklı olabilir. Fakat Aracı, ne yazıklarında küçük farklılıklar olabilir, ancak tek bir standart yoktur). SQL'nin temellerine sahip olmak, bir dbms'den diğerine kolayca hareket edebilir, çünkü Bu durumda, yalnızca yeni DBMS'de komutların uygulanmasının ayrıntılarını anlamanız gerekir. Çoğu durumda, basitçe bir analoji yapmak yeterli olacaktır.

Bir Oluşturan Masa Çalışanları Tablosu Oluşturma (ID Int - Oracle Tipi Int - Bu, (38) NAME NUMARISI (30) için eşdeğer (sarmalayıcı). ), Pozisyon nvarchar2 (30), bölüm nvarchar2 (30)); - Kimlik ve İsim alanlarını güncelleme (burada ALTER sütun yerine, değiştirin (...) değiştirin (...)) Alter Tablo çalışanları Değiştir (ID int , nvarchar2 (30) null değil); - PK eklenmesi (Bu durumda, tasarım MS SQL'de görünür, aşağıda gösterilecektir) ALTER TABLOSUSU Çalışanları Kısıtlama PK_EvPloyees Birincil Anahtar (ID);
Oracle için Varchar2 tipinin uygulanmasında farklılıklar vardır, kodlaması veritabanı ayarlarına bağlıdır ve metin, örneğin UTF-8 kodlamasında kaydedilebilir. Ek olarak, Oracle'daki alanın uzunluğu hem bayt hem de karakterlerde ayarlanabilir, bunun için, alan uzunluğundan sonra gösterilen ek seçenekler bayt ve karakter kullanılır, örneğin:

Adı Varchar2 (30 bayt) - Alan kapasitesi 30 bayt'a eşit olacaktır Varchar2 (30 char) - Alan kapasitesi 30 karaktere eşit olacaktır.
Varsayılan bayt veya char tarafından hangi seçenek kullanılacak, Oracle Type Varchar2'de (30) basit bir özellik durumunda, veritabanı ayarlarına bağlı olarak, IDE ayarlarına da ayarlanabilir. Genel olarak, kolayca karıştırabilirsiniz, bu nedenle, Varchar2 tipi kullanılıyorsa, Oracle'ın durumunda (ve bu bazen UTF-8 kodlamasını kullanırken) açıkça reçete etmeyi tercih ederim (çünkü Dize genellikle sembollerde okumak için daha uygundur).

Ancak bu durumda, tabloda herhangi bir veri varsa, daha sonra komutların başarılı bir şekilde yürütülmesi için, kimlik ve isim alanı tablolarının tüm sıralarında tamamlanmış olması gerekir. Bunu örnekte göstereceğiz, verileri kimlik alanı, konum ve bölümdeki tabloya yerleştireceğiz, bu, aşağıdaki komut dosyası ile yapılabilir:

Çalışanları (kimlik, konum, bölüm) değerlerini (1000, n "yönetmen", n "yönetim"), (1001, n "programcı", n "IT"), (1002, n "muhasebeci", n " Muhasebe "), (1003, n" Kıdemli Programcı ", N" IT ")
Bu durumda, INSERT komutu da bir hata verir, çünkü Eklendiğinde, gerekli ad alanının değerlerini belirtmediydik.
Bu, orijinal tabloda bu veriler olsaydı, ALTER TABLO Çalışanları Alter Sütun Kimliği INT Null Komutu Başarılı Olmaz ve ALTER TABLOSYONU Çalışanları, Oradaki Ad alanında bir hata mesajı verilmez. Null (belirtilmemiş) değerler.

Ad alanı için değerler ekleyin ve verileri tekrar çevirin:


NILL değil, oluştururken doğrudan da kullanılabilir. yeni masa. Tablo Oluştur komutu bağlamında.

Önce tabloyu komutu kullanarak silin:

Masa çalışanları.
Şimdi zorunlu sütunlar kimliği ve adı olan bir tablo oluşturun:

Masa çalışanları oluşturun (id int null değil, nvarchar (30) , doğum günü tarihi, nvarchar (30), konum nvarchar (30), bölüm Nvarchar (30))
Null değerlerin izin verileceği (belirtilmemiş) olduğu anlamına gelen NULL yazmak için sütun adının adından sonra da yapabilirsiniz, ancak bu, bu özellik varsayılan olarak kastettiği için gerekli değildir.

Aksine olması gerekiyorsa, mevcut bir sütunun doldurulması için isteğe bağlı yapılması gerekiyorsa, aşağıdaki komut sözdizimini kullanırız:

Alter Masa Çalışanları Alter Sütun Adı Nvarchar (30) NULL
Ya da sadece:

Alter Masa Çalışanları Alter Sütun Adı Nvarchar (30)
Ayrıca bu komut alan türünü herhangi bir uyumlu türde değiştirebilir veya uzunluğunu değiştirebiliriz. Örneğin, ad alanını 50 karaktere kadar genişletelim:

ALTER TABLO Çalışanları Alter Sütun Adı Nvarchar (50)

Birincil anahtar

Bir tablo oluştururken, benzersiz bir kolona veya hatlarının her birine benzersiz bir sütun grubuna sahip olması arzu edilir - bu benzersiz değer açıkça tanımlanabilir. Bu değer, tablonun birincil anahtarı denir. Çalışanlarımız için, böyle benzersiz bir değer ("Çalışanın Tablo Numarasını içeren" ID sütunu olabilir ("Çalışanın Tablo Numarasını" - Durumumuza izin verin, değer her çalışan için benzersizdir ve tekrarlanamaz).

Mevcut bir tabloya birincil anahtar oluşturma komutunu kullanabilir:

ALTER TABLE çalışanları Kısıtlama PK_EvPloyees Birincil Anahtar (ID) ekleyin
"Pk_employees" nerede, birincil anahtardan sorumlu kısıtlamanın adıdır. Genellikle, "pk_" öneki, tablo adının geldiği birincil anahtarı adlandırmak için kullanılır.

Birincil anahtar birkaç alandan oluşursa, bu alanlar virgül aracılığıyla parantez içinde listelenmelidir:

ALTER TABLO ADI_TABLE Kısıtlama Birincil Anahtar Adı (Alan1, Alan 2, ...)
MS SQL'de, birincil anahtara dahil olan tüm alanların, boş olmayan bir özelliğin olmaması gerektiğini belirtmekte fayda var.

Ayrıca, birincil anahtar bir tablo oluştururken doğrudan tanımlanabilir, yani Tablo Oluştur komutu bağlamında. Tabloyu silin:

Masa çalışanları.
Ve sonra aşağıdaki sözdizimini kullanarak oluşturun:

Masa Çalışanları Oluştur (ID int null değil, nvarchar (30) , doğum günü tarihi, nvarchar (30), pozisyon nvarchar (30), departman nvarchar (30), kısıtlama pk_employees birincil anahtar (ID) - Sonuçta PK'yi tanımla sınırlama gibi alanlar)
Tabloda boş bir süre oluşturduktan sonra:

Çalışanları (kimlik, pozisyon, bölüm, isim) değerleri (1000, n "yönetmen", n "yönetim", n "ivanov i.i."), (1001, n "programcı", n "IT", n "Petrov Pp "), (1002, n" muhasebeci ", n" muhasebe ", n" sidorov ss "), (1003, n" Kıdemli Programcı ", N" IT ", n" Andreev A. Fakat. "
Tablodaki birincil anahtar sadece bir sütunun değerlerinden oluşursa, aşağıdaki sözdizimini kullanabilirsiniz:

Masa Çalışanları Oluştur (ID int null kısıtlama pk_employees birincil anahtarı - NVARCHARCHE alan özelliği (30) nadasın bir özelliği olarak belirtiyoruz, doğum günü tarihi, nvarchar (30), pozisyon nvarchar (30), bölüm nvarchar (30) )
Aslında, kısıtlamanın adı istenemez, bu durumda bir sistem adı verilecektir ("pk__employee__3214ec278da42077" gibi):

Masa çalışanları oluşturun (ID int null değil, nvarchar (30) , doğum günü tarihi, nvarchar (30), konum nvarchar (30), bölüm Nvarchar (30), birincil anahtar (ID))
Veya:

Masa Çalışanları Oluştur (ID Int Null Null Anahtar, Naml Nvarchar (30) Null, Doğum Günü Tarihi, NVARCHARCHAR (30), Pozisyon Nvarchar (30), Bölüm Nvarchar (30))
Ancak, kalıcı tabloların her zaman kısıtlamanın adını açıkça belirlemesini tavsiye ederim, çünkü Açıkça belirtilen ve anlaşılabilir ada göre, manipülasyonları yapmak daha kolay olacaktır, örneğin, silebilirsiniz:

ALTER TABLO ÇALIŞMALARI DROST Kısıtlama PK_Ev
Ancak böyle kısa bir sözdizimi, kısıtlamaların adlarını belirlemeden, geçici veritabanı tabloları oluştururken uygulanacak uygundur (zaman tablosunun adı # veya ## ile başlar), kullandıktan sonra silinir.

Uygun

Şu anda aşağıdaki komutları inceledik:
  • Masa oluşturmak Name_table (alanların aktarımı ve türleri, kısıtlamalar) - Geçerli veritabanında yeni bir tablo oluşturmaya yarar;
  • Tablo Name_table - mevcut veritabanından bir tabloyu silmek için kullanılır;
  • Tabloyu değiştir Name_table Alter sütunu. RETRIBUNITY NAME ... - Bir sütun türünü yükseltmek veya ayarlarını değiştirmek için kullanılır (örneğin, karakteristik null veya null olmadığını belirtmek için);
  • Tabloyu değiştir Name_table Kısıt ekle. Program adı BİRİNCİL ANAHTAR.(Field1, Field2, ...) - Birincil anahtarı mevcut bir tabloya ekleyin;
  • Tabloyu değiştir Name_table Damla kısıtlama. Astar Adı - Tablodan bir kısıtlama silinmesi.

Geçici tablolar hakkında biraz

MSDN'den kesin. MS SQL Server'da, iki tür geçici tablo vardır: Yerel (#) ve Global (##). Yerel geçici tablolar, bağlantı oturumu, ilk oluşturulduğunda, SQL Server örneğiyle tamamlanıncaya kadar yalnızca yaratıcılar için görülebilir. Kullanıcının SQL Server örneğinden çıkardıktan sonra yerel saat tabloları otomatik olarak silinir. Global Geçici Tablolar, bu tabloları oluşturduktan sonra herhangi bir bağlantı oturumunda tüm kullanıcılar tarafından görülebilir ve bu tablolara eklenen tüm kullanıcılar SQL Server örneğinden ayrıldığında silinir.

Geçici tablolar Tempdb sistem tabanında, yani. Onları oluşturarak, ana tabanı çöpe atmıyoruz, zaman tablolarının geri kalanı her zamanki tablolarla tamamen aynıdır, damla tablo komutunu kullanarak da silinebilirler. Yerel (#) geçici tablolar daha sık kullanılır.

Geçici bir tablo oluşturmak için, Tablo Oluştur komutunu kullanabilirsiniz:

Tablo oluştur #temp (ID int, NVARCHAR (30))
MS SQL'deki geçici bir tablo normal bir tabloya benzer olduğundan, buna göre, damla tablosu komutunu da kaldırabilirsiniz:

Damla tablo #temp

Ayrıca geçici bir tablo (düzenli bir masa olarak), SELECT sözdizimini kullanarak isteğin getirdiği verileri oluşturabilir ve derhal doldurabilirsiniz ...

Kimliğinizi seçin, çalışanlardan #temp içine isim

Bir notta
Farklı DBMS'de geçici tabloların uygulanması farklı olabilir. Örneğin, Oracle ve Firebird DBMS'de, geçici tablo yapısı, içinde veri deposunun özelliklerini belirten Global Geçici Tablo komutuyla önceden tanımlanmalıdır, sonra kullanıcı zaten ana tablolar arasında görür ve onunla birlikte çalışır. Düzenli bir masa olarak.

Veritabanının normalleşmesi - Alt tablaları (dizinler) ve bağların tanımları

Mevcut çalışanlarımızın tablosumuzun, pozisyon ve departman alanlarında, kullanıcının her şeyden önce herhangi bir metne girebileceği herhangi bir metni girebilir, çünkü bir çalışan sadece "BT" ve ikinci çalışan, örneğin, "BT departmanını" tanıtmak, üçüncü "o" da. Sonuç olarak, kullanıcının yanı sıra, yani, yani anlaşılmaz olacaktır. Çalışanların bir departman çalışanları tarafından veya açıklanan kullanıcının verileri ve 3 farklı bölüm midir? Ve daha da fazlası, bu durumda, bir rapor için verileri düzgün bir şekilde gruplayamayacağız, nerede çalışan sayısını her bölüm bağlamında göstermeleri gerekebilir.

İkinci dezavantaj, bu bilgilerin ve çoğaltılmasının depolanması miktarında yatıyor, yani. Her çalışan için, departmanın tam adı, her bir sembolün depolanması için alanın veritabanında departman adından alınmasını gerektirir.

Üçüncü dezavantaj, bu alanların güncellenmesinin karmaşıklığıdır, örneğin, "Programcı" konumunu, "Junior Programmer" adlı konumunu yeniden adlandırmanız gerekirse, bu alanların güncellenmesinin karmaşıklığıdır. Bu durumda, tablonun her satırında değişiklik yapmamız gerekecek, hangi pozisyonun "programcı" e eşittir.

Veri dezavantajlarından kaçınmak ve kullanılır, sözde, veritabanının normalleşmesi, referans kitaplarının tablolarına, alt kısımlara ezmektir. Debristteki teoriye tırmanmak ve normal formların kendilerini temsil ettiğini, normalleşmenin özünü anlamak yeterlidir.

"Pozisyonlar" ve "bölümler" referans kitaplarının 2 tablosu oluşturalım, önce pozisyonları ve ikincisi sırasıyla, bölümler:

Masa pozisyonları oluşturun (ID int nisabı (1,1) NULL Kısıtlama PK_POSIONS Birincil Anahtar, NUD NVARCHAR (30) NULL değil) Tablo departmanları oluşturun (ID int int nutity (1,1) Null kısıtlama pk_departments Birincil Anahtar, Name NVARCHAR (30) ) Geçersiz değil)
Burada, ID sütunundaki verilerin otomatik olarak numaralandırılacağını, 1, adım 1'de, 1, I.E. Yeni kayıtlar eklerken, sürekli olarak 1, 2, 3, vb. Değerler atanır. Bu alanlar genellikle otoincomy olarak adlandırılır. Tablo, kimlik özelliği ile yalnızca bir alanı tanımlayabilir ve genellikle, ancak isteğe bağlı olarak, böyle bir alan bu tablonun birincil anahtardır.

Bir notta
Farklı DBMS'de, sayaçla alanların uygulanması kendi yolunda yapılabilir. MySQL'de, örneğin, bu alan Auto_inCrement seçeneği kullanılarak belirlenir. Oracle ve Firebird'de, bu işlevsellik, dizi kullanımı (sıra) kullanılarak yapılır. Fakat kehanet bildiğim kadarıyla, kimlik seçeneği olarak üretilen üretildi.

Çalışan tablolarının konumuna ve bölümünde kaydedilen mevcut verilere dayanarak bu tabloları otomatik olarak dolduralım:

Pozisyonlar tablosunun ad alanını doldurun, çalışanların konum alanından benzersiz değerler yerleştirin Tablo, pozisyonun null olmadığı çalışanlardan farklı konum seçin - Konumun belirtilmediği kayıtları atın
Bölüm masası için de aynısını yapıyorum:

Departmanları (isim) ekleyin, bölümün null olmadığı çalışanlardan farklı bölüm seçin
Şimdi pozisyonları ve birimler tablolarını açarsak, numaralı bir saha değerleri kimliği grubunu göreceğiz:

Seçin * konumundan

Bölümlerden * seç *

Masa verileri şimdi referans kitaplarının görev mesajlarına ve bölümlere rolünü oynayacaktır. Şimdi gönderilere ve bölümlere atıfta bulunacağız. Her şeyden önce, kimlik verilerini saklamak için çalışanların tablosundaki yeni alanlar oluşturun:

ALTER TABLOSUSU Çalışanları için Bir Alan Ekle Konumlu Int Ekle - Alter Masa Çalışanları İçin Bir Alan Ekle Departman Ekleme Int
Referans alanların türü, referans kitaplardaki gibi olmalıdır, bu durumda int.

Ayrıca, birkaç alan bir komutla birlikte olabilecek bir anda masaya ekleyin, alanları virgülle listeledi:

ALTER TABLOSU Çalışanları Konumlu Int, Department Int
Şimdi, bu alanlar için referanslar (referans kısıtlamaları - yabancı anahtar) yazıyoruz, böylece kullanıcının saha verilerine yazma yeteneğine sahip olmadığı, referans kitaplarındaki kimlik değerlerinin değerleri arasında eksik olan değerler yazıyoruz. .

ALTER TABLOSYONU Çalışanları Kısıtlama FK_EvPloyees_Positionid Yabancı Anahtar (Konumlandırılmış) Referanslar Pozisyonları (ID) ekleyin
Ve ikinci alan için de aynısını yapın:

ALTER TABLOSUSU Çalışanları Kısıtlama Ekleme FK_EvPloyees_Depmenttid Yabancı Anahtar (Departman) Referanslar Bölümleri (ID)
Artık bu alanlardaki kullanıcı, yalnızca kimliğin değerlerini ilgili dizinden uygulayabilecektir. Buna göre, yeni bir bölüm veya pozisyon kullanmak için, uygun dizine yeni bir giriş ekleyen ilk olacaktır. Çünkü Mesajlar ve bölümler şimdi tek bir örnekte referans kitaplarında saklanır, ardından adını değiştirmek için, yalnızca dizinde değiştirmek yeterlidir.

Referans limitinin adı genellikle kompozittir, "FK_" önekinden oluşur, ardından tablo adı geliyor ve alt çizgi filmi, dizin tablosu tanımlayıcısına atıfta bulunan alanın adıdır.

Tanımlayıcı (ID) genellikle yalnızca bağlantılar için kullanılan ve hangi değerinin orada saklandığından, çoğu durumda kesinlikle kayıtsızdır, bu nedenle gerçekleşen sayıların sırasındaki deliklerden kurtulmaya çalışmanız gerekmez. Tablo ile çalışma sırasında, örneğin, kayıtları dizinden çıkardıktan sonra.

ALTER TABLO TABLOSU Kısıtlama Adı Yabancı Anahtar (Alan1, Alan 2, ...) Referanslar Table_spatch (Alan1, Alan 2, ...)
Bu durumda, birincil anahtar, tablo tablosunda birkaç alan (Field1, Field2, ...) bir kombinasyonu ile sunulur.

Aslında, şimdi kimlik değerlerinin konumlandırılmış ve departman değerlerini referans kitaplardan güncelleyeceksiniz. Bu amaç için güncelleme komutunu DML ile kullanıyoruz:

GÜNCELLEME E SET POODIDID \u003d (NAME \u003d E.POSION), Department \u003d (Adı \u003d E.Department) çalışanlardan E.
Talebi takip ederek ne olduğunu görelim:

Çalışanlardan * seçin

Hepsi, konumlandırılmış ve departman alanları uygun pozisyon tanımlayıcıları ile doldurulur ve çalışanlar tablosundaki pozisyon ve bölüm alanlarındaki bölümler artık bu alanları silebilirsiniz:

ALTER TABLE çalışanları sütun pozisyonunu bırakın, bölüm
Şimdi masa aşağıdaki formu satın aldı:

Çalışanlardan * seçin

İD İsim. Doğum günü E-posta Konumlandırılmış. Departman.
1000 Ivanov i.i. BOŞ BOŞ 2 1
1001 Petrov P.P. BOŞ BOŞ 3 3
1002 Sidorov S.S. BOŞ BOŞ 1 2
1003 Andreev A.A. BOŞ BOŞ 4 3

Şunlar. Sonunda yedekli bilgileri saklamaktan kurtulduk. Şimdi, pozisyonların ve departman sayısına göre, referans tablolarındaki değerleri kullanarak isimlerini benzersiz bir şekilde belirleyebiliriz:

E.ID, E.NAME, P.NAME pozisyonunu seçin.

Nesne denetçisinde, bu tablo için oluşturulan tüm nesneleri görebiliriz. Buradan bu nesnelerle farklı manipülasyonlar üretebilir - örneğin, nesneleri yeniden adlandırın veya silin.

Ayrıca, tablonun kendisine başvurabileceği, yani Özyinelemeli bir bağlantı oluşturabilirsiniz. Örneğin, bu çalışana tabi olan bir çalışanı gösterecek çalışanlarla masamıza başka bir yönetici alanı ekleyin. Bir alan oluşturun:

Alter Masa Çalışanları Managerid Int Ekle
Bu alanda, NULL değeri izin verilirse, alan boş olacaktır, örneğin, daha yüksek çalışan yoksa.

Şimdi çalışanlar tablosunda yabancı anahtar oluşturalım:

ALTER TABLOSU Çalışanları Kısıtlama Ekleme FK_EvPloyees_ManagerID Yabancı Anahtar (Managerid) Referanslar Çalışanlar (ID)
Bir diyagram oluşturalım ve tablolarımız arasındaki bağlantıların neye benzediğini görelim:

Sonuç olarak, aşağıdaki resmi görmeliyiz (Çalışanlar tablosu, pozisyon ve ciltlerin tabloları ile ilişkili olduğu ve kendisini ifade eder):

Son olarak, referans anahtarlarının, tablo dizininde linklerin bulunduğu girişi sildiğinizde veya güncellediğinizde nasıl davranacağınızı öneren Cascade ve Güncelleme Cascade'de ek seçenekler içerebileceğini söylemeye değer. Bu seçenekler belirtilmediyse, tablo dizininde kimliği, başka bir tablodan bağlantıların bulunduğu kayıttaki, buna bağlı tüm satırları silineceye kadar böyle bir girişi silemeyiz. Giriş veya, bu satırlardaki bağlantıyı başka bir değere güncelleyeceğiz.

Örneğin, fk_employees_departmentid için Cascade Sil seçeneğiyle tablo ile tekrar seçim yapın:

Drop Masa Çalışanları Masa Çalışanları Oluşturun (NILL değil, NVARCHAR (30), Doğum Günü Tarihi, NVARCHAR (30), Pointid Int, Department Int, Managerid Int, Kısıtlama PK_EvPloyees Birincil Anahtar (ID), Kısıtlama FK_EvPloyees_DepmentID Yabancı Anahtar (departman) ) Referanslar Bölüm (ID) Açık Cascade, Construntion FK_EPLOYEES_POZITIONIDITIODICITICITICITIODS (ID), Kısıtlama FK_ATPloyees_ManagerID Dış Anahtar (ManagerID) Referanslar Çalışanlar (ID)) Çalışanları ekleyin (Kimlik, Ad, Doğum Günü, Konumlandırma, Bölüm, Departman, Managerid ) Değerler (1000, n "iVanov II", "19550219", 2.1, NULL), (1001, N "Petrov PP", "19831203", 3,3,1003), (1002, N "Sidorov SS" , "19760607", 1,2,1000), (1003, n "Andreev AA", "19820417", 4,3,1000)
Departmanlar tablosundan bir tanımlayıcı 3 olan bir bölümü silin:

DEPARTLARI SİL \u003d 3
Çalışanlar tablosunun verilerine bakalım:

Çalışanlardan * seçin

İD İsim. Doğum günü E-posta Konumlandırılmış. Departman. MaceraId.
1000 Ivanov i.i. 1955-02-19 BOŞ 2 1 BOŞ
1002 Sidorov S.S. 1976-06-07 BOŞ 1 2 1000

Gördüğünüz gibi, Bakanlığın 3'teki veriler, çalışanların tablosundan da emekli oldu.

Güncelleme Cascade'teki seçenek benzer şekilde davranır, ancak dizindeki kimlik değerini güncellerken hareket eder. Örneğin, Gönderiler dizininde konum kimliğini değiştirirsek, bu durumda, departman, çalışanların tablosunda Dizin'de sorduğumuz yeni kimlik değerine güncellenir. Ancak bu durumda sadece gösteremedi, çünkü Departmanlar tablosundaki ID sütunu, aşağıdaki sorguyu gerçekleştirmemize izin vermeyecek kimlik seçeneğidir (bölümün tanımlayıcısını 3 ila 30):

GÜNCELLEME DEĞERLENDİRMELERİ SET KİMLİĞİ \u003d 30
Asıl şey, Cascade Sil ve Güncelleme Cascade'deki bu 2 seçeneğin özünü anlamaktır. Bu seçenekleri çok nadir durumlarda uyguluyorum ve referans sınırı olarak belirlemeden önce iyi düşünmenizi tavsiye ederim, çünkü Referans tablosundan bir rekorun istemeden çıkarılması ile bu, büyük problemlere yol açabilir ve zincir reaksiyonu oluşturabilir.

Departmanı Kurtar 3:

INSEINT DEĞERLENDİRMESİ (ID, ADI) DEĞERLERİNE (3, N "INSE (ID, ADI) DEĞERLENDİRMELERİNE KİMLİK DEĞERLENDİRMELERİNİ KİMLİK DEĞERLENDİRMESİ (ID, ADI) DEĞERLENDİRMELERİ (3, N" IT ")
Kesme tablosu komutunu kullanarak çalışanları tamamen temizleyin:

Masa çalışanlarını kes.
Ve önceki ek komutunu kullanarak verileri tekrar tekrar yükleyin:

Çalışanları (Kimlik, Ad, Doğum Günü, Konumlandırılmış, Bölüm, Managerid) Değerleri (1000, N "Ivanov I.I.", "19550219", 2,1, NULL), (1001, N "Petrov PP", "19831203", 3 , 3,1003), (1002, n "Sidorov SS", "19760607", 1,2,1000), (1003, n "Andreev AA", "19820417" 4,3,1000)

Uygun

Verilen anda, bilgimize birkaç DDL komutu eklendi:
  • Kimlik özelliğini alana ekleme - bu alanı otomatik olarak bir tablo için (alan) doldurmanıza olanak sağlar;
  • Tabloyu değiştir Name_table Ekle. LIST_POLE_S_CHARDS - Tabloya yeni alanlar eklemenizi sağlar;
  • Tabloyu değiştir Name_table Sütun. List_pole - alanları tablodan çıkarmanızı sağlar;
  • Tabloyu değiştir Name_table Kısıt ekle. Program adı Yabancı anahtar.(alanlar) Referanslar. Table_spatch (alanlar) - Tablo ile tablo referans kitabı arasındaki bağlantıyı tanımlamanızı sağlar.

Diğer Kısıtlamalar - Benzersiz, Varsayılan, Kontrol

Benzersiz kısıtlama kullanarak, bu alandaki veya alan setindeki her satırdaki değerlerin benzersiz olması gerektiğini söyleyebilirsiniz. Çalışanların tablosu durumunda, e-posta alanına böyle bir kısıtlama uygulayabiliriz. Henüz tanımlanmadıkları takdirde sadece daha önce e-posta değerlerini doldurun:

Çalışanları güncelle E-posta ayarla \u003d " [E-posta Korumalı]"Nerede id \u003d 1000 güncelleme çalışanları e-posta ayarla \u003d" [E-posta Korumalı]"Nerede id \u003d 1001 güncelleme çalışanları e-posta ayarla \u003d" [E-posta Korumalı]"Nerede id \u003d 1002 güncelleme çalışanları e-posta ayarla \u003d" [E-posta Korumalı]"Nerede id \u003d 1003
Ve şimdi bu alanda eşsiz bir kısıtlama yapabilirsiniz:

ALTER TABLE çalışanları Kısıtlı Uq_employees_email benzersiz (e-posta)
Artık kullanıcı birkaç çalışandan aynı e-postayı yapamayacak.

Benzersizlik kısıtlaması genellikle aşağıdaki gibi anılır - önce "UQ_" öneki, ardından tablonun adı ve alt çizgiden sonra bu kısıtlamanın üst üste bindirildiği alanın adıdır.

Buna göre, tablo bağlamda benzersizse, alanların bir kombinasyonu olmalı, sonra onları virgülle listeleyiz:

ALTER TABLO ADI_TABLE Kısıtlama Adı Benzersiz (Alan1, Alan 2, ...)
Varsayılan sınır alanına ekleme kullanarak, eklendiğinde durumunda ikame edilecek varsayılan değeri ayarlayabiliriz. yeni Kayıt Bu alan, Ekle komut listesi listesinde listelenmeyecektir. Bu kısıtlama, bir tablo oluştururken doğrudan ayarlanabilir.

Çalışanlar tablosuna yeni bir "Alma" alanı ekleyelim ve bu alanın varsayılan değerinin geçerli tarihte olduğunu söyleyelim.

ALTER TABLOSYONU Çalışanları Hiredate Tarihi Ekleme Null Varsayılan Sysdatetime ()
Veya Hiredate sütun zaten varsa, aşağıdaki sözdizimini kullanabilirsiniz:

ALTER TABLO Çalışanları, Hiredate için varsayılan sysdatetime () ekleyin
Burada kısıtlamanın adını belirtmedim, çünkü Varsayılan durumunda, bu kadar kritik olmadığı fikrini gördüm. Ama eğer iyi bir şekilde yaparsanız, tembel olmanıza ve normal bir isim ayarlamaya değmeyeceğinizi düşünüyorum. Bu aşağıdaki gibi yapılır:

ALTER TABLOSYONU Çalışanları Kısıtlama DF_Employees_Hiredate Varsayılan SysDateTime () Hiredate için
Daha önce bu sütun olmadı, daha sonra HIREDATE alanındaki her girişe eklendiğinde, geçerli tarih değeri eklenecektir.

Yeni bir giriş eklerken, geçerli tarih otomatik olarak da eklenecektir, elbette, açıkça belirtmezsek, yani Sütunlar listesinde belirtmeyin. Bunu eklenen değerler listesinde, Hiredate alanını belirtmeden örnekte gösterelim:

Çalışanları (Kimlik, Ad, E-posta) Değerleri (1004, N "SergeEV S.S.", " [E-posta Korumalı]")
Ne olduğunu görelim:

Çalışanlardan * seçin

İD İsim. Doğum günü E-posta Konumlandırılmış. Departman. MaceraId. Kiralandı.
1000 Ivanov i.i. 1955-02-19 [E-posta Korumalı] 2 1 BOŞ 2015-04-08
1001 Petrov P.P. 1983-12-03 [E-posta Korumalı] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [E-posta Korumalı] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [E-posta Korumalı] 4 3 1000 2015-04-08
1004 Sergeev S.S. BOŞ [E-posta Korumalı] BOŞ BOŞ BOŞ 2015-04-08

Kontrol kontrolü, sahaya eklenen değerleri kontrol etmek gerekirse kullanılır. Örneğin, bu kısıtlamayı bir çalışanın tanımlayıcısına (ID) sahip olduğumuz Tabel Numarası alanına sunuyoruz. Bu kısıtlamayı kullanarak, tablet numaralarının 1000 ila 1999 arasında olması gerektiğini söyleyelim:

ALTER TABLOSUSU Çalışanları CHK_EMPLAYEES_ID KONTROLÜ (1000 - 1999 arasındaki kimlik)
Kısıtlama, genellikle "CK_" öneki olarak adlandırılır, ardından tablo adı ve bu kısıtlamanın uygulandığı alanın adı.

Kısıtlamanın çalıştığını doğrulamak için geçersiz bir giriş eklemeye çalışalım (uygun hatayı almalıyız):

Çalışanları (ID, E-posta) Değerlerini (2000 "ekleyin. [E-posta Korumalı]")
Ve şimdi eklenen değeri 1500'e değiştireceğim ve girişin ekleneceğinden emin olacağım:

Çalışanları (ID, E-posta) Değerlerini (1500, "ekleyin. [E-posta Korumalı]")
Ayrıca, ismi belirtmeden benzersiz ve kontrol kısıtlamalarını da oluşturabilirsiniz:

ALTER TABLO Çalışanları Eşsiz (E-posta) ALTER TABLOSYONU Çalışanları Ekleyin Kontrol Ekle (1000 ve 1999)
Ancak bu iyi bir uygulama değil ve açıkça kısıtlamanın adını belirlemek daha iyidir, çünkü Daha sonra sıralamak, daha zor olacak, nesneyi açmanız ve ne cevaplarını izlemeniz gerekir.

İyi bir isim ile, kısıtlama hakkında birçok bilgi doğrudan ismiyle bulunabilir.

Ve buna göre, tüm bu kısıtlamalar, henüz değilse, bir tablo oluştururken hemen oluşturulabilir. Tabloyu silin:

Masa çalışanları.
Ve bir oluşturma tablosu tarafından oluşturulan tüm sınırlamalarla yeniden poz veriyor:

Masa çalışanları oluşturun (NILL değil, NILL, NVARCHAR (30), Doğum Günü Tarihi, E-posta Nvarchar (30), Konumlu Int, Departman Int, Hiredate Tarihi Null varsayılan Sysdatetime (), - Varsayılan olarak Birincil anahtar (ID), kısıtlama fk_employees_departmenttid Yabancı Anahtar (Departman) Referanslar Departmanları (ID), Kısıtlama FK_EvPloyees_PositionId Yabancı Anahtar (Konumlandırılmış) Referanslar Pozisyonlar (ID), Kısıtlama UQ_Emloyees_email Benzersiz (e-posta), Kısıtlama CK_EMAPLOYES_ID kontrolü (1000 ve 1999 arasında))

Çalışanları (kimlik, isim, doğum günü, e-posta, pozisyonid, departman) değerleri (1000, n "ivanov i.i.", "19550219", " [E-posta Korumalı]", 2.1), (1001, n" Petrov PP "," 19831203 "," [E-posta Korumalı]", 3,3), (1002, n" Sidorov S.S. "," 19760607 "," [E-posta Korumalı]", 1,2), (1003, n" Andreev A.A. "," 19820417 "," [E-posta Korumalı]",4,3)

Birincil anahtar ve benzersiz kısıtlamalar oluştururken yaratılan endeksler hakkında biraz

Yukarıdaki ekran görüntüsünde gördüğünüz gibi, birincil anahtarın sınırlarını oluştururken ve benzersiz, dizinler otomatik olarak aynı adlarla (PK_EMASEES ve UQ_EMPLAYEES_EMAIL) oluşturulur. Varsayılan olarak, birincil anahtar dizini kümelenmiş olarak oluşturulur ve diğer tüm dizinler için kümelenmemiş olarak oluşturulur. Bir küme endeksi kavramının tüm DBMS'de olmadığını söylemeye değer. Tabloda sadece bir küme (kümelenmiş) dizin olabilir. Kümelenmiş - Tablo girişlerinin bu endekste sıralanacak olduğu anlamına gelir, bu inçinin tablonun tüm verilerine doğrudan erişimi olduğu söylenebilir. Tablonun ana indeksini konuşmak içindir. Daha fazla kaba söylerseniz, bu, tabloya vidalanmış bir dizindir. Küme endeksi, istekleri optimize ederken yardımcı olabilecek çok güçlü bir araçtır, bunu hatırlayın. Küme endeksinin birincil anahtarda kullanılmadığını söylemek istiyorsak, ancak başka bir dizin için, daha sonra birincil anahtar oluştururken, kümelenmemiş seçeneği belirtmeliyiz:

ALTER TABLO ADI_Table Kısıtlama Birincil Anahtar Ekleme Klasik Adı (Field1, Alan 2, ...)
Örneğin, PK_EMASEES Kısıtlama Endeksi'ni yapacağız ve UQ_employees_email limit endeksi kümedir. Her şeyden önce, bu kısıtlamaları silin:

ALTER TABLO ÇALIŞMALARI DROSH Kısıtlaması PK_Ev
Şimdi onları kümelenmiş ve kümelenmemiş seçeneklerle oluşturalım:

ALTER TABLOSU Çalışanları Kısıtlama Ekle PK_Evployees Birincil Anahtar Kümesi Olmayan (ID) Alter Tablo Çalışanları Kısıtlı Uq_employees_Email Ekleyin Benzersiz Kümelenmiş (E-posta)
Şimdi, çalışanların tablosundan bir örnek seçerek, kayıtların kümelenmiş UQ_employees_email indeksi tarafından sıralandığını göreceğiz:

Çalışanlardan * seçin

İD İsim. Doğum günü E-posta Konumlandırılmış. Departman. Kiralandı.
1003 Andreev A.A. 1982-04-17 [E-posta Korumalı] 4 3 2015-04-08
1000 Ivanov i.i. 1955-02-19 [E-posta Korumalı] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [E-posta Korumalı] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [E-posta Korumalı] 1 2 2015-04-08

Bundan önce, Küme Endeksi PK_EMPLAYEES dizini olduğunda, varsayılan girişler kimlik alanı tarafından sıralanmıştır.

Ancak bu durumda, sadece küme endeksinin özünü gösteren bir örnektir, çünkü Büyük olasılıkla, çalışanlar tablosu kimlik alanı tarafından yapılacak ve bazı durumlarda belki bir dizin olarak hareket edecektir.

Referans kitaplar için, genellikle küme endeksinin birincil anahtar üzerine inşa edildiğinden, çünkü Sorgularda, genellikle, örneğin adları (Mesajlar, Bölüm) almak için dizinin sertifikasına başvururuz. Burada, yukarıda yazdığımın neyi hatırlıyorum, küme endeksinin tablonun satırlarına doğrudan erişebileceğini ve ek yükü olmayan herhangi bir sütunun değerini alabileceğimizi takip ediyor.

Küme endeksi, örneğin en sık olduğu alanlara başvurmak için faydalıdır.

Bazen tablolarda bir vekil alanda bir anahtar oluşturun, bu durumda kümelenmiş dizin seçeneğini daha uygun bir dizin için kaydetmek ve bir taşıyıcı birincil anahtar oluştururken kümelenmemiş seçeneği belirtmeniz faydalıdır.

Uygun

Bu aşamada, "Alter Table_Table_Table_table ekleme kısıtlaması adı:": ":": ":": "
  • BİRİNCİL ANAHTAR. - birincil anahtar;
  • Yabancı anahtar. - Verilerin bağlantılarını ve referans bütünlüğünün kontrolünü yapılandırın;
  • Benzersiz - benzersizlik yaratmanıza izin verir;
  • Kontrol. - Girilen verilerin doğruluğunu sağlar;
  • Varsayılan. - Varsayılan değeri ayarlamanıza izin verir;
  • Ayrıca, tüm kısıtlamaların komutunu kullanarak silinebileceğini de belirtmekte fayda var " Tabloyu değiştir Name_table Damla kısıtlama. Provining ismi. "
Ayrıca, dizinlerin konusuna kısmen dokunduk ve küme kavramını parçaladı ( Kümelenmiş.) ve çekilmemiş ( Sökülmüş) Endeks.

Bağımsız dizinler oluşturma

Buradaki bağımsızlık altında, birincil anahtar veya benzersiz sınırlamak için yaratılmayan endeksleri ifade eder.

Alanın üzerindeki endeksler veya alanlar aşağıdaki komutla oluşturulabilir:

Çalışanlarda IDX_Emloyees_Name dizin oluşturun (isim)
Ayrıca, burada kümelenmiş, ayarlanmamış, benzersiz, yanı sıra her bir ASC alanını (varsayılan) veya DESC'yi sıralama yönünü belirleyebileceğiniz seçenekler belirleyebilirsiniz:

Çalışanlara benzersiz olmayan bir dizin UQ_EMAPLYES_EMAILDESC (E-posta DESC) oluşturun
Kümesi olmayan bir dizin oluştururken, kümelenmemiş seçenek serbest bırakılabilir, çünkü Varsayılan olarak ima edilir, burada takımda kümelenmiş veya kümelenmemiş seçeneğin konumunu belirtmek için basitçe gösterilir.

Endeks silin:

DRIDEJIDE IDX_EMAPLOYEES_NAME çalışanları
Basit dizinler ve kısıtlamalar, CREATE table komutu bağlamında oluşturulabilir.

Örneğin, tabloyu çıkarın:

Masa çalışanları.
Ve oluşturulan tüm kısıtlamalar ve dizinler ile birleştirin, tek bir tablo komutuyla yeniden pozlandırın:

Masa çalışanları oluşturun (NILL değil, NUD NULL), NAME NVARCHER (30), Doğum Günü Tarihi, NVARCHARCHAR (30), Konumlu Int, Department Int, Hiredate Tarihi Null Sınırlama DF_Emloyees_Hiredate Default SysdateTime (), ManagerID Int, Kısıtlama PK_Evleryes Birincil Anahtarı (ID) ), Kısıtlama fk_employees_departmenttid Yabancı Anahtar (Departman) Referanslar Bölümleri (ID), Kısıtlama FK_Emloyees_PositionId Yabancı Anahtar (Konumlandırılmış) Referanslar Pozisyonlar (ID), Kısıtlama FK_EMAPLOYEES_MANAGERID YABANCI KEY (MUTLUK) REFERANSLARI (ID), Kısıtlama UQ_employees_Email Benzersiz (e-posta), Kısıtlama Ck_Emloyees_ID Kontrol (1000 ve 1999 arasındaki kimlik), index_employees_name (ad)))
Son olarak, çalışanlarımızın tablosuna ekleyin:

Çalışanları (kimlik, isim, doğum günü, e-posta, konumlandırılmış, departman, yönetici) değerleri (1000, n "ivanov i.i.", "19550219", " [E-posta Korumalı]", 2.1, null), (1001, n" Petrov PP "," 19831203 "," [E-posta Korumalı]", 3,3,1003), (1002, n" Sidorov S.S. "," 19760607 "," [E-posta Korumalı]", 1,2,1000), (1003, n" Andreev AA. "," 19820417 "," [E-posta Korumalı]",4,3,1000)
Ek olarak, küme olmayan endeksde, bunları dahil ederek değerleri içerebileceğinizin değerlerini içerebileceğini belirtmekte fayda var. Şunlar. Bu durumda, dahil indeksi küme indeksini hatırlatır, yalnızca şimdi dizin tabloya vidalanmaz ve gerekli değerler indeksle vidalanır. Buna göre, bu tür endeksler, listelenen alanların tümü dizinde mevcut olup olmadığını seçmek için sorguların performansını artırabilir (seçebilirsiniz), o zaman masaya hitap etmek mümkündür. Ancak doğal olarak endeksin boyutunu arttırır, çünkü Listelenen alanların değerleri indeksde çoğaltılır.

MSDN'den kesin. Genel sözdizimi Dizin oluşturma komutları

[Eşsiz] oluşturun [Kümelenmiş | Classtered Olmayan] index index_name (Sütun [asc | desc] [, ... n]) [dahil (sütun_adı [, ... n])]

Uygun

Endeksler veri örnekleme oranını artırabilir (seçilebilir), ancak dizinler tablo veri modifikasyonunun hızını azaltır, çünkü Her bir modifikasyondan sonra, sistemin belirli bir tablo için tüm dizinleri yeniden oluşturması gerekir.

Her durumda, optimum çözümü, altın ortasını bulmak için tavsiye edilir, böylece örneklemenin performansı ve veri modifikasyonlarının uygun düzeyde olmuştur. Endeks oluşturma stratejisi ve miktarı, örneğin, verilerin tabloda ne sıklıkta değiştirildiği birçok faktöre bağlı olabilir.

DDL ile sonuç.

Gördüğünüz gibi, DDL dili ilk bakışta göründüğü gibi katlanmış gibi değil. Burada hemen hemen tüm temel tasarımlarını gösterebildi, sadece üç tabloyla çalıştırdım.

Asıl şey, özü ve uygulamanın geri kalanını anlamaktır.

SQL adında bu harika dilin ustalaşmasında size iyi şanslar.

Yazardan: Sana bir su ısıtıcısı mı dedin? Peki, bu düzeltilmiş iş! Her Samovar bir zamanlar bir su ısıtıcısı oldu! Ya da her profesyonel bir zamanlar bir semaverdi mi? Hayır, yine bir şey yanlış! Genel olarak, yeni başlayanlar için MySQL.

Neden MySQL Çaydanlıklar

Hayatınızı İnternet ile bağlamak için ciddiye alınırsanız, sonra hemen "Web" ndeki ilk adımlarda bu DBMS ile karşılaşır. MySQL, veritabanı yönetim sistemi "tüm internet" sistemi tarafından boldur olabilir. Onsuz, az ya da çok ciddi bir kaynak hesaplanmaz, her bir barındırmanın yönetici planında bulunur. Ve tüm popüler CMS ve hatta "kendini savunma" motorlarının çoğu katılımı ile inşa edilmiştir.

Genel olarak, bu platform olmadan yapamazsınız. Ancak incelemek için de gerekli olacaktır. doğru yaklaşım, Doğru araçlar ve ana arzu ve sabır. Umarım en son bileşenler, profesyonelleriniz var. Ve beyinlerinizin kaynatılması ve gerçek bir su ısıtıcısından olduğu gibi kafadan dökülmesi için hazır olun.

Fakat bu kadar sert mysql için MySQL sadece başlarsanız yanlıştır. Böyle bir hata yapmayacağız ve bu teknolojiyi çok temellerle tanıyacağız.

Temel konseptler

Başlamak için, bu yayında bahsettiğimiz ana kavramları geçeceğiz:

Veritabanı (veritabanı), birim birimin ana bileşenidir. Veritabanı, sütunlardan ve kayıtlardan (satırlar) oluşan tablolar içerir. Kavşakta oluşan hücreler, belirli bir türde yapılandırılmış veriler içerir.

DBMS (Veritabanı Yönetim Sistemi), veritabanlarını yönetmek için tüm yazılım modüllerinin bir dizidir.

SQL - Geliştiricinin DBMS'nin Çekirdek (Sunucu) ile "iletişim kurduğu" ile yapılandırılmış sorguların dili. Herhangi bir program dili gibi, SQL'nin kendi sözdizimi, bir dizi komut ve operatöre, desteklenen veri türlerine sahiptir.

Sanırım teorik bilgiye başlamak için, biz yeterli. Teorideki eksik boşluklar "rengini" uygulamıyoruz. Şimdi doğru yazılım aracını seçmek için kalır.

Doğru aletin seçimi

Sık sık "acele", yeni başlayanlar için MySQL kabuklarının tüm çeşitlerinde, var olmadığını fark ettim. DBMS yöneticisi için tüm yazılım ürünleri zaten yüklü sunucu Veri tabanı Genel olarak, bir kez daha "scooter" i icat etmemeye karar verdim ve yerli Denwer paketini seçtim. Resmi web sitesinde indirebilirsiniz.

Kompozisyonu zaten DBM'lerin tüm bileşenlerini içermekte olup, Newcomer'a, MySQL ile pratik bir tanıdık başlamak için kolay ve anlaşılabilir bir kurulumdan hemen sonra izin verir. Ek olarak, Denwer daha gerekli birkaç araç geliştiricisi içerir: Yerel Sunucu, PHP.

İlk adımlar

"Gentlemansky" setinin kurulum sürecini tarif etmeyeceğim, çünkü her şey otomatik olarak orada olur. Kurulumu başlattıktan sonra, yalnızca basılacak istenen tuşlar yönetilir. MySQL varyantı için aptallar için gerekenler.

Kurulum işlemi tamamlandığında, yerel sunucuyu başlatın, birkaç saniye bekleyin. Bundan sonra adres satırı Tarayıcı localhost.

"Hooray, kazanıldı!" Sayfasında Anlık görüntüde belirtilen bağlantılardan birine gidin. Bundan sonra, veritabanlarını yönetmek için Shell'e phpmyadmin'e götürüleceksiniz.

Http://downloads.mysql.com/docs/world.sql.zip linkine tıklayarak, resmi MySQL sitesinden bir test veritabanının bir örneğini indirirsiniz. Yine, PHPMYADMIN'e gidin, üstteki ana menüde "İçe Aktar" sekmesine gidin. İlk bölümdeki "Geçerli" pencerede ("İçe Aktarılan Dosya"), "Bilgisayarınıza Genel Bakış" nı ayarlayın.

Explorer penceresinde, veritabanının indirilen örneği ile arşivi seçin. Ana pencerenin alt kısmında, "Tamam" i tıklamayı unutmayın.

Belirtilen parametre değerlerini değiştirmemeyi tavsiye ederim. Bu, veri aktarılan kaynakların yanlış gösterilmesine yol açabilir. PHPMYADMIN sistemi, sıkıştırma veritabanı algoritmasını tanımadığı bir hata verdiyse, sonra onu açıp ilk önce tüm içe aktarma işlemini tekrarlayın.

Her şey yolunda giderse, program mesajı en üstte, hangi ithalatın başarılı olduğu ve soldaki veritabanı listesinde (Word).

Yapısını içeriden düşünün, böylece ne başa çıkmanız gerektiğini daha net bir şekilde hayal edebilirsiniz.

Yeni başlayanlar için MySQL veritabanının adına tıklayın. Olduğu tabloların bir listesini görüntüler. Onlardan birini tıklayın. Sonra öğeye git Üst Menü "Yapı". Ana çalışma alanı tablo yapısını gösterecektir: tüm sütunların, veri türlerinin ve tüm özelliklerin adları.

Veritabanlarını, ilişkisel teori ve SQL dilinin temellerini incelemek için kitap, video kursları ve çevrimiçi kaynaklar seçimi.

Kitabın

Alan Bewly "SQL Öğrenmek" (2007)

Bu kitap, bölge SQL çalışma yolunun başında duranlar için mükemmel bir seçimdir. Sadece birincil bilginin gerekli temelini satın almanıza izin vermez, aynı zamanda programcıların kullandığı en popüler incelik ve güçlü dil araçlarından da bahseder.
Veritabanlarına adanmış birçok el kitabı, ilişkisel teori ve SQL dili sıkıcı bir sunuma kadar kalabalıktır. teorik Vakıflar. Bu kitap, hafif, yaşam tarzı sayesinde keyifli bir istisna. Yazar, SQL ifadeleri ve blokları, koşullar türleri, JOIN-AH, alt sorgular ve diğer birçok şey hakkında okuyucu bilgilerini ustaca sunar.
Uygulamada kazanılan bilgiyi korumak için, yazar bir MySQL eğitim üssü oluşturur ve tüm teorik materyalleri kapsayan birçok pratik talepte bulunur.

Chris Fialyl "SQL" (2013)


Kitap, ANSI SQL-92 dilinin (SQL2) versiyonundan bahsediyor. Örnekleme ve değiştirme ve veritabanı yapısı nesneleriyle birlikte çalışmak için sorgu dilinin nasıl uygulanacağı hakkında ayrıntılı bilgi verilir. Tüm örnekler ayrıntılı olarak açıklanmaktadır.
En yaygın DBMS: MySQL, Oracle, MS SQL Server ve PostgreSQL'in uygulanmasında SQL lehçelerindeki farklılıklara özel dikkat gösterilir.
Kitap, bağımsız bir şekilde SQL dilini öğrenmek veya bu konudaki bilgilerini geliştirmek isteyen herkese yöneliktir.

Anthony Molinaro "SQL. Tarifler Koleksiyonu "(2009)


Bu yayın, zaten bir miktar SQL bilgisine sahip olanlar ve bu alandaki becerilerini geliştirmek isteyenler için tasarlanmıştır. Aynı zamanda, veritabanları alanındaki çok faydalı ve uzmanlar olacaktır, çünkü yazar farklı DBMS: DB2, Oracle, PostgreSQL, MySQL ve SQL Server'da çözme görevlerinin örneklerini sunar.
Kitap, daha geniş bir görev yelpazesini çözmek için SQL'in nasıl kullanılacağını öğrenmenize yardımcı olacaktır: Verilerinin içindeki işlemlerden veri ve bunları uygulamada ağ üzerinden iletin.
Pencere fonksiyonlarını ve özel operatörlerin nasıl uygulanacağını, ayrıca veri ambarlarıyla birlikte çalışma yöntemlerinin nasıl uygulanacağını öğreneceksiniz: histogramlar, bloklarda veri hizalaması oluşturarak, kayar değerlerin toplanmasını gerçekleştirerek, mevcut toplamlar ve kollar oluşturan. Dizeleri sütunlara dağıtabilir ve tam tersi, satırın içindeki hesaplamaları basitleştirebilir ve elde edilen setin bir çift dağıtımını gerçekleştirebilir, SQL'yi bir dizgeyi karakterize, kelimelere veya bir dizgenin elemanlarına, kelimeleri veya elemanlarına syntax için SQL kullanmanızı sağlayan bir satır baypas gerçekleştirebilirsiniz. ayırıcılar. Yazar tarafından sunulan teknikler, uygulamalarınızın kodunu optimize eder ve sizin için yeni SQL dil özelliklerini açacaktır.

Alex Kriegel ve diğerleri. "SQL. Kullanıcı Bible », 2. Baskı (2010)


Kitap, her bölümün, üç önde gelen DBM'lerin lehçeleri için belirli taleplerin uygulanmasının bir karşılaştırılmasının karşılaştırılmasının bir karşılaştırılmasında benzersizdir. Bundan dolayı, geliştiriciler için Newbies'ten Guru, bir tür masaüstü el kitabı için SQL dilinde ayrıntılı ve pratik bir referans kitabıdır.
Yayın, temel bilgilerden işlemlere ve kilitlere, fonksiyonlara ve veritabanı koruma araçlarından temaları kapsar.
Son, birkaç ek konu sunar: XML, OLAP iş analitiklerinde SQL entegrasyonu ve çok daha fazlası.

Eric Redmond, Jim R. Wilson "yedi hafta boyunca yedi veritabanları. Modern Veritabanlarına Giriş ve Nosql ideolojisine "(2015)

Kitap, modern açık kaynaklı veritabanlarının çoğunu açıklar: redis, neo4j, couchdb, mongodb, hbase, postgresql ve riak. Her veritabanı, ana fikirleri ve güçlü yönleri gösteren gerçek verilerle çalışma örnekleri sağlar.
Bu kitap, yedi veritabanının her birinin güçlü ve zayıf yönlerine ışığı değiştirecek ve gereksinimleri en iyi şekilde karşılayan birini seçmeyi öğretecek.

Çoğu modern web uygulamaları, genellikle denilen bir dil kullanarak veritabanlarıyla etkileşime girer.SQL. Neyse ki bizim için, bu dil öğrenmek çok kolaydır. Bu yazıda basit bakacağızSql sorular ve etkileşimi için nasıl kullanılacağını öğreninMySQL veritabanı.

Ne istiyorsun?

SQL (Yapısal Sorgu Dili) gibi veritabanı yönetim sistemleriyle etkileşime girecek şekilde özel olarak tasarlanmış dilMySQL, Oracle, Sqlite ve diğer ... yapmak içinSql talepler Bu makalede yüklemenizi tavsiye ederim.Mysql üzerinde yerel bilgisayar. Ayrıca kullanmanızı tavsiye ederim phpmyadmin. görsel bir arayüz olarak.

Bütün bunlar tüm favori denver'da mevcuttur. Bence herkes ne olduğunu ve nerede alacağını bilmeli :). Yapabilmekbaşka bir Wamp veya Mamper kullanın.

Denver'da yerleşik bir yer varMysql konsol. Kullanacağız.

Veritabanı yarat:veritabanı oluşturma

İşte ilk isteğimiz. Daha fazla iş için ilk veritabanımızı oluşturacağız.

Başlamak için, keşfetmekMysql konsol ve giriş yapın. İçinWamp. varsayılan şifre boş. Bu hiçbirşey :). İçinMamp - "kök". Denver için açıklığa kavuşturulmalıdır.

Giriş yaptıktan sonra, aşağıdaki satırı girin ve tıklayınGİRİŞ:

Veritabanı oluştur my_first_db;

Noktaya (;), istek sonunda ve diğer dillerde eklendiğini unutmayın.

Ayrıca SQL'de komutlar kaydolmaya duyarlı. Onları büyük harflerle yazıyoruz.

Opti sadece: Karakter seti.ve Harmanlama

Yüklemek istiyorsanızkarakter seti (semboller) ve harmanlama (karşılaştırma) olabilir aşağıdaki komutu yazın:

Veritabanı oluştur my_first_db Varsayılan karakter seti UTF8 ATF8_general_ci;

Desteklenen karakter kümelerinin bir listesi var. Mysql.

Veritabanlarını göster:tüm veritabanlarının bir listesini görüntüler

Bu komut, mevcut tüm veritabanlarını çıkarmak için kullanılır.

Doldurma veritabanı:veritabanının kaldırılması

Mevcut bir veritabanını bu istekle silebilirsiniz.

Uyarı olmadan gerçekleştirildiğinden, bu komuta dikkat edin. Veritabanınızın verileri varsa, kaldırılır.

Kullanım:Veritabanı seçimi

Teknik olarak, bu bir istek değil, ancak bir operatör ve sonunda virgülle bir nokta gerektirmez.

MySQL'yi bildirdi geçerli oturum için varsayılan veritabanını seçin. Şimdi tablolar oluşturmaya ve veritabanıyla başka şeyler yapmaya hazırız.

Veritabanındaki tablo nedir?

Veritabanına formda bir tablo gönderebilirsiniz.Excel dosyası.

Resimdeki gibi, tabloların sütun adları, satırları ve bilgilere sahiptir. ÜzerindenSql İsteklerimiz bu tabloları oluşturabiliriz. Ayrıca ekleyebilir, okuyabilir, güncellemeleri yapabilir ve bilgileri silebiliriz.

Tablo oluştur: Bir masa oluşturma

C. bu talebin yardımı Veritabanında tablolar oluşturabiliriz. Ne yazık ki, belgelerMysql bu konuda yeni başlayanlar için çok net değil. Bu tür isteklerin yapısı çok karmaşık olabilir, ancak kolayca başlayacağız.

Aşağıdaki sorgu 2 hoparlörlü bir tablo oluşturacaktır.

Tablo kullanıcıları oluşturun (Kullanıcı adı varchar (20), Create_Date tarihi);

Lütfen isteklerimizi birkaç satırda ve girintiler için sekmelerle yazabiliriz.

İlk dizge basittir. "Kullanıcılar" adına sahip bir masa oluştururuz. Sonraki parantez içinde, virgül aracılığıyla, tüm sütunların bir listesi var. Sütunun her adından sonra, varchar veya tarih gibi bilgi türlerimiz var.

Varchar (20), kolonun bir dize tipine sahip olduğu ve en fazla 20 karakter uzunluğunda olabileceği anlamına gelir. Tarih ayrıca, tarihleri \u200b\u200bbu formatta depolamak için kullanılan bir tür bilgidir: "GGYG - MM-DD".

BİRİNCİL ANAHTAR ( birincil anahtarh)

Aşağıdaki sorguyu yerine getirmeden önce, birincil anahtarımız olacak "user_id" için bir sütun da içermelidir. Birincil anahtarı, tablonun her satırını tanımlamak için kullanılan bilgiler olarak algılayabilirsiniz.

Tablo kullanıcıları oluşturun (user_id int auto_increment birincil anahtar, kullanıcı adı varchar (20), Create_Date tarihi);

İnt. 32 bit tamsayı tipi yapar (örneğin, sayılar). OTOMATİK ARTIŞ. otomatik olarak yeni bir değer oluştururİD her zaman yeni bilgi sayısı ekleriz. Bu mutlaka değil, ancak tüm süreci daha kolay hale getirir.

Bu sütunun tüm değer olması zorunlu değildir, ancak en sık kullanılır. Bununla birlikte, birincil anahtarın varlığı da zorunlu değildir, ancak, veritabanının mimarisi ve performansı için önerilir.

Bir istek yapalım:

Tabloları göster:tüm masaları göster

Bu istek, veritabanında bulunan tabloların bir listesini almanızı sağlar.

Açıklamak:Tablo yapısını göster

Mevcut tablonun yapısını görüntülemek için bu sorguyu kullanabilirsiniz.

Sütunlar, tüm özelliklerle görüntülenir.

Damla tablosu:tabloyu silmek

Damla veritabanlarının yanı sıra, bu istek masayı ve içeriğini uyarmadan siler.

TABLOYU DEĞİŞTİR: masayı değiştir

Bu istek, tablo ile yapabileceği daha fazla sayıda değişiklik nedeniyle karmaşık bir yapı içerebilir. Örneklere bakalım.

(Tabloyu son adım silerseniz, testler için tekrar oluşturun)

Sütun ekleme

ALTER TABLE kullanıcıları Kullanıcı adından sonra E-posta Varchar (100) ekleyin;

SQL'in iyi okunabileceği sayesinde, detaylı olarak açıklamak mantıklı olmadığını düşünüyorum. Ekleriz yeni sütun "Kullanıcı adı" sonrası "e-posta".

Hoparlörü silme

Aynı zamanda çok kolaydı. Uyarı olmadan verileri silebildiğiniz için bu talebi dikkatli kullanın.

Daha fazla deney için sadece uzak bir sütunu geri yükleyin.

Sütununda değişiklik yapma

Bazen sütun özelliklerinde değişiklik yapmak isteyebilirsiniz ve bunun için tamamen silinmeniz gerekmez.

Bu istek, kullanıcı sütununu "user_ adını" olarak yeniden adlandırdı ve türünü varchar (20) ile varchar (30) ile değiştirdi. Böyle bir değişiklik, tablodaki verileri değiştirmemelidir.

Ekle: Tabloya bilgi ekleme

Aşağıdaki talebi kullanarak tabloya bazı bilgiler ekleyelim.

Gördüğünüz gibi, değerler () virgülle ayrılmış değerlerin bir listesini içerir. Tüm değerler tek sütunlar halindedir. Ve değerler, bir tablo oluştururken tanımlanan sütunların sırasına göre olmalıdır.

"User_id" adlı birincil anahtar alanı için ilk boş değerin olduğunu unutmayın. Sütunun bir Auto_incrent özelliğine sahip olduğu için kimliğin otomatik olarak oluşturulması için bunu yapıyoruz. İlk Kime ID için bilgi eklendiğinde 1. Bir sonraki aralık - 2, vb.

ALTERNATİF SEÇENEK

Bir seri eklemek için başka bir sorgu seçeneği var.

Bu sefer değerler yerine SET anahtar sözcüğünü kullanıyoruz ve parantez yok. Birkaç nüans var:

Sütun atlanabilir. Örneğin, "user_id" için bir değer atamadık, varsayılan olarak Auto_increment değerinizi alacak. Sütunu varchar türüyle atlarsanız, boş dize eklenecektir.

Her sütun ada göre uygulanmalıdır. Bundan dolayı, geçmiş versiyonun aksine herhangi bir düzende belirtilebilirler.

Alternatif versiyon 2.

İşte başka bir seçenek.

Yine, sütun adına referanslar olduğundan, değerleri herhangi bir sırayla ayarlayabilirsiniz.

Last_insert_id ()

Bu sorguyu, geçerli oturumun son satırı için Auto_increment olan kimliği almak için kullanabilirsiniz.

Şimdi ()

Şimdi MySQL işlevini sorgulardaki nasıl kullanabileceğinizi gösterme zamanı.

Şimdi () işlevi geçerli tarihi görüntüler. Böylece, sütunun tarihini yeni satırın yerleştirilmesindeki akıma otomatik olarak ayarlamak için kullanabilirsiniz.

1 Uyarı aldığımızı, ancak dikkat etmeyin. Bunun nedeni şu anda () ayrıca geçici bilgi vermeye de hizmet eder.

SEÇİM: Tablodan veri okuma

Tabloya bilgi eklersek, oradan okumaya öğrenmek mantıklı olur. Bu, istediğiniz istek bize yardımcı olacaktır.

Aşağıda, tabloyu okumak için mümkün olan en kolay seçenek isteğidir.

Bu durumda, yıldız (*), masadaki tüm alanları talep ettik. Yalnızca belirli konuşmacılar istiyorsanız, istek buna benzer.

DurumNerede.

En sık, tüm sütunlarla ilgilenmiyoruz, ancak sadece bazılarında. Örneğin, "Nettuts" kullanıcısı için yalnızca bir e-posta adresine ihtiyacımız olduğunu varsayalım.

Sorgudaki koşulları ayarlamanıza ve detaylı örnekler yapmanızı sağlar.

Programlamada olduğu gibi, bir işaretin (\u003d) eşitlik eşitliği için kullanıldığına dikkat edin.

Karşılaştırmaları da kullanabilirsiniz.

Ve veya veya koşulları birleştirmek için kullanılabilir:

Dikkat sayısal değerler tırnak içinde olmamalıdır.

İçinde ()

Bu, birkaç değer için örnekleme için kullanışlıdır.

Sevmek

"Joker Kart" isteklerini yapmanızı sağlar

% Simgesi "joker karakter" olarak kullanılır. Yani, yerinde bir şey olabilir.

DurumTarafından sipariş.

Sonucu sipariş edilen bir formda herhangi bir kritere göre almak istiyorsanız

Varsayılan art (daha fazla). Tersi için desc kullanır.

Sınırı ... Ofset ...

Elde edilen sonuç sayısını sınırlayabilirsiniz.

Sınır 2, yalnızca ilk ilk sonuçları alır. Sınır 1 Ofset 2, ilk 2'den sonra 1 sonuç alır. Sınır 2, 1 aynı şey anlamına gelir (sadece dikkatin ilk önce dengelenmesi ve sonra sınırlandırın).

Güncelleme: Tablodaki bilgilerde değişiklik yapın

Bu sorgu, tablodaki bilgileri değiştirmek için kullanılır.

Çoğu durumda, muhtemelen belirli sütunlarda değişiklik yapmak isteyeceğiniz, durumun durumuyla birlikte kullanılır. Değişim koşulları yoksa, değişiklikler tüm satırları etkileyecektir.

Değişiklik yapmak istediğiniz satır sayısını sınırlamak için Sınır'ı da kullanabilirsiniz.

Sil: Masadan Bilgileri Çıkarma

Güncellemenin yanı sıra, bu sorgu nerede:

Tablonun içeriğini silmek için, bunun gibi yapabilirsiniz:

Kullanıcılardan silin;

Ama kullanmak daha iyidirKesik.

Silme işlemine ek olarak, bu istek de sıfırlanır OTOMATİK ARTIŞ. ve tekrar satır eklerken, sayım sıfırdan başlayacaktır.Silmek. bu değil ve sayma devam ediyor.

Küçük harf değerleri ve özel kelimeleri devre dışı bırakın

Satır değerleri

Bazı karakterler bağlantısı kesilmelidir (kaçış. ) Ya da belki de sorun olabilir.

Bunu yapmak için arka çizgi kullanın(\).

Özel sözler

MySQL'den beri Çok özel kelime var (Seçin veya güncelleyin. ) Onları kullanırken hataları önlemek için, alıntılar kullanmanız gerekir. Ama sıradan tırnak değil, ama böyle(`).

Yani, adında bir sütun eklemeniz gerekir.silmek. ", Böyle yapılması gerekiyor:

Sonuç

Sonuna kadar okuduğunuz için teşekkür ederiz. Umarım bu makale yararlı olmuştur. Bu son değil! Devam edecek:).

Yapısal Sorgu Dili (Yapılandırılmış Sorgu Dili) veya SQL- Bu, Quasi-ilişkisel veritabanlarında kullanım için bildirimsel bir programlama dilidir. Orijinal SQL özelliklerinin birçoğu konsolon hesaplamaları için alınmıştır, ancak en son SQL uzantıları, daha fazla ve daha fazla ilişkisel cebir içerir.
SQL başlangıçta IBM tarafından yaratıldı, ancak birçok üretici kendi lehçelerini geliştirdi. 1986 yılında Amerikan Ulusal Standartlar Enstitüsü (ANSI) tarafından 1987'de ISO tarafından kabul edildi. SQL programlama dil standardında, ANSI, resmi SQL telaffuzunun "es kew el" olduğunu belirtti. Bununla birlikte, birçok veritabanı uzmanının "argo" telaffuzu "Sikvel" i, daha sonra ibm'in çatışması ve eşyalarından dolayı değiştirilen dilin ilk adını yansıtan "SIKVEL" i kullandı. Yeni başlayanlar için programlama.
SQL Programlama Dili 1992 yılında revize edildi ve bu sürüm SQL-92 V olarak bilinir. O zaman yine 1999'da SQL: 1999 (AKA SQL3) olmak üzere revize edildi. Aptallar için programlama. SQL 1999, daha önce başka versiyonlarda desteklenmeyen nesneleri destekler, ancak yalnızca 2001 sonunda yalnızca birkaç veritabanı yönetim sistemi SQL uygulamasını destekledi: 1999.
SQL, ANSI ve ISO olarak tanımlanmasına rağmen, çoğu, Oracle PL / SQL Corporation'ın uygulanması veya "Transact-SQL" adlı Sybase ve Microsoft'un uygulanması gibi kendi özelliklerine sahip birçok varyasyon ve uzantıya sahiptir. Bu, programlama temelleri ile daha güçlü bir şekilde karıştırabilir. Ticari uygulamaların, standartların temel özelliklerinin desteğini düşürmeleri nadir değildir, bu tür veri türleri bir tür seçeneklerini tercih eden bir tarih ve saat olarak. Sonuç olarak, genellikle platform platformundan ciddi yapısal değişiklikler olmadan portlanan ANSI C veya ANSI FORTRANS'ın aksine, SQL programlama dil istekleri, önemli değişiklikler olmadan farklı veritabanı sistemleri arasında nadiren transfer edilebilir. Veritabanlardaki çoğu kişi, bu uyumluluk eksikliğinin, her bir geliştiriciyi kendi veri veritabanı yönetim sistemiyle sağlamak ve alıcıyı belirli bir veritabanına bağlamak için kasıtlı olduğunu düşünüyor.
Adın ardından, SQL programlama dili, ilişkisel veritabanında bulunan veri sorguları için belirli, sınırlı hedefler için tasarlanmıştır. Bu nedenle, çok daha geniş bir problemi çözmek için tasarlanmış, C veya Basic gibi bir usul dili değil, veri örnekleri oluşturmak için bir dizi programlama dili talimatıdır. PL / SQL gibi dil uzantıları, SQL avantajlarını kaydederken SQL için prosedürel unsurlar ekleyerek bu sınırlamayı çözmek için tasarlanmıştır. Başka bir yaklaşım, SQL'nin bir prosedür dil programlama komutlarını gömmelerine izin verilmesi ve veritabanıyla etkileşime girmesidir. Örneğin, Oracle ve diğerleri, Cava dilini veritabanında desteklediğinde, PostgreSQL, Perl, TCL veya C üzerindeki işlevleri yazmanıza izin verir.
SQL hakkında bir şaka: "SQL nerede yapılandırılmış ne de dil." Şakanın özü, SQL'nin bir turing dili olmadığıdır. .

SELECT * t
C1. C2.
1 a.
2 b.
C1. C2.
1 a.
2 b.
T'den C1'i seçin
C1.
1
2
C1. C2.
1 a.
2 b.
SELECT * T N'den C1 \u003d 1
C1. C2.
1 a.

T tablası göz önüne alındığında, SELECT * t isteğinden, tüm tablonun tüm satırlarının tüm öğelerini gösterir.
Aynı tablodan, T istucuğundan C1 seçim öğelerini, tablonun tüm satırlarının C1 sütunundan gösterecektir.
Aynı tablodan, C1 \u003d 1 sorgusu, C1 sütununun değerinin "1" olduğu tüm satırların tüm elemanlarını gösterecektir.

SQL Anahtar kelimeleri

SQL kelimeleri bir takım gruba ayrılır.

İlk olarak Veri Manipülasyonu Dili veya DML (Veri Yönetimi Dili). DML, veritabanlarını istemek, veri eklemek, güncellemek ve silmek için kullanılan dilin bir alt kümesidir.

  • SELECT, en sık kullanılan DML komutlarından biridir ve kullanıcının bir isteğe bağlı olarak, bir set biçiminde istenen sonucun açıklaması olarak talep etmesini sağlar. APOSİTE, sonuçların nasıl bulunulması gerektiği gösterilmemesidir - veritabanında gerçekleştirilebilecek bir form formunun talebi, veritabanı sisteminin çalışmasıdır, daha spesifik olarak optimizer istenir.
  • Ekleme, mevcut tablo için dizeleri (resmi arama) eklemek için kullanılır.
  • Güncelleme, tablonun mevcut dizisindeki veri değerlerini değiştirmek için kullanılır.
  • Tablodan silinecek mevcut satırların tanımını silin.

Üç kişi anahtar kelimelera, DML grubuna girdiklerini söyleyebiliriz:

  • Çalışmaya başlayın (veya SQL lehçesine bağlı olarak), veritabanı işleminin başlangıcını tamamen veya hiç yerine getirmemiş olanı işaretlemek için kullanılabilir.
  • İşlemler gerçekleştirdikten sonra tüm veri değişikliklerinin kaydedildiğini belirtir.
  • Geri alma, son sabitleme veya geri alma işleminden sonra tüm veri değiştiğini belirler, veritabanında "geri alma" olarak kaydedilen ana kadar.

İşlem kontrolü ve engelleme gibi alanlarda taahhüt ve geri alma işlemi kullanılır. Her iki talimatın da tüm güncel işlemleri tamamlar (veritabanı işlemleri) ve tablolardaki verileri değiştirmek için tüm kilitleri kaldırır. Başlangıç \u200b\u200bçalışmasının veya benzer bir uygulamanın varlığı veya yokluğu, belirli SQL uygulamasına bağlıdır.

İkinci anahtar kelime grubu gruba aittir. Veri Tanımlama Dili veya DDL (Veri Tanımlama Dili). Ddl Kullanıcının yeni tabloları ve ilgili unsurları tanımlamasını sağlar. En ticari üsler sQL Veri Standart olmayan, ancak belirli bir sistemin hayati unsurları üzerinde kontrol sağlayan DDL'de kendi uzantılarına sahip olmak.
Ana DDL öğeleri oluşturma ve silme komutlarıdır.

  • Veritabanında oluşturulacak nesneleri (örneğin, tablolar) tanımlar.
  • Bırak, veritabanındaki mevcut nesnelerin bir kural olarak, geri dönüşü olmayan bir kural olarak kaldırılacağını belirler.
  • Bazı veritabanı sistemleri de destekler değiştirmek.Kullanıcının mevcut nesneyi farklı şekillerde değiştirmesini sağlayan - örneğin, mevcut bir tabloya sütun ekleyebilirsiniz.

Üçüncü SQL anahtar kelimesi grubu Veri Kontrol Dili veya DCL (Veri Kontrol Dili). Dcl Veri erişim haklarından sorumludur ve kullanıcının veritabanındaki verileri görüntüleme veya manipüle etmesine kimin erişmesini izlemesine izin verir. İşte iki ana anahtar kelimeler:

  • Grant - Kullanıcının işlem yapmasını sağlar
  • İNCELEME - Kullanıcıya işlem yapabilme yeteneğini siler veya kısıtlar.

SQL kullanarak veritabanı sistemleri

  • Interbase.
  • Mysql
  • Oracle
  • Postgresql
  • SQL Server

Mesleki gelişim profesyoneli nasıl olur ve para kazanmaya başlamak? Bilgilendirme tanıtımı ile ucuz video kursları.

Konuya devam ediyor:
Akıllı telefon

Minitool Güç Veri Kurtarma Serbest Sürümü, verileri kurtarmak için tasarlanmış kullanımı kolay bir programdır. Minitool Güç Veri Kurtarma ile çalışmak için ...