Yeni başlayanlar için SQL için resimli bir kendi kendine çalışma kılavuzu. Kategori arşivleri: SQL üzerine kitaplar Aptallar için sql programlama dili

Yazardan: Sana çaydanlık mı denildi? Peki, bu düzeltilebilir! Her semaver bir zamanlar çaydanlıktı! Yoksa her profesyonel bir zamanlar semaver miydi? Hayır, yine bir şeyler yanlış! Sonuç olarak, MySQL yeni başlayanlar içindir.

Aptallar neden MySQL'e ihtiyaç duyar?

Hayatınızı İnternet'e ciddi şekilde bağlayacaksanız, "web" in ilk adımlarında bu DBMS ile karşılaşacaksınız. MySQL, güvenle "tüm İnternet" veritabanı yönetim sistemi olarak adlandırılabilir. Az ya da çok ciddi bir kaynak onsuz yapamaz, her barındırmanın yönetici panelinde bulunur. Ve tüm popüler CMS'lerin ve hatta kendi kendine yapılan motorların çoğu, katılımıyla inşa edilmiştir.

Genel olarak, bu platform olmadan yapamazsınız. Ancak onu incelemek için doğru yaklaşıma, doğru araçlara ve en önemlisi arzu ve sabra ihtiyacınız var. Umarım ikincisinden bol miktarda vardır. Ve beyninizin kaynayacağına ve gerçek bir çaydanlık gibi kafanızdan buhar çıkacağına hazırlıklı olun.

Ancak MySQL, yalnızca yanlış öğrenmeye başlarsanız aptallar için çok zordur. Böyle bir hata yapmayacağız ve bu teknoloji ile tanışmamıza en baştan başlayacağız.

Temel konseptler

İlk olarak, bu yazıda bahsedeceğimiz temel kavramları gözden geçirelim:

Veritabanı (DB), DBMS'nin ana kurucu birimidir. Veritabanı, sütunlardan ve kayıtlardan (satırlardan) oluşan tablolar içerir. Kavşakta oluşturulan hücreler, belirli bir türde yapılandırılmış veriler içerir.

DBMS (veritabanı yönetim sistemi) - veritabanı yönetimi için tüm yazılım modüllerinden oluşan bir set.

SQL, geliştiricinin DBMS'nin çekirdeği (sunucusu) ile "iletişim kurduğu" bir yapılandırılmış sorgu dilidir. Herhangi bir programlama dili gibi, SQL'in de kendi sözdizimi, komutlar ve operatörler seti, desteklenen veri türleri vardır.

Başlangıç ​​için yeterli teorik bilgiye sahip olduğumuzu düşünüyorum. Teoride eksik olan boşlukları pratikle “boyayacağız”. Şimdi geriye kalan tek şey doğru yazılım aracını seçmek.

Doğru aracı bulmak

Yeni başlayanlar için tüm MySQL kabukları yelpazesinde hemen hemen "arama" yaptıktan sonra, bunların var olmadığını fark ettim. DBMS yönetimine yönelik tüm yazılım ürünleri, önceden kurulmuş bir veritabanı sunucusu gerektirir. Genel olarak, "scooter" ı yeniden icat etmemeye bir kez daha karar verdim ve yerli Denwer paketini seçtim. Resmi web sitesinden indirebilirsiniz.

DBMS'nin tüm bileşenlerini zaten içerir ve yeni başlayanların basit ve anlaşılır bir kurulumdan hemen sonra MySQL ile pratik bir tanışmaya başlamasına izin verir. Ayrıca Denwer, acemi bir geliştirici için gerekli olan birkaç başka araç içerir: yerel sunucu, PHP.

İlk adım

"Beyler" setinin kurulum sürecini açıklamayacağım, çünkü her şey orada otomatik olarak gerçekleşir. Kurulumu başlattıktan sonra, sadece gerekli tuşlara basmak için zamanınız var. MySQL'in yapay versiyonunda tam da ihtiyacınız olan şey.

Kurulum işlemi bittiğinde yerel sunucuyu başlatın, birkaç saniye bekleyin. Ardından tarayıcınızın adres çubuğuna localhost yazın.

"Yaşasın, çalışıyor!" sayfasında resimdeki bağlantılardan birini takip edin. Ardından, veritabanı yönetimi için bir kabuk olan phpMyAdmin'e götürüleceksiniz.

http://downloads.mysql.com/docs/world.sql.zip linkine tıklayarak resmi MySQL web sitesinden örnek bir test veritabanı indireceksiniz. Tekrar phpMyAdmin'e gidin, üstteki ana menüde "İçe Aktar" sekmesine gidin. İlk bölümdeki ("İçe aktarılacak dosya") "Geçerli olarak içe aktar" penceresinde "Bilgisayarınıza göz atın" değerini ayarlayın.

Gezgin penceresinde, indirilen örnek veritabanının bulunduğu arşivi seçin. Ana pencerenin altındaki "Tamam" ı tıklamayı unutmayın.

Belirtilen parametre değerlerini şimdilik değiştirmemenizi tavsiye ederim. Bu, içe aktarılan kaynağın verilerinin yanlış görüntülenmesine neden olabilir. phpMyAdmin, veritabanı sıkıştırma algoritmasını tanıyamadığına dair bir hata verirse, sıkıştırmayı açın ve tüm içe aktarma işlemini baştan tekrarlayın.

Her şey yolunda giderse, program mesajı en üstte içe aktarmanın başarılı olduğunu ve DB listesinin solunda başka bir tane (kelime) görünecek.

Yapısına içeriden bakalım, böylece neyle uğraşmanız gerektiğini daha net bir şekilde hayal edebilirsiniz.

Yeni Başlayanlar için MySQL Veritabanı adına tıklayın. İçinde bulunduğu tabloların bir listesi altında görüntülenecektir. Bunlardan birine tıklayın. Ardından, "Yapı" üst menü öğesine gidin. Ana çalışma alanı, tablonun yapısını görüntüler: tüm sütun adları, veri türleri ve tüm nitelikler.

Bu eğitim, SQL dili (DDL, DML) için "belleğimin damgası" gibi bir şeydir, yani. bu, mesleki faaliyetim sırasında biriken ve sürekli olarak kafamda depolanan bilgilerdir. Bu, veritabanlarıyla çalışırken en sık kullanılan benim için yeterli bir minimumdur. Daha eksiksiz SQL yapıları kullanmak gerekirse, yardım için genellikle İnternette bulunan MSDN kitaplığına başvururum. Bana göre her şeyi kafanızda tutmak çok zor ve buna özel bir ihtiyaç da yok. Ancak temel yapıları bilmek çok yararlıdır, çünkü Oracle, MySQL, Firebird gibi birçok ilişkisel veritabanlarında hemen hemen aynı şekilde uygulanabilirler. Farklılıklar, esas olarak, ayrıntılarda farklılık gösterebilecek veri türlerindedir. SQL dilinin çok fazla temel yapısı yoktur ve sürekli pratikle bunlar çabucak hatırlanır. Örneğin, nesneler (tablolar, kısıtlamalar, dizinler vb.) oluşturmak için, veritabanıyla çalışmak için ortamın (IDE) bir metin düzenleyicisinin elinizde olması yeterlidir ve bunun için keskinleştirilmiş görsel araçları incelemeye gerek yoktur. belirli bir veritabanı türüyle çalışma (MS SQL , Oracle, MySQL, Firebird, ...). Ayrıca, tüm metin gözünüzün önünde olduğundan ve örneğin bir dizin veya kısıtlama oluşturmak için çok sayıda sekmede gezinmeniz gerekmediği için uygundur. Bir veritabanı ile sürekli çalışma ile, komut dosyaları kullanarak bir nesneyi oluşturmak, değiştirmek ve özellikle yeniden oluşturmak, görsel modda yapıldığından çok daha hızlıdır. Ayrıca komut dosyası modunda (buna göre, gereken özenle), nesneleri adlandırma kurallarını belirlemek ve kontrol etmek daha kolaydır (benim öznel görüşüm). Ek olarak, bir veritabanında (örneğin, bir test olan) yapılan değişikliklerin aynı biçimde başka bir (üretken) veritabanına aktarılması gerektiğinde komut dosyaları kullanışlıdır.

SQL dili birkaç bölüme ayrılmıştır, burada en önemli 2 bölümünü tartışacağım:
  • DML - Aşağıdaki yapıları içeren Veri Manipülasyon Dili:
    • SEÇ - veri seçimi
    • INSERT - yeni veri ekleme
    • GÜNCELLEME - veri güncelleme
    • DELETE - verileri silme
    • MERGE - veri birleştirme
Çünkü Ben bir uygulayıcıyım, bu derste çok az teori olacak ve tüm yapılar pratik örneklerle açıklanacak. Ek olarak, bir programlama dilinin ve özellikle SQL'in ancak pratikte, onu hissederek ve şu ya da bu yapıyı uyguladığınızda ne olduğunu anlayarak öğrenilebileceğine inanıyorum.

Bu eğitim, Adım Adım ilkesine dayanmaktadır, yani. Örneklerden sonra sırayla ve tercihen hemen okunması gerekir. Ancak, yol boyunca bir komut hakkında daha ayrıntılı olarak daha fazla bilgi edinme ihtiyacınız varsa, İnternet'te, örneğin MSDN kitaplığında belirli bir arama kullanın.

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

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 için bir yardımcı programdır. Bu yardımcı program, bir komut dosyası düzenleyicisi (esas olarak kullanacağımız) ve sunucu nesneleri ve ayarları ile çalışan bir grafik programı içerir. SQL Server Management Studio'daki ana araç, kullanıcının sunucu nesnelerini görüntülemesine, almasına ve değiştirmesine izin veren Nesne Gezgini'dir. Bu metin kısmen Wikipedia'dan ödünç alınmıştır.

Yeni bir komut dosyası düzenleyicisi oluşturmak için Yeni Sorgu düğmesini kullanın:

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

Belirli bir komutu (veya bir komut grubunu) yürütmek için onu seçin ve Yürüt düğmesine veya F5 tuşuna basın. Düzenleyicide o anda yalnızca bir komut varsa veya tüm komutları yürütmeniz gerekiyorsa, hiçbir şey seçmenize gerek yoktur.

Komut dosyalarını, özellikle nesne oluşturanları (tablolar, sütunlar, dizinler) yürüttükten sonra, değişiklikleri görmek için bağlam menüsünden güncellemeyi kullanın, uygun grubu (örneğin Tablolar), tablonun kendisini veya içindeki Sütunlar grubunu vurgulayın.

Aslında, burada verilen örnekleri uygulamak için bilmemiz gereken tek şey bu. SSMS yardımcı programının geri kalanını kendi başınıza öğrenmek kolaydır.

biraz teori

İlişkisel bir veritabanı (RDB veya yalnızca bir veritabanı bağlamında), birbirine bağlı bir tablo koleksiyonudur. Kabaca konuşursak, bir veritabanı, verilerin yapılandırılmış bir biçimde depolandığı bir dosyadır.

DBMS, bu Veritabanları için bir Yönetim Sistemidir, yani. belirli bir veritabanı türüyle (MS SQL, Oracle, MySQL, Firebird, ...) çalışmak için bir dizi araçtır.

Not
Çünkü gerçek hayatta, günlük konuşma dilinde, çoğunlukla "Oracle DB", hatta sadece "Oracle" deriz, aslında "Oracle DBMS" anlamına gelir, o zaman bu eğitim bağlamında DB terimi bazen kullanılacaktır. Bağlamdan, ne hakkında olduğu açık olacağını düşünüyorum.

Tablo, sütunların bir koleksiyonudur. Sütunlar alan veya sütun olarak da adlandırılabilir, bu kelimelerin tümü aynı şeyi ifade etmek için eşanlamlı olarak kullanılacaktır.

Tablo, RDB'nin ana nesnesidir, tüm RDB verileri tablonun sütunlarında satır satır saklanır. Dizeler, kayıtlar da eşanlamlıdır.

Her tablo ve sütunları için, daha sonra erişilebilecekleri adlar verilir.
MS SQL'de bir nesne adı (tablo adı, sütun adı, dizin adı vb.) maksimum 128 karakter uzunluğunda olabilir.

Referans için- ORACLE veritabanında nesne adları maksimum 30 karakter uzunluğunda olabilir. Bu nedenle, belirli bir veritabanı için, karakter sayısı sınırı içinde kalmak için nesneleri adlandırmak için kendi kurallarınızı geliştirmeniz gerekir.

SQL, bir DBMS kullanarak bir veritabanında sorgu yürütmenize izin veren bir dildir. Belirli bir DBMS'de, SQL dilinin belirli bir uygulaması olabilir (kendi lehçesi).

DDL ve DML, SQL dilinin bir alt kümesidir:

  • DDL dili, veritabanı 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, tablo verilerinin işlenmesine izin verir, yani. onun çizgileriyle. Tablolardan veri seçmenize, tablolara yeni veriler eklemenize ve mevcut verileri güncellemenize ve silmenize olanak tanır.

SQL'de kullanılabilecek 2 tür yorum vardır (tek satırlı ve çok satırlı):

Tek satırlık yorum
ve

/ * çok satırlı yorum * /

Aslında bu teori için yeterli olacaktır.

DDL - Veri Tanımlama Dili

Örneğin, programcı olmayan bir kişi için olağan biçimde, çalışanlarla ilgili verileri içeren bir tablo düşünün:

Bu durumda tablonun sütunları şu adlara sahiptir: Personel numarası, tam ad, Doğum tarihi, E-posta, Görev, Departman.

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

  • Personel numarası - tam sayı
  • Tam ad - dize
  • Doğum tarihi - tarih
  • E-posta - dize
  • pozisyon - dize
  • Departman - dize
Sütun türü, belirli bir sütunun ne tür verileri depolayabileceğini gösteren bir özelliktir.

Başlangıç ​​olarak, sadece MS SQL'de kullanılan aşağıdaki temel veri tiplerini hatırlamanız yeterli olacaktır:

Anlam MS SQL gösterimi Açıklama
Değişken uzunluklu dize varchar (N)
ve
nvarchar (N)
N sayısı ile ilgili sütun için mümkün olan maksimum satır uzunluğunu belirtebiliriz. Örneğin, "name" sütununun değerinin maksimum 30 karakter içerebileceğini söylemek istiyorsak, onu nvarchar (30) türüne ayarlamamız gerekir.
varchar ve nvarchar arasındaki fark, varchar'ın dizeleri bir karakterin 1 bayt olduğu ASCII biçiminde depolaması, nvarchar'ın ise dizeleri her karakterin 2 bayt olduğu Unicode biçiminde depolamasıdır.
Varchar türü yalnızca, alanın Unicode karakterleri depolamasına gerek olmadığından %100 eminseniz kullanılmalıdır. Örneğin, varchar e-posta adreslerini saklamak için kullanılabilir çünkü genellikle yalnızca ASCII karakterleri içerirler.
Sabit uzunlukta dize karakter (N)
ve
nchar (N)
Bu tür, değişken uzunluklu bir dizeden farklıdır, çünkü dize N karakterden daha kısaysa, o zaman her zaman N uzunluğunun sağına boşluklarla doldurulur ve veritabanında bu biçimde saklanır, yani. veritabanında tam olarak N karakter kaplar (burada bir karakter char için 1 bayt ve nchar için 2 bayt kaplar). Uygulamamda, bu tür çok nadiren kullanılır ve eğer kullanılıyorsa, esas olarak char (1) biçiminde, yani. alan bir karakterle tanımlandığında.
tamsayı int Bu tür, sütunda yalnızca hem pozitif hem de negatif tamsayıları kullanmamıza izin verir. Başvuru için (şimdi bu bizim için pek alakalı değil) - int türünün izin verdiği sayı aralığı -2 147 483 648 ile 2 147 483 647 arasındadır. Genellikle bu, tanımlayıcıları ayarlamak için kullanılan ana türdür.
Gerçek veya gerçek sayı batmadan yüzmek Basit bir ifadeyle, bunlar ondalık noktanın (virgül) bulunabileceği sayılardır.
tarih tarih Üç bileşenden oluşan sütunda yalnızca Tarih saklamanız gerekiyorsa: Sayı, Ay ve Yıl. Örneğin, 15.02.2014 (15 Şubat 2014). Bu tür "Kabul tarihi", "Doğum tarihi" vb. sütunlar için kullanılabilir. sadece tarihi düzeltmenin bizim için önemli olduğu veya saat bileşeninin bizim için önemli olmadığı ve atılabileceği durumlarda veya bilinmiyorsa.
Zaman zaman Bu tür, yalnızca zaman verilerinin bir sütunda saklanması gerekiyorsa kullanılabilir, yani. Saat, Dakika, Saniye ve Milisaniye. Örneğin, 17:38: 31.3231603
Örneğin, günlük "Uçuş Kalkış Saati".
tarih ve saat tarih saat Bu tür, hem Tarih hem de Saati aynı anda kaydetmenize olanak tanır. Örneğin, 15.02.2014 17:38: 31.323
Örneğin, bu bir etkinliğin tarihi ve saati olabilir.
bayrak biraz Bu tip, "Evet" / "Hayır" gibi değerlerin saklanması için uygundur, burada "Evet" 1 olarak saklanacaktır ve "Hayır" 0 olarak saklanacaktır.

Ayrıca, yasak değilse alan değeri belirtilmeyebilir, bu amaçla NULL anahtar sözcüğü kullanılır.

Örnekleri çalıştırmak için Test adında bir test tabanı oluşturalım.

Aşağıdaki komut çalıştırılarak basit bir veritabanı (ek parametreler belirtilmeden) oluşturulabilir:

VERİTABANI OLUŞTUR Testi
Veritabanını şu komutla silebilirsiniz (bu komuta çok dikkat etmelisiniz):

DROP VERİTABANI Testi
Veritabanımıza geçmek için şu komutu çalıştırabilirsiniz:

KULLANIM Testi
Alternatif olarak, SSMS menü alanındaki açılır listeden Test veritabanını seçin. Çalışırken, bazlar arasında geçiş yapmak için genellikle bu yöntemi kullanırım.

Şimdi veritabanımızda, boşlukları ve Kiril karakterlerini kullanarak açıklamaları olduğu gibi kullanarak bir tablo oluşturabiliriz:

CREATE TABLE [Çalışanlar] ([Personel numarası] int, [Tam isim] nvarchar (30), [Doğum tarihi] tarih, nvarchar (30), [Pozisyon] nvarchar (30), [Departman] nvarchar (30))
Bu durumda, isimleri köşeli parantez içine almalıyız [...].

Ancak veritabanında, daha fazla kolaylık sağlamak için, nesnelerin tüm adlarını Latin alfabesinde belirtmek ve adlarda boşluk kullanmamak daha iyidir. MS SQL'de, genellikle bu durumda, her kelime büyük harfle başlar, örneğin "Personel numarası" alanı için PersonelNumara adını belirleyebiliriz. Ad içinde, örneğin TelefonNumarası1 gibi sayıları da kullanabilirsiniz.

bir notta
Bazı DBMS'lerde, aşağıdaki "PHONE_NUMBER" adlandırma biçimi daha çok tercih edilebilir; örneğin, bu biçim genellikle ORACLE DB'de kullanılır. Doğal olarak alan adı belirlenirken VTYS'de kullanılan anahtar kelimelerle örtüşmemesi istenir.

Bu nedenle köşeli parantez sözdizimini unutabilir ve [Çalışanlar] tablosunu silebilirsiniz:

DROP TABLO [Çalışanlar]
Örneğin, çalışanların olduğu bir tablo "Çalışanlar" olarak adlandırılabilir ve alanları aşağıdaki gibi adlandırılabilir:

  • Kimlik - Personel numarası (Çalışan Kimliği)
  • İsim - tam isim
  • Doğum günü - Doğum tarihi
  • E-posta - E-posta
  • Pozisyon - Pozisyon
  • Departman - Departman
Tanımlayıcı alanını adlandırmak için sıklıkla ID kelimesi kullanılır.

Şimdi tablomuzu oluşturalım:

CREATE TABLE Çalışanlar (ID int, Name nvarchar (30), Doğum tarihi, Email nvarchar (30), Pozisyon nvarchar (30), Departman nvarchar (30))
Gerekli sütunları belirtmek için NULL DEĞİL seçeneğini kullanabilirsiniz.

Mevcut bir tablo için alanlar aşağıdaki komutlar kullanılarak yeniden tanımlanabilir:

Kimlik alanını güncelleme ALTER TABLE Çalışanlar ALTER COLUMN ID int NOT NULL - Ad alanını güncelleme ALTER TABLE Çalışanlar ALTER COLUMN Adı nvarchar (30) NOT NULL

bir notta
Çoğu DBMS için SQL dilinin genel konsepti aynı kalır (en azından bunu birlikte çalıştığım DBMS'lere göre değerlendirebilirim). Farklı DBMS'lerdeki DDL arasındaki fark, esas olarak veri türlerinde yatmaktadır (burada sadece isimleri değil, aynı zamanda uygulanmasının ayrıntıları da değişebilir), SQL dilinin uygulanmasının özellikleri de biraz farklı olabilir (yani, komutlar aynıdır, ancak lehçede küçük farklılıklar olabilir, ne yazık ki, ancak tek bir standart yoktur). SQL'in temellerini bilerek, bir DBMS'den diğerine kolayca geçiş yapabilirsiniz, çünkü bu durumda, yalnızca yeni DBMS'de komutların uygulanmasının ayrıntılarını anlamanız gerekir, yani. çoğu durumda basit bir benzetme yeterli olacaktır.

Tablo oluştur TABLO OLUŞTUR Çalışanlar (ID int, - ORACLE'da, int tipi, sayının eşdeğeridir (sarmalayıcı) (38) Ad nvarchar2 (30), - nvarchar2, ORACLE'da nvarchar ile eşdeğerdir MS SQL Doğum günü tarihi, E-posta nvarchar2 (30) ), Konum nvarchar2 (30), Bölüm nvarchar2 (30)); - ID ve İsim alanlarının güncellenmesi (burada ALTER COLUMN yerine MODIFY (…) kullanılmaktadır) ALTER TABLE Çalışanlar MODIFY (ID int NOT NULL, Name nvarchar2 (30) NOT NULL); - PK ekleme (bu durumda yapı MS SQL'deki gibi görünür, aşağıda gösterilecektir) ALTER TABLE Çalışanlar KISIT EKLE PK_Çalışanlar BİRİNCİL ANAHTAR (ID);
ORACLE için, varchar2 türünün uygulanması açısından 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 uzunluğu hem bayt hem de karakter olarak ayarlanabilir, bu ek seçenekler için alan uzunluğundan sonra belirtilen BYTE ve CHAR kullanılır, örneğin:

NAME varchar2 (30 BYTE) - alan kapasitesi 30 bayt olacak NAME varchar2 (30 KARN) - alan kapasitesi 30 karakter olacak
ORACLE'da varchar2 (30) tipinin basit bir gösterimi durumunda, varsayılan BYTE veya CHAR tarafından hangi seçeneğin kullanılacağı, veritabanı ayarlarına bağlıdır, bazen IDE ayarlarında da ayarlanabilir. Genel olarak, bazen kolayca kafanız karışabilir, bu nedenle ORACLE durumunda, varchar2 türü kullanılıyorsa (ve bu bazen burada, örneğin UTF-8 kodlamasını kullanırken doğrulanır), açıkça CHAR yazmayı tercih ederim ( bir dizenin uzunluğunu karakter cinsinden okumak genellikle daha uygun olduğundan).

Ancak bu durumda, tablo zaten bazı veriler içeriyorsa, komutların başarılı bir şekilde yürütülmesi için tablonun tüm satırlarındaki ID ve Name alanlarının doldurulması gerekir. Bunu bir örnekle gösterelim, tabloya ID, Position ve Departman alanlarındaki verileri ekleyin, bu aşağıdaki script ile yapılabilir:

INSERT Çalışanlar (Kimlik, Görev, Departman) DEĞERLER (1000, N "Direktör", N "Yönetim"), (1001, N "Programcı", N "BT"), (1002, N "Muhasebeci", N "Muhasebe" ), (1003, N "Kıdemli Programcı", N "IT")
Bu durumda, INSERT komutu da bir hata üretecektir, çünkü eklerken, gerekli Ad alanının değerini belirtmedik.
Bu veriler orijinal tabloda zaten olsaydı, "ALTER TABLE Çalışanlar ALTER COLUMN ID int NOT NULL" komutu başarıyla tamamlanırdı ve "ALTER TABLE Çalışanlar ALTER COLUMN Name int NOT NULL" komutu bir hata mesajı oluştururdu , Ad alanında NULL (belirtilmemiş) değerler olduğunu.

Ad alanına değerler ekleyin ve verileri tekrar doldurun:


Ayrıca, NOT NULL seçeneği, yeni bir tablo oluştururken doğrudan kullanılabilir, yani. CREATE TABLE komutu bağlamında.

İlk önce, şu komutu kullanarak tabloyu silelim:

DROP TABLO Çalışanları
Şimdi ID ve Name sütunlarının zorunlu olduğu bir tablo oluşturalım:

CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30) NOT NULL, Doğum günü tarihi, Email nvarchar (30), nvarchar pozisyonu (30), Department nvarchar (30))
Ayrıca sütun adından sonra NULL yazabilirsiniz; bu, içinde NULL değerlerine (belirtilmemiş) izin verileceği anlamına gelir, ancak bu özellik varsayılan olarak varsayıldığından bu gerekli değildir.

Aksine, mevcut sütunu doldurmak için isteğe bağlı yapmak gerekirse, aşağıdaki komut sözdizimini kullanırız:

ALTER TABLE Çalışanlar ALTER COLUMN Ad nvarchar (30) NULL
Ya da sadece:

ALTER TABLE Çalışanlar ALTER COLUMN İsim nvarchar (30)
Ayrıca bu komut ile alanın tipini başka bir uyumlu tiple değiştirebilir veya uzunluğunu değiştirebiliriz. Örneğin, Ad alanını 50 karaktere genişletelim:

ALTER TABLE Çalışanlar ALTER COLUMN İsim nvarchar (50)

Birincil anahtar

Bir tablo oluştururken, benzersiz bir sütuna veya her satırı için benzersiz olan bir dizi sütuna sahip olması istenir - bir kayıt bu benzersiz değerle benzersiz bir şekilde tanımlanabilir. Bu değere tablonun birincil anahtarı denir. Çalışanlar tablomuz için böyle benzersiz bir değer, Kimlik sütunu olabilir ("Çalışan Personel Numarasını" içerir - bizim durumumuzda bu değer her çalışan için benzersiz olsa ve tekrarlanamaz).

Şu komutu kullanarak mevcut bir tablonun birincil anahtarını oluşturabilirsiniz:

ALTER TABLE Çalışanlar KISIT EKLE PK_Çalışanlar BİRİNCİL ANAHTAR (ID)
Burada "PK_Employees", birincil anahtardan sorumlu kısıtlamanın adıdır. Tipik olarak, birincil anahtarı adlandırmak için "PK_" öneki ve ardından tablo adı kullanılır.

Birincil anahtar birkaç alandan oluşuyorsa, bu alanlar virgülle ayrılmış olarak parantez içinde listelenmelidir:

ALTER TABLE tablo_adı KISITLAMA EKLE kısıtlama_adı BİRİNCİL ANAHTAR (alan1, alan2, ...)
MS SQL'de birincil anahtarda bulunan tüm alanların NULL OLMAMASI gerektiğini belirtmekte fayda var.

Ayrıca, tablo oluşturulurken birincil anahtar doğrudan belirlenebilir, yani. CREATE TABLE komutu bağlamında. Tabloyu silelim:

DROP TABLO Çalışanları
Ardından aşağıdaki sözdizimini kullanarak oluşturalım:

CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30) NOT NULL, Doğum tarihi, Email nvarchar (30), Pozisyon nvarchar (30), Departman nvarchar (30), CONSTRAINT PK_Employees BİRİNCİL ANAHTAR (ID) - sonuçta PK'yi tanımlayın alanlar bir sınırlama olarak)
Oluşturduktan sonra verileri tabloya doldurun:

INSERT Çalışanlar (Kimlik, Görev, Departman, İsim) DEĞERLER (1000, N "Direktör", 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. A.")
Tablodaki birincil anahtar yalnızca bir sütunun değerlerinden oluşuyorsa, aşağıdaki sözdizimi kullanılabilir:

CREATE TABLE Çalışanlar (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - alanın bir özelliği olarak belirtin Ad nvarchar (30) NOT NULL, Doğum günü tarihi, Email nvarchar (30), Pozisyon nvarchar (30), Departman nvarchar (30))
Aslında, kısıtlamanın adı atlanabilir, bu durumda bir sistem adı atanır ("PK__Employee__3214EC278DA42077" gibi):

CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30) NOT NULL, Doğum günü tarihi, Email nvarchar (30), nvarchar pozisyonu (30), Departman nvarchar (30), PRIMARY KEY (ID))
Veya:

CREATE TABLE Çalışanlar (ID int NOT NULL PRIMARY KEY, Name nvarchar (30) NOT NULL, Doğum günü tarihi, Email nvarchar (30), Pozisyon nvarchar (30), Departman nvarchar (30))
Ancak kalıcı tablolar için kısıtlama adını her zaman açıkça belirtmenizi öneririm, çünkü açıkça verilen ve anlaşılır bir adla, daha sonra manipüle etmek daha kolay olacaktır, örneğin silebilirsiniz:

ALTER TABLE Çalışanlar DROP CONSTRAINT PK_Çalışanlar
Ancak, kısıtlama adlarını belirtmeden böyle kısa bir sözdizimi, kullanımdan sonra silinecek olan geçici veritabanı tabloları (geçici tablonun adı # veya ## ile başlar) oluştururken kullanmak için uygundur.

özetleyelim

Şimdiye kadar aşağıdaki komutları ele aldık:
  • TABLO OLUŞTUR tablo_adı (alanların ve türlerinin numaralandırılması, kısıtlamalar) - geçerli veritabanında yeni bir tablo oluşturmak için kullanılır;
  • BIRAKMA TABLOSU tablo_adı - geçerli veritabanından bir tabloyu silmeye yarar;
  • TABLOYU DEĞİŞTİR Tablo ismi KOLON DEĞİŞTİR sütun_adı… - bir sütunun türünü güncellemek veya ayarlarını değiştirmek için kullanılır (örneğin, NULL veya NOT NULL özelliğini belirtmek için);
  • TABLOYU DEĞİŞTİR Tablo ismi KISIT EKLE kısıtlama_adı BİRİNCİL ANAHTAR(alan1, alan2, ...) - mevcut bir tabloya birincil anahtar ekleme;
  • TABLOYU DEĞİŞTİR Tablo ismi BIRAKMA KISITLAMASI constraint_name - kısıtlamayı tablodan kaldırır.

Geçici tablolar hakkında biraz

MSDN'den alıntı. MS SQL Server'da iki tür geçici tablo vardır: yerel (#) ve genel (##). Yerel geçici tablolar, ilk oluşturuldukları anda SQL Server örneğine bağlantı sona erene kadar yalnızca yaratıcıları tarafından görülebilir. Kullanıcı bir SQL Server örneğinden bağlantıyı kestikten sonra yerel geçici tablolar otomatik olarak bırakılır. Genel geçici tablolar, bu tablolar oluşturulduktan sonra herhangi bir bağlantı oturumu sırasında tüm kullanıcılar tarafından görülebilir ve bu tablolara başvuran tüm kullanıcılar SQL Server örneğinden bağlantıyı kestiğinde bırakılır.

Tempdb sistem veritabanında geçici tablolar oluşturulur, yani. onları oluşturarak ana tabanı kirletmiyoruz, aksi takdirde geçici tablolar sıradan tablolarla tamamen aynıdır, ayrıca DROP TABLE komutu kullanılarak da bırakılabilirler. Yerel (#) geçici tablolar daha yaygın olarak kullanılır.

Geçici bir tablo oluşturmak için CREATE TABLE komutunu kullanabilirsiniz:

CREATE TABLE #Temp (ID int, Name nvarchar (30))
MS SQL'deki geçici bir tablo normal bir tabloya benzediğinden, onu DROP TABLE komutuyla kendiniz de bırakabilirsiniz:

DROP TABLO #Sıcaklık

Ayrıca, geçici bir tablo (normal bir tablonun kendisi gibi) oluşturulabilir ve SELECT ... INTO sözdizimi kullanılarak bir sorgu tarafından döndürülen verilerle hemen doldurulabilir:

Çalışanlardan #Temp İÇİN ID, İsim SEÇİN

bir notta
Geçici tabloların uygulanması, farklı VTYS'lerde farklılık gösterebilir. Örneğin, ORACLE ve Firebird DBMS'de, geçici tabloların yapısı, içinde veri depolamanın özelliklerini belirten CREATE GLOBAL TEMPORARY TABLE komutu ile önceden tanımlanmalıdır, ardından kullanıcı ana tablolar arasında görebilir ve onunla çalışabilir. normal bir masa ile.

Veritabanı normalleştirme - alt tablolara ayırma (referans kitapları) ve ilişkileri tanımlama

Mevcut Çalışanlar tablomuzun dezavantajı, Pozisyon ve Departman alanlarına, bir çalışanın bir departman olarak basitçe "BT" ve ikinci bir çalışanın, örneğin , üçüncü "BT" de "BT departmanı" girin. Sonuç olarak, kullanıcının ne demek istediği, yani. Bu çalışanlar aynı departmanın çalışanları mı yoksa kullanıcı kendini mi tanımlıyor ve bunlar 3 farklı departman mı? Ayrıca, bu durumda, her departman bağlamında çalışan sayısını göstermenin gerekebileceği bazı raporlar için verileri doğru şekilde gruplayamayacağız.

İkinci dezavantaj, bu bilgilerin depolanma miktarı ve çoğaltılmasıdır, yani. her çalışan için, bölümün tam adı belirtilir, bu da departman adındaki her karakteri depolamak için veritabanında yer gerektirir.

Üçüncü dezavantaj, bir pozisyonun başlığı değiştiğinde, örneğin “Programcı” pozisyonunu “Junior Programmer” olarak yeniden adlandırmanız gerektiğinde, bu alanları güncellemenin karmaşıklığıdır. Bu durumda, Pozisyonun "Programcı"ya eşit olduğu tablonun her satırında değişiklik yapmamız gerekecek.

Bu eksiklikleri önlemek için, veritabanının sözde normalizasyonu uygulanır - onu alt tablolara, referans tablolarına böler. Teori ormanına girip normal formların ne olduğunu incelemek gerekli değildir, normalleşmenin özünü anlamak yeterlidir.

"Pozisyonlar" ve "Departmanlar" olmak üzere 2 tablo oluşturalım, ilki sırasıyla Pozisyonlar ve ikincisi sırasıyla Departmanlar olarak adlandırılacaktır:

CREATE TABLE Pozisyonları (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar (30) NOT NULL) CREATE TABLE Bölümler (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Departments BİRİNCİL ANAHTAR, Ad nvarchar (30) ) GEÇERSİZ DEĞİL)
Burada, ID sütunundaki verilerin 1'den başlayarak 1'lik bir adımla, yani otomatik olarak numaralandırılacağını söyleyen yeni KİMLİK seçeneğini kullandığımızı unutmayın. yeni kayıtlar eklerken sırayla 1, 2, 3 vb. değerler atanacaktır. Bu tür alanlara genellikle otomatik artış denir. Bir tabloda IDENTITY özelliğine sahip yalnızca bir alan tanımlanabilir ve bu tür bir alan, zorunlu olmamakla birlikte genellikle o tablonun birincil anahtarıdır.

bir notta
Farklı DBMS'lerde, sayaçlı alanların uygulanması kendi yollarıyla yapılabilir. Örneğin MySQL'de böyle bir alan AUTO_INCREMENT seçeneği kullanılarak tanımlanır. ORACLE ve Firebird'de daha önce bu işlevsellik SEQUENCE kullanılarak öykünebiliyordu. Ama bildiğim kadarıyla ORACLE artık KİMLİK OLARAK OLUŞTURULAN seçeneğini ekledi.

Çalışanlar tablosunun Pozisyon ve Departman alanlarında kaydedilen güncel verilere göre bu tabloları otomatik olarak dolduralım:

Pozisyonlar tablosunun Ad alanını, Çalışanlar tablosunun Pozisyon alanından benzersiz değerlerle doldurun Pozisyonlar (Ad) EKLE Pozisyon NULL DEĞİL DURUMDA Çalışanlardan FARKLI Pozisyon SEÇİN - pozisyonu belirtilmeyen kayıtları atın
Aynısını Bölümler tablosu için de yapalım:

Departmanları GİRİN (Ad) Departmanın NULL OLMADIĞI Çalışanlardan FARKLI Departman SEÇİN
Şimdi Pozisyonlar ve Departmanlar tablolarını açarsak, ID alanı için numaralı bir dizi değer göreceğiz:

Pozisyonlardan * SEÇİN

SEÇİM * Bölümlerden

Bu tablolar artık pozisyonların ve bölümlerin atanmasında referans kitap rolünü oynayacaktır. Şimdi iş ve departman kimliklerine başvuracağız. Öncelikle, tanımlayıcı verilerini depolamak için Çalışanlar tablosunda yeni alanlar oluşturalım:

Pozisyon kimliği için bir alan ekleyin ALTER TABLE Çalışanlar ADD PositionID int - departmanın kimliği için bir alan ekleyin ALTER TABLE Çalışanlar ADD DepartmentID int
Referans alanlarının türü, referanslardakiyle aynı olmalıdır, bu durumda int'dir.

Ayrıca, virgülle ayrılmış alanları listeleyerek, tek bir komutla tabloya aynı anda birkaç alan ekleyebilirsiniz:

ALTER TABLE Çalışanlar ADD PositionID int, DepartmentID int
Şimdi bu alanlar için linkler (referans kısıtlamaları - YABANCI ANAHTAR) yazacağız, böylece kullanıcı referans kitaplarında bulunan ID değerleri arasında olmayan değerleri bu alanlara yazamayacak.

ALTER TABLE Çalışanlar KISIT EKLE FK_Employees_PositionID YABANCI ANAHTAR (PozisyonID) REFERANSLAR Pozisyonlar (ID)
İkinci alan için de aynısını yapacağız:

ALTER TABLE Çalışanlar EKLE SINIRLAMA FK_Employees_DepartmentID YABANCI ANAHTAR (DepartmentID) REFERANSLAR Bölümler (ID)
Artık kullanıcı bu alanlara sadece ilgili dizinden ID değerlerini girebilecek. Buna göre yeni bir departman veya pozisyonu kullanabilmek için öncelikle ilgili dizine yeni bir kayıt eklemesi gerekecektir. Çünkü pozisyonlar ve departmanlar artık tek bir kopya halinde dizinlerde saklanıyor, daha sonra isim değiştirmek için sadece dizinde değiştirmek yeterli.

Referans kısıtlamasının adı genellikle bir bileşiktir, "FK_" ön ekinden oluşur, ardından tablonun adı gelir ve alt çizgiden sonra referans tablosunun tanımlayıcısına atıfta bulunan alanın adı gelir.

Tanımlayıcı (ID) genellikle yalnızca bağlantılar için kullanılan ve orada depolanan değerin çoğu durumda kesinlikle kayıtsız olan dahili bir değerdir, bu nedenle ortaya çıkan sayı dizisindeki deliklerden kurtulmaya çalışmanıza gerek yoktur. tablo ile çalışma sırasında, örneğin referans kitabından kayıtları sildikten sonra.

ALTER TABLE tablosu KISITLAMA EKLE kısıtlama_adı YABANCI ANAHTAR (alan1, alan2, ...) REFERANSLAR başvuru_tablosu (alan1, alan2, ...)
Bu durumda, "dir_table" tablosunda, birincil anahtar birkaç alanın (alan1, alan2, ...) birleşimiyle temsil edilir.

Aslında şimdi PositionID ve DepartmentID alanlarını dizinlerden alınan ID değerleri ile güncelleyelim. Bunun için DML UPDATE komutunu kullanalım:

GÜNCELLEME e PozisyonKimliği AYARLA = (NEREDE İsim = e.Pozisyonlardan ID SEÇİN), DepartmanKimliği = (NEREDE İsim = e.Departmanlardan ID SEÇİN) Çalışanlardan e
Sorguyu çalıştırarak ne olduğunu görelim:

Çalışanlardan * SEÇİN

İşte bu kadar, pozisyon ve departmanların tanımlayıcıları ile karşılık gelen PozisyonID ve DepartmanID alanları doldurulur, Çalışanlar tablosunda Pozisyon ve Departman alanlarına gerek yoktur, bu alanları silebilirsiniz:

ALTER TABLE Çalışanlar DROP KOLON Pozisyon, Departman
Şimdi tablo aşağıdaki formu aldı:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği
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. sonuç olarak, gereksiz bilgilerin depolanmasından kurtulduk. Artık pozisyon ve departman numaralarına göre referans tablolarındaki değerleri kullanarak isimlerini benzersiz bir şekilde belirleyebiliriz:

SEÇ e.ID, e.Name, p.Name PozisyonAdı, d.Name DepartmanAdı Çalışanlardan e SOL Departmanlara Katıl d ON d.ID = e.DepartmentID LEFT JOIN Pozisyonlar p ON p.ID = e.PozisyonID

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

Tablonun kendisine atıfta bulunabileceğini de belirtmekte fayda var, yani. özyinelemeli bir bağlantı oluşturabilirsiniz. Örneğin, çalışanların bulunduğu tablomuza bu çalışanın bağlı olduğu çalışanı gösterecek başka bir ManagerID alanı ekleyelim. Bir alan oluşturalım:

ALTER TABLE Çalışanlar ADD ManagerID int
Bu alanda NULL'a izin verilir, örneğin çalışanın üzerinde bir üst yoksa alan boş olacaktır.

Şimdi Çalışanlar tablosunda bir YABANCI ANAHTAR oluşturalım:

ALTER TABLE Çalışanlar EKLEME KISITLAMA FK_Employees_ManagerID YABANCI ANAHTAR (YöneticiKimliği) REFERANSLAR Çalışanlar (ID)
Şimdi bir diyagram oluşturalım ve tablolarımız arasındaki ilişkilerin nasıl göründüğüne bakalım:

Sonuç olarak, aşağıdaki resmi görmeliyiz (Çalışanlar tablosu, Pozisyonlar ve Departmanlar tablolarına bağlıdır ve ayrıca kendisine atıfta bulunur):

Son olarak, referans anahtarlarının, referans tablosunda referans verilen bir kaydı silerken veya güncellerken nasıl davranacağını söyleyen ON DELETE CASCADE ve ON UPDATE CASCADE ek seçeneklerini içerebileceği söylenmelidir. Bu seçenekler belirtilmezse, başka bir tablodan link verilen kaydın referans tablosundaki ID'sini değiştiremeyiz, ayrıca referanstaki tüm satırları silene kadar böyle bir kaydı referanstan silemeyiz. veya bu satırlardaki linkleri farklı bir değere güncelleyeceğiz.

Örneğin, FK_Employees_DepartmentID için ON DELETE CASCADE seçeneğiyle tabloyu yeniden oluşturalım:

DROP TABLE Çalışanlar CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30), Doğum tarihi, Email nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIG ) REFERANSLAR Departmanlar (ID) DELETE CASCADE, CONSTRAINT FK_Employees_PositionID YABANCI ANAHTAR (PositionID) REFERANSLAR Pozisyonlar (ID), CONSTRAINT FK_Employees_ManagerID YABANCI ANAHTAR (Yönetici Kimliği) REFERANSLAR Pozisyonlar Kimliği (Ad) II, İstihdam Pozisyonları Kimliğ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)
Departmanlar tablosundan ID 3 olan departmanı silelim:

ID = 3 OLAN BÖLÜMLERİ SİL
Çalışanlar tablosundaki verilere bakalım:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği Yönetici Kimliği
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, departman 3'ün verileri de Çalışanlar tablosundan silindi.

ON UPDATE CASCADE seçeneği benzer şekilde davranır, ancak aramadaki ID değeri güncellendiğinde çalışır. Örneğin, iş dizinindeki pozisyon ID'sini değiştirirsek, Çalışanlar tablosundaki DepartmentID, dizinde belirttiğimiz yeni ID değerine güncellenecektir. Ancak bu durumda bunu kanıtlamak mümkün olmayacaktır, çünkü Departmanlar tablosundaki Kimlik sütununda, aşağıdaki isteği yürütmemize izin vermeyen KİMLİK seçeneği vardır (departman kimliğini 3'ten 30'a değiştirin):

GÜNCELLEME Departmanlar SET ID = 30 WHERE ID = 3
Ana şey, bu 2 seçeneğin ON DELETE CASCADE ve ON UPDATE CASCADE'in özünü anlamaktır. Bu seçenekleri çok nadir durumlarda kullanıyorum ve bunları bir referans kısıtlaması içinde kullanmadan önce dikkatlice düşünmenizi tavsiye ederim. arama tablosundan yanlışlıkla bir kaydı silerseniz, bu büyük sorunlara yol açabilir ve zincirleme reaksiyon oluşturabilir.

Bölüm 3'ü geri yükleyelim:

IDENTITY değeri ekleme/değiştirme izni ver SET IDENTITY_INSERT Departmanları ON INSERT Departmanlar (ID, Name) VALUES (3, N "IT") - IDENTITY değeri eklemeyi / değiştirmeyi yasakla SET IDENTITY_INSERT Departmanları KAPALI
TRUNCATE TABLE komutunu kullanarak Çalışanlar tablosunu tamamen temizleyelim:

TRUNCATE TABLO Çalışanlar
Ve yine, önceki INSERT komutunu kullanarak verileri yeniden yükleyin:

INSERT Çalışanlar (ID, Name, Birthday, PositionID, DepartmentID, ManagerID) DEĞERLER (1000, N "Ivanov I.I.", "19550219", 2,1, NULL), (1001, N "Petrov P.P." , "19831203", 3 ,3,1003), (1002, N "Sidorov SS", "19760607", 1,2,1000), (1003, N "Andreev AA", "19820417" , 4,3,1000)

özetleyelim

Şu anda, bilgilerimize birkaç DDL komutu daha eklendi:
  • Bir alana KİMLİK özelliğinin eklenmesi - bu alanı tablo için otomatik olarak doldurmanıza (sayaç alanı) olanak tanır;
  • TABLOYU DEĞİŞTİR Tablo ismi EKLE list_of_fields_with_characteristics - tabloya yeni alanlar eklemenizi sağlar;
  • TABLOYU DEĞİŞTİR Tablo ismi DROP KOLON list_of_field - tablodan alanları silmenizi sağlar;
  • TABLOYU DEĞİŞTİR Tablo ismi KISIT EKLE kısıtlama_adı YABANCI ANAHTAR(alanlar) REFERANSLAR referans_tablosu (alanlar) - tablo ile referans tablosu arasındaki ilişkiyi tanımlamanıza izin verir.

Diğer kısıtlamalar - BENZERSİZ, VARSAYILAN, KONTROL

BENZERSİZ kısıtlaması ile, belirli bir alan veya alan kümesindeki her satır için değerlerin benzersiz olması gerektiğini söyleyebilirsiniz. Çalışanlar tablosu durumunda, E-posta alanına böyle bir kısıtlama getirebiliriz. Önceden tanımlanmamışlarsa, E-postayı değerlerle önceden doldurmanız yeterlidir:

GÜNCELLEME Çalışanlar SET E-posta = " [e-posta korumalı]"NEREDE ID = 1000 GÜNCELLEME Çalışan E-posta AYARLA =" [e-posta korumalı]"WHERE ID = 1001 GÜNCELLEME Çalışanlar E-posta AYARLA =" [e-posta korumalı]"WHERE ID = 1002 GÜNCELLEME Çalışanlar E-posta AYARLA =" [e-posta korumalı]"NEREDE KİMLİK = 1003
Ve şimdi bu alana bir benzersizlik kısıtlaması uygulayabilirsiniz:

ALTER TABLE Çalışanlar KISIT EKLE UQ_Employees_Email EŞSİZ (E-posta)
Artık kullanıcı birkaç çalışan için aynı E-postayı giremez.

Benzersizlik kısıtlaması genellikle şu şekilde adlandırılır - önce "UQ_" öneki, ardından tablonun adı gelir ve alt çizgiden sonra bu kısıtlamanın uygulandığı alanın adı gelir.

Buna göre, tablo satırları bağlamında bir alan kombinasyonunun benzersiz olması gerekiyorsa, bunları virgülle ayırarak listeleriz:

ALTER TABLE tablo_adı KISITLAMA EKLE kısıtlama_adı BENZERSİZ (alan1, alan2, ...)
Alana bir DEFAULT kısıtlaması ekleyerek, yeni bir kayıt eklerken bu alan INSERT komutunun alanlar listesinde listelenmemişse değiştirilecek varsayılan bir değer ayarlayabiliriz. Bu kısıtlama, bir tablo oluşturulurken doğrudan ayarlanabilir.

Çalışanlar tablosuna yeni bir Randevu Tarihi alanı ekleyip HireDate olarak adlandıralım ve bu alan için varsayılan değerin geçerli tarih olduğunu söyleyelim:

ALTER TABLE Çalışanlar ADD HireDate tarihi NOT NULL DEFAULT SYSDATETIME ()
Veya HireDate sütunu zaten mevcutsa, aşağıdaki sözdizimi kullanılabilir:

ALTER TABLE Çalışanlar HireDate İÇİN VARSAYILAN SYSDATETIME () EKLE
Burada kısıtlamanın adını belirtmedim, çünkü DEFAULT durumunda, bunun çok kritik olmadığı kanısındaydım. Ama bunu dostane bir şekilde yaparsanız bence tembellik etmemeli ve normal bir isim vermelisiniz. Bu şu şekilde yapılır:

ALTER TABLE Çalışanlar KISIT EKLE DF_Employees_HireDate DEFAULT SYSDATETIME () İÇİN HireDate
Bu sütun daha önce olmadığı için her kayda eklendiğinde HireDate alanına güncel tarih değeri eklenecektir.

Yeni bir kayıt eklerken, eğer açıkça belirlemezsek, yani tabii ki mevcut tarih de otomatik olarak eklenecektir. sütun listesinde belirtilmeyecektir. Bunu katma değerler listesinde HireDate alanını belirtmeden bir örnekle gösterelim:

INSERT Çalışanlar (Kimlik, Ad, E-posta) DEĞERLER (1004, N "Sergeev S.S.", " [e-posta korumalı]")
Ne olduğunu görelim:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği Yönetici Kimliği işe alma tarihi
1000 Ivanov I.I. 1955-02-19 i.ivanov [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 Sergeyev S.S. BOŞ [e-posta korumalı] BOŞ BOŞ BOŞ 2015-04-08

Kontrol kısıtlaması, alana girilen değerlerin kontrol edilmesi gerektiğinde kullanılır. Örneğin bu kısıtlamayı çalışanın tanımlayıcısı (ID) olan personel numarası alanına uygulayalım. Bu kısıtlamayı kullanarak, personel sayısının 1000 ile 1999 arasında bir değere sahip olması gerektiğini varsayalım:

ALTER TABLE Çalışanlar KISIT EKLEME CK_Employees_ID KONTROLÜ (ID 1000 VE 1999 ARASINDA)
Kısıt genellikle aynı şekilde adlandırılır, önce "CK_" öneki, ardından tablonun adı ve bu kısıtlamanın uygulandığı alanın adı gelir.

Kısıtlamanın çalışıp çalışmadığını kontrol etmek için geçersiz bir giriş eklemeye çalışalım (ilgili hatayı almalıyız):

INSERT Çalışanlar (Kimlik, E-posta) DEĞERLERİ (2000, " [e-posta korumalı]")
Şimdi girilen değeri 1500 olarak değiştirelim ve kaydın eklendiğinden emin olalım:

INSERT Çalışanlar (Kimlik, E-posta) DEĞERLERİ (1500, " [e-posta korumalı]")
Bir ad belirtmeden de BENZERSİZ ve KONTROL kısıtlamaları oluşturabilirsiniz:

ALTER TABLE Çalışanlar ADD UNIQUE (E-posta) ALTER TABLE Çalışanlar ADD KONTROL (ID 1000 VE 1999 ARASINDA)
Ancak bu iyi bir uygulama değildir ve kısıtlamanın adını açıkça belirtmek daha iyidir, çünkü daha sonra anlamak için, ki bu daha zor olacak, nesneyi açmanız ve neyden sorumlu olduğunu görmeniz gerekecek.

İyi bir adla, kısıtlama hakkında birçok bilgi doğrudan adıyla tanınabilir.

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

DROP TABLO Çalışanları
Ve tek bir CREATE TABLE komutuyla oluşturulan tüm kısıtlamalarla yeniden oluşturacağız:

CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30), Doğum tarihi, Email nvarchar (30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME (), - DEFAULT için CONSTRAINT PK_Employees PRIMARY KEY istisnasını atacağım (ID), CONSTRAINT FK_Employees_DepartmentID YABANCI ANAHTAR (DepartmentID) REFERANSLAR Departmanlar (ID), CONSTRAINT FK_Employees_PositionID YABANCI ANAHTAR (PozisyonID) REFERANSLAR Pozisyonlar (ID), KISIT UQ_Employees (Email)

INSERT Çalışanlar (Kimlik, Ad, Doğum Günü, E-posta, Pozisyon Kimliği, Departman Kimliği) DEĞERLER (1000, N "Ivanov I.I.", "19550219", " [e-posta korumalı]", 2,1), (1001, N" Petrov P.P. "," 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)

BİRİNCİL ANAHTAR ve BENZERSİZ kısıtlamalar oluşturulurken oluşturulan dizinler hakkında biraz

Yukarıdaki ekran görüntüsünde de görebileceğiniz gibi, PRIMARY KEY ve UNIQUE kısıtlamaları oluşturulurken aynı isimli (PK_Employees ve UQ_Employees_Email) indeksler otomatik olarak oluşturulmuştur. Varsayılan olarak, birincil anahtarın dizini KÜMELENMİŞ olarak ve diğer tüm dizinler için SINIRLANMAMIŞ olarak oluşturulur. Tüm DBMS'lerin kümelenmiş bir dizin kavramına sahip olmadığı söylenmelidir. Bir tablonun yalnızca bir CLUSTERED dizini olabilir. KÜMELENMİŞ - tablo kayıtlarının bu dizine göre sıralanacağı anlamına gelir, bu dizinin tüm tablo verilerine doğrudan erişimi olduğunu da söyleyebilirsiniz. Bu, tabiri caizse, tablonun ana indeksidir. Daha kabaca, tabloya cıvatalı bir dizindir. Kümelenmiş dizin, sorgularınızı optimize etmenize yardımcı olabilecek çok güçlü bir araçtır, şimdilik bunu aklınızda bulundurun. Kümelenmiş dizine birincil anahtarda değil başka bir dizin için kullanılmasını söylemek istiyorsak, birincil anahtarı oluştururken NCLUSTERED seçeneğini belirtmeliyiz:

ALTER TABLE tablo_adı KISITLAMA EKLE kısıtlama_adı BİRİNCİL ANAHTAR KÜMELENMEMİŞ (alan1, alan2, ...)
Örneğin, PK_Employees kısıtlama indeksini kümelenmemiş ve UQ_Employees_Email kısıtlama indeksini kümelenmiş yapalım. Her şeyden önce, bu kısıtlamaları kaldıracağız:

ALTER TABLE Çalışanlar DROP CONSTRAINT PK_Çalışanlar ALTER TABLE Çalışanlar DROP CONSTRAINT UQ_Çalışanlar_Email
Şimdi bunları CLUSTERED ve CLUSTERED seçenekleriyle oluşturalım:

ALTER TABLE Çalışanlar ADD CONSTRAINT PK_Çalışanlar BİRİNCİL ANAHTAR KÜMELENMEMİŞ (ID) ALTER TABLE Çalışanlar SINIRLAYIN ADD UQ_Çalışanlar_E-posta EŞSİZ KÜMELENMİŞ (E-posta)
Şimdi, Çalışanlar tablosundan getirdikten sonra, kayıtların kümelenmiş UQ_Employees_Email dizinine göre sıralandığını görebiliriz:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği işe alma tarihi
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, PK_Employees dizini kümelenmiş dizin olduğunda, kayıtlar varsayılan olarak kimliğe göre sıralanırdı.

Ancak bu durumda, bu yalnızca kümelenmiş dizinin özünü gösteren bir örnektir, çünkü Büyük olasılıkla, Kimlik alanı tarafından Çalışanlar tablosuna sorgular yapılacaktır ve bazı durumlarda kendisi bir referans kitabı görevi görebilir.

Aramalar için, kümelenmiş dizinin birincil anahtar üzerinde oluşturulması genellikle tavsiye edilir, çünkü isteklerde, örneğin adı (Pozisyon, Departman) elde etmek için genellikle bir dizin tanımlayıcısına başvururuz. Burada yukarıda yazdıklarımı hatırlıyoruz, kümelenmiş indeksin tablonun satırlarına doğrudan erişimi var ve bundan ek yük olmadan herhangi bir sütunun değerini elde edebileceğimizi takip ediyoruz.

En sık örneklenen alanlara kümelenmiş bir dizin uygulamak avantajlıdır.

Bazen tablolarda bir yedek alan tarafından bir anahtar oluşturulur; bu durumda, daha uygun bir dizin için KÜMELENMİŞ dizin seçeneğini kaydetmek ve bir yedek birincil anahtar oluştururken KÜMELENMEYEN seçeneğini belirtmek yararlıdır.

özetleyelim

Bu aşamada, "ALTER TABLE table_name ADD CONSTRAINT constraint_name ..." biçimindeki bir komutla oluşturulan en basit haliyle tüm kısıtlama türleri hakkında bilgi sahibi olduk:
  • BİRİNCİL ANAHTAR- birincil anahtar;
  • YABANCI ANAHTAR- bağlantıların kurulması ve verilerin referans bütünlüğünün kontrol edilmesi;
  • BENZERSİZ- benzersizlik yaratmanıza izin verir;
  • KONTROL- girilen verilerin doğruluğunu sağlar;
  • VARSAYILAN- varsayılan değeri belirlemenizi sağlar;
  • Ayrıca, tüm kısıtlamaların “ komutu kullanılarak kaldırılabileceğini belirtmekte fayda var. TABLOYU DEĞİŞTİR Tablo ismi BIRAKMA KISITLAMASI kısıtlama_adı ".
İndeks konusuna da kısmen değindik ve küme kavramını inceledik ( KÜMELENMİŞ) ve kümelenmemiş ( KÜMELENMEMİŞ) indeksi.

Bağımsız dizinler oluşturun

Burada kendine güven, BİRİNCİL ANAHTAR veya BENZERSİZ kısıtlama için oluşturulmamış dizinleri ifade eder.

Alan veya alanlara göre dizinler aşağıdaki komutla oluşturulabilir:

CREATE INDEX IDX_Employees_Name ON Çalışanlar (Ad)
Ayrıca burada KÜMELENMİŞ, KÜMELENMEMİŞ, BENZERSİZ seçeneklerini belirleyebilir ve ayrıca her bir alan ASC (varsayılan olarak) veya DESC için sıralama yönünü belirleyebilirsiniz:

EŞSİZ KÜMELENMEYEN INDEX OLUŞTURUN UQ_Employees_EmailDesc ON Çalışanlar (Email DESC)
Kümelenmemiş bir dizin oluştururken, NONCLUSTERED seçeneği serbest bırakılabilir, çünkü bu varsayılandır ve komuttaki KÜMELENMİŞ veya KÜMELENMEMİŞ seçeneğinin konumunu belirtmek için burada gösterilmektedir.

Dizini aşağıdaki komutla silebilirsiniz:

DROP INDEX IDX_Employees_Name ON Çalışanlar
Basit dizinler, kısıtlamalar gibi, CREATE TABLE komutu bağlamında oluşturulabilir.

Örneğin, tabloyu tekrar bırakalım:

DROP TABLO Çalışanları
Ve tek bir CREATE TABLE komutuyla oluşturulan tüm kısıtlamalar ve dizinlerle yeniden oluşturacağız:

CREATE TABLE Çalışanlar (ID int NOT NULL, Name nvarchar (30), Doğum tarihi, Email nvarchar (30), PositionID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME (), ManagerID int, CONSTRAINT PKRIYEmploye), KISIT FK_Employees_DepartmentID YABANCI ANAHTAR (DepartmanKimliği) REFERANSLAR Departmanlar (ID), KISIT FK_Employees_PozisyonKimliği YABANCI ANAHTAR (PozisyonKimliği) REFERANSLAR Pozisyonlar (ID), CONSTRAINT FK_Employees_Employees_mnagerID (İsim_Email_Adı)
Son olarak çalışanlarımızı tabloya ekleyelim:

INSERT Çalışanlar (Kimlik, Ad, Doğum Günü, E-posta, Pozisyon Kimliği, Departman Kimliği, Yönetici Kimliği) DEĞERLER (1000, N "Ivanov I.I.", "19550219", " [e-posta korumalı]", 2,1, NULL), (1001, N" Petrov P.P. "," 19831203 "," [e-posta korumalı]", 3,3,1003), (1002, N" Sidorov S.S. "," 19760607 "," [e-posta korumalı]", 1,2,1000), (1003, N" Andreev A.A. "," 19820417 "," [e-posta korumalı]",4,3,1000)
Ek olarak, kümelenmemiş bir dizine değerleri INCLUDE içinde belirterek dahil edebileceğinizi belirtmekte fayda var. Şunlar. bu durumda, INCLUDE dizini kümelenmiş bir dizine biraz benzeyecek, ancak şimdi dizin tabloya cıvatalı değil, gerekli değerler dizine cıvatalı. Buna göre, bu tür dizinler, listelenen tüm alanlar dizinde mevcutsa, seçme sorgularının (SELECT) performansını büyük ölçüde artırabilir, o zaman tabloya hiç erişmeniz gerekmeyebilir. Ancak bu, doğal olarak endeksin boyutunu artırır, çünkü Listelenen alanların değerleri dizinde çoğaltılır.

MSDN'den alıntı. Dizin oluşturmak için genel komut sözdizimi

CREATE [EŞSİZ] [KÜMELENMİŞ | TOPLANMAMIŞ] INDEX dizin_adı AÇIK (sütun [ASC | DESC] [, ... n]) [DAHİL (sütun_adı [, ... n])]

özetleyelim

Dizinler veri alma (SELECT) hızını artırabilir, ancak dizinler tablo verilerinin değiştirilme hızını yavaşlatır, çünkü her değişiklikten sonra, sistemin belirli bir tablo için tüm dizinleri yeniden oluşturması gerekir.

Hem örnekleme performansının hem de veri değişikliğinin uygun seviyede olması için her durumda en uygun çözümün, altın ortalamanın bulunması tavsiye edilir. İndeks oluşturma stratejisi ve sayıları, tablodaki verilerin ne sıklıkla değiştiği gibi birçok faktöre bağlı olabilir.

DDL Sonuç

Gördüğünüz gibi, DDL ilk bakışta göründüğü kadar karmaşık değil. Burada sadece üç tablo kullanarak neredeyse tüm temel yapılarını gösterebildim.

Ana şey özü anlamaktır ve gerisi bir uygulama meselesidir.

SQL adlı bu harika dilde iyi şanslar.

Blog siteme hoş geldiniz. Bugün yeni başlayanlar için sql sorgularından bahsedeceğiz. Bazı web yöneticilerinin bir sorusu olabilir. Neden sql öğrenelim? yapamaz mısın?

Bunun profesyonel bir İnternet projesi oluşturmak için yeterli olmayacağı ortaya çıktı. SQL, veritabanlarıyla çalışmak ve WordPress için uygulamalar oluşturmak için kullanılır. Sorguların nasıl kullanılacağına daha yakından bakalım.

Ne olduğunu

SQL, yapılandırılmış bir sorgu dilidir. Veri türünü tanımlamak, ona erişim sağlamak ve bilgileri kısa sürelerde işlemek için tasarlanmıştır. İnternet projesinde görmek istediğiniz bileşenleri veya bazı sonuçları açıklar.

Basit bir ifadeyle, bu programlama dili, veritabanında bilgi eklemenize, değiştirmenize, aramanıza ve görüntülemenize izin verir. MySQL'in popülaritesi, bir veritabanına dayalı dinamik İnternet projeleri oluşturmak için kullanılmasından kaynaklanmaktadır. Bu nedenle işlevsel bir blog geliştirmek için bu dili öğrenmeniz gerekir.

Ne yapabilirsin

SQL dili şunları sağlar:

  • tablolar oluşturmak;
  • farklı verileri alma ve saklamayı değiştirin;
  • bilgileri bloklar halinde birleştirmek;
  • verileri korumak;
  • erişimde istekler oluşturun.

Önemli! Sql ile uğraştıktan sonra, herhangi bir karmaşıklıktaki WordPress için uygulamalar yazabilirsiniz.

hangi yapı

Veritabanı, bir Excel dosyası olarak temsil edilebilecek tablolardan oluşur.

Bir adı, sütunları ve bazı bilgiler içeren bir satırı var. Sql sorguları kullanarak bu tür tablolar oluşturabilirsiniz.

Ne bilmek istiyorsun


Sql öğrenirken öne çıkanlar

Yukarıda belirtildiği gibi, sorgular tablolardan oluşan bir veritabanına yeni bilgileri işlemek ve girmek için kullanılır. Satırlarının her biri ayrı bir giriştir. O halde bir veritabanı oluşturalım. Bunu yapmak için şu komutu yazın:

'Bazaname' veritabanı oluştur

Tırnak içinde, veritabanının adını Latince yazın. Onun için anlamlı bir isim bulmaya çalışın. "111", "www" ve benzeri bir taban oluşturmayın.

Veritabanını oluşturduktan sonra kurun:

ADLARI AYARLA 'utf-8'

Bu, sitedeki içeriğin doğru bir şekilde görüntülenmesi için gereklidir.

Şimdi bir tablo oluşturuyoruz:

TABLO OLUŞTUR 'bazaname'. 'Tablo' (

id INT (8) NULL DEĞİL AUTO_INCREMENT BİRİNCİL ANAHTAR,

VARCHAR'ı günlüğe kaydet (10),

VARCHAR'ı (10) geç,

tarih DATE

İkinci satırda, üç nitelik yazdık. Bakalım ne anlama geliyorlar:

  • NOT NULL özelliği, hücrenin boş olmayacağı anlamına gelir (bu alan gereklidir);
  • AUTO_INCREMENT değeri - otomatik tamamlama;
  • BİRİNCİL ANAHTAR birincil anahtardır.

bilgi nasıl eklenir

Oluşturulan tablonun alanlarını değerlerle doldurmak için INSERT deyimini kullanın. Aşağıdaki kod satırlarını yazıyoruz:

'tabloya' EKLE

(giriş, geçiş, tarih) DEĞERLER

('Vasa', '87654321',' 2017-06-21 18:38:44 ');

Parantez içinde sütunların adlarını ve sonraki - değerleri belirtiriz.

Önemli! Sütun adlarının ve anlamlarının sırasını gözlemleyin.

Bilgi nasıl güncellenir

Bunu yapmak için UPDATE komutunu kullanın. Belirli bir kullanıcı için şifrenin nasıl değiştirileceğini görelim. Aşağıdaki kod satırlarını yazıyoruz:

GÜNCELLEME 'tablo' SET geçişi = '12345678' WHERE id = '1'

Şimdi '12345678' şifresini değiştirin. "id" = 1 olan satırda değişiklikler yapılır. WHERE komutunu yazmazsanız, belirli bir satır değil tüm satırlar değişecektir.

kitabı almanızı tavsiye ederim" Aptallar için SQL ". Onun yardımıyla, veritabanı ile adım adım profesyonelce çalışabileceksiniz. Tüm bilgiler basitten karmaşığa doğru yapılandırılmıştır ve iyi karşılanacaktır.

Bir giriş nasıl silinir

Yanlış bir şey yazdıysanız, DELETE komutuyla düzeltin. UPDATE ile aynı şekilde çalışır. Aşağıdaki kodu yazıyoruz:

'tablodan' SİL WHERE id = '1'

bilgi getiriliyor

Veritabanından değerleri almak için SELECT komutunu kullanın. Aşağıdaki kodu yazıyoruz:

SEÇ * 'tablodan' WHERE id = '1'

Bu örnekte, tablodaki tüm kullanılabilir alanları seçiyoruz. Komuta bir yıldız işareti "*" yazarsanız bu olur. Bir örnek değer seçmeniz gerekiyorsa, şöyle yazarız:

SELECT günlüğü, WHERE id = '1' tablosundan iletin

Veritabanları ile çalışma yeteneğinin yeterli olmayacağı unutulmamalıdır. Profesyonel bir İnternet projesi oluşturmak için, veritabanından sayfalara nasıl veri ekleyeceğinizi öğrenmeniz gerekecektir. Bunu yapmak için php web programlama dilini öğrenin. Bu sana yardım edecek Mikhail Rusakov tarafından sınıf kursu .


masa bırakmak

Bir DROP isteği ile oluşur. Bunu yapmak için aşağıdaki satırları yazın:

DROP TABLO tablosu;

Belirli bir koşula göre bir tablodan kayıt çıktısı alma

Bunun gibi bir kod düşünün:

SEÇ id, ülke, şehir NEREDE tablodan insanlar> 150000000

Nüfusu yüz elli milyonun üzerinde olan ülkelerin kayıtlarını gösterecek.

bir dernek

Join kullanarak birden fazla tabloyu birbirine bağlamak mümkündür. Nasıl çalışır, bu videoyu daha ayrıntılı olarak izleyin:

PHP ve MySQL

İnternet projesi oluştururken sorgulama yapmanın yaygın bir şey olduğunu bir kez daha vurgulamak istiyorum. Bunları php belgelerinde kullanmak için şu prosedürü izleyin:

  • mysql_connect() komutu ile veritabanına bağlanıyoruz;
  • mysql_select_db() kullanarak gerekli veritabanını seçin;
  • İsteği mysql_fetch_array() kullanarak işliyoruz;
  • mysql_close() komutu ile bağlantıyı kapatıyoruz.

Önemli! Bir veritabanı ile çalışmak zor değildir. Ana şey, isteği doğru yazmaktır.

Acemi web yöneticileri düşünecektir. Bu konu hakkında ne okumalı? Martin Graber'ın kitabını tavsiye etmek istiyorum” Ölümlüler için SQL ". Yeni başlayanlar için her şey netleşecek şekilde yazılmıştır. Referans kitabı olarak kullanın.

Ama bu teori. Pratikte durum nedir? Gerçekte, bir İnternet projesinin yalnızca yaratılması değil, aynı zamanda Google ve Yandex'in EN ÜSTÜNe getirilmesi de gerekir. video kursu" Web sitesi oluşturma ve tanıtım ».


video talimatı

Hala sorularınız mı var? Çevrimiçi videoyu daha ayrıntılı olarak izleyin.

Çözüm

Bu nedenle, sql sorguları yazmak göründüğü kadar zor değildir, ancak herhangi bir web yöneticisinin yapması gerekir. Bu, yukarıda açıklanan video kurslarına yardımcı olacaktır. Abone olmak benim VKontakte grubum ortaya çıkan yeni ilginç bilgilerden ilk siz haberdar olmak.

Çoğu modern web uygulaması veritabanlarıyla etkileşime girer ve genellikle SQL. Neyse ki bizim için bu dili öğrenmesi çok kolay. Bu yazımızda basit SQL isteklerde bulunun ve bunları etkileşim kurmak için nasıl kullanacağınızı öğrenin. MySQL veritabanı.

Ne istiyorsun?

SQL (Yapılandırılmış Sorgu Dili) gibi veritabanı yönetim sistemleriyle etkileşim kurmak için özel olarak tasarlanmış bir dildir. MySQL, Oracle, Sqlite ve diğerleri ... Gerçekleştirmek için SQL Bu makaledeki istekleri yüklemenizi tavsiye ederim MySQL yerel bilgisayara. Ayrıca kullanmanızı tavsiye ederim phpMyAdmin görsel bir arayüz olarak.

Bütün bunlar herkesin sevgilisi Denver'da mevcuttur. Bence herkes ne olduğunu ve nereden alacağını bilmeli :). Olabilmek yoksa WAMP veya MAMP kullanın.

Denver'da yerleşik bir MySQL konsol. Onu kullanacağız.

VERİTABANI YARAT:veritabanı oluşturma

Bu bizim ilk talebimiz. Daha fazla çalışma için ilk veritabanımızı oluşturacağız.

İlk olarak, aç MySQL konsol ve giriş yapın. İçin WAMP varsayılan parola boştur. Bu hiçbirşey :). İçin MAMP "kök" dür. Denver için açıklığa kavuşturulması gerekiyor.

Giriş yaptıktan sonra aşağıdaki satırı girin ve tıklayın Girmek:

VERİTABANI OLUŞTUR my_first_db;

Diğer dillerde olduğu gibi, sorgunun sonuna noktalı virgül (;) eklendiğini unutmayın.

Ayrıca bkz. SQL'deki komutlar harfe duyarlı. Onları büyük harflerle yazıyoruz.

Seçenek sadece: Karakter setive harmanlama

yüklemek istiyorsanız karakter seti ve harmanlama olabilir aşağıdaki komutu yazın:

VERİTABANI OLUŞTUR my_first_db VARSAYILAN KARAKTER SET utf8 COLLATE utf8_general_ci;

Desteklenen karakter kümelerinin bir listesini bulur. MySQL.

VERİTABANLARINI GÖSTER:tüm veritabanlarını listeler

Bu komut, mevcut tüm veritabanlarını görüntülemek için kullanılır.

DROP VERİTABANI:veritabanı silme

Bu sorguyu kullanarak mevcut bir DB'yi bırakabilirsiniz.

Uyarı vermeden çalıştığı için bu komuta dikkat edin. Veritabanınız veri içeriyorsa, tümü silinecektir.

KULLANMAK:Veritabanı seçimi

Teknik olarak, bu bir sorgu değil, bir operatördür ve sonunda noktalı virgül gerektirmez.

MySQL'e söyler geçerli oturum için varsayılan veritabanını seçin. Artık tablolar oluşturmaya ve veritabanıyla başka şeyler yapmaya hazırız.

Veritabanında tablo nedir?

DB'deki tabloyu şu şekilde temsil edebilirsiniz: Excel dosyası.

Tıpkı resimdeki gibi, tablolarda sütun adları, satırlar ve bilgiler bulunur. Üzerinden SQL sorgular, bu tür tablolar oluşturabiliriz. Ayrıca bilgi ekleyebilir, okuyabilir, güncelleyebilir ve silebiliriz.

TABLO OLUŞTUR: tablo oluşturma

C Bu sorguyu kullanarak veritabanında tablolar oluşturabiliriz. Üzgünüm, belgeler MySQL Bu konuda yeni başlayanlar için çok net değil. Bu tür bir sorgunun yapısı çok karmaşık olabilir, ancak kolay bir tane ile başlayacağız.

Aşağıdaki sorgu 2 sütunlu bir tablo oluşturacaktır.

CREATE TABLE kullanıcıları (kullanıcı adı VARCHAR (20), create_date DATE);

Lütfen sorgularımızı birden fazla satıra ve girintili sekmelerle yazabileceğimizi unutmayın.

İlk satır basit. Sadece "users" adında bir tablo oluşturuyoruz. Ardından, parantez içinde virgülle ayrılmış tüm sütunların bir listesi bulunur. Her sütun adından sonra VARCHAR veya DATE gibi bilgi türlerimiz var.

VARCHAR (20), sütunun dize türünde olduğu ve maksimum 20 karakter uzunluğunda olabileceği anlamına gelir. DATE aynı zamanda tarihleri ​​şu biçimde depolamak için kullanılan bir bilgi türüdür: "YYYY - AA-GG".

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

Bir sonraki sorguyu çalıştırmadan önce, birincil anahtarımız olacak "user_id" için de bir sütun eklememiz gerekiyor. BİRİNCİL ANAHTAR, tablodaki her satırı tanımlamak için kullanılan bilgi olarak düşünebilirsiniz.

CREATE TABLE kullanıcıları (user_id INT AUTO_INCREMENT PRIMARY KEY, kullanıcı adı VARCHAR (20), create_date DATE);

INT 32 bit tamsayı türü yapar (sayılar gibi). OTOMATİK ARTIŞ otomatik olarak yeni bir değer üretirİD her yeni bilgi satırı eklediğimizde. Bu isteğe bağlıdır, ancak tüm süreci kolaylaştırır.

Bu sütunun bir tamsayı değeri olması gerekmez, ancak en yaygın olarak kullanılır. Birincil Anahtarın varlığı da isteğe bağlıdır, ancak veritabanının mimarisi ve performansı için önerilir.

Sorguyu çalıştıralım:

TABLOLARI GÖSTER:tüm tabloları göster

Bu sorgu, veritabanındaki tabloların bir listesini almanızı sağlar.

AÇIKLAMAK:Tablo yapısını göster

Mevcut bir tablonun yapısını göstermek için bu sorguyu kullanabilirsiniz.

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

BIRAKMA TABLOSU:tabloyu sil

Tıpkı DROP VERİTABANLARINDA olduğu gibi, bu sorgu, tabloyu ve içeriğini uyarmadan siler.

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

Bu sorgu, tabloda yapabileceği daha fazla değişiklik nedeniyle karmaşık bir yapı da içerebilir. Bazı örneklere bir göz atalım.

(son adımda tabloyu sildiyseniz, testler için yeniden oluşturun)

KOLON EKLEME

ALTER TABLE kullanıcıları E-posta EKLE VARCHAR (100) kullanıcı adından SONRA;

SQL'in iyi okunabilirliği nedeniyle, ayrıntılı olarak açıklamanın bir anlamı olmadığını düşünüyorum. "Kullanıcı adı"ndan sonra yeni bir "e-posta" sütunu ekliyoruz.

BİR SÜTUN SİLMEK

Ayrıca çok kolaydı. Verileri uyarı yapmadan silebileceğiniz için bu sorguyu dikkatli kullanın.

Daha fazla deneme için kaldırdığınız sütunu kurtarın.

KOLONDA DEĞİŞİKLİK YAPMAK

Bazen bir sütunun özelliklerinde değişiklik yapmak isteyebilirsiniz ve bunun için onu tamamen silmeniz gerekmez.

Bu sorgu, kullanıcı sütununu "user_name" olarak yeniden adlandırdı ve türünü VARCHAR (20) yerine VARCHAR (30) olarak değiştirdi. Böyle bir değişiklik tablodaki verileri değiştirmemelidir.

SOKMAK: Tabloya bilgi ekleme

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

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

BİRİNCİL ANAHTAR alanı için ilk NULL değerinin "user_id" olarak adlandırıldığını unutmayın. Sütun AUTO_INCREMENT özelliğine sahip olduğundan kimliğin otomatik olarak oluşturulması için bunu yapıyoruz. Bilgi ilk eklendiğinde ID 1 olur. Sonraki satır 2 olur ve böyle devam eder...

ALTERNATİF SEÇENEK

Satır eklemek için başka bir sorgu seçeneği vardır.

Bu sefer VALUES yerine SET anahtar sözcüğünü kullanıyoruz ve parantez içermiyor. Birkaç nüans var:

Sütun atlanabilir. Örneğin, "user_id" için varsayılan olarak AUTO_INCREMENT değerine sahip olacak bir değer atamadık. VARCHAR sütununu atlarsanız, boş bir satır eklenir.

Her sütuna adıyla atıfta bulunulmalıdır. Bu nedenle, önceki sürümden farklı olarak herhangi bir sırayla bahsedilebilirler.

ALTERNATİF SEÇENEK 2

İşte başka bir seçenek.

Yine sütun ismine referanslar olduğu için değerleri istediğiniz sırada verebilirsiniz.

LAST_INSERT_ID ()

Geçerli oturumun son satırı için AUTO_INCREMENT olan kimliği almak için bu isteği kullanabilirsiniz.

ŞİMDİ ()

Şimdi MySQL işlevini sorgularda nasıl kullanabileceğinizi göstermenin zamanı geldi.

ŞİMDİ () işlevi geçerli tarihi görüntüler. Böylece, yeni bir satır eklediğinizde sütun tarihini geçerli tarihe otomatik olarak ayarlamak için kullanabilirsiniz.

1 uyarı aldığımızı unutmayın, ancak dikkate almayın. Bunun nedeni, ŞİMDİ ()'nin de geçici bilgileri görüntülemek için kullanılmasıdır.

SEÇME: Bir tablodan veri okuma

Tabloya bilgi eklersek oradan okumayı öğrenmek mantıklı olur. SELECT sorgusunun bize yardımcı olacağı yer burasıdır.

Aşağıdaki, bir tabloyu okumak için mümkün olan en basit SELECT sorgusudur.

Bu durumda yıldız işareti (*), tablodaki tüm alanları talep ettiğimiz anlamına gelir. Yalnızca belirli sütunlar istiyorsanız, sorgu şöyle görünecektir.

ŞartNEREDE

Çoğu zaman, tüm sütunlarla ilgilenmiyoruz, yalnızca bazılarıyla ilgileniyoruz. Örneğin, "nettuts" kullanıcısı için yalnızca e-posta adresini istediğimizi varsayalım.

NEREDE, sorgudaki koşulları belirlemenize ve ayrıntılı seçimler yapmanıza olanak tanır.

Eşitlik için programlamada olduğu gibi iki değil, bir eşittir işaretinin (=) kullanıldığını unutmayın.

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

AND veya OR, koşulları birleştirmek için kullanılabilir:

Sayısal değerlerin alıntı yapılmaması gerektiğini unutmayın.

İÇİNDE ()

Bu, birden çok değeri örneklemek için kullanışlıdır.

BEĞENMEK

"Joker karakter" istekleri yapmanızı sağlar

% işareti joker karakter olarak kullanılır. Yani her şey yerinde olabilir.

ŞartTARAFINDAN SİPARİŞ

Herhangi bir kritere göre sıralanmış sonucu almak istiyorsanız

Varsayılan sıra ASC'dir (düşükten yükseğe). Bunun tersi için DESC kullanılır.

SINIR ... OFFSET ...

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

LIMIT 2, yalnızca ilk 2 sonucu alır. LIMIT 1 OFFSET 2, ilk 2'den sonra 1 sonuç alır. LIMIT 2, 1 aynı anlama gelir (önce ofset ve sonra limitin geldiğine dikkat edin).

GÜNCELLEME: Tablodaki bilgilerde değişiklik yapın

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

Çoğu durumda, WHERE yan tümcesi ile birlikte kullanılır, çünkü büyük olasılıkla belirli sütunları değiştirmek isteyeceksiniz. WHERE yan tümcesi yoksa, değişiklikler tüm satırları etkiler.

Değiştirilmesi gereken satır sayısını sınırlamak için LIMIT'i de kullanabilirsiniz.

SİLMEK: Tablodan bilgi kaldırma

UPDATE gibi, bu sorgu WHERE ile birlikte kullanılır:

Bir tablonun içeriğini silmek için bunu basitçe şu şekilde yapabilirsiniz:

kullanıcılardan SİL;

Ama kullanmak daha iyi KIRMIZI

Bu sorgu silmeye ek olarak değerleri de sıfırlar. OTOMATİK ARTIŞ ve tekrar satır eklerken sayı sıfırdan başlayacaktır. SİLMEK olmaz ve geri sayım devam eder.

Düşük Değerleri ve Özel Kelimeleri Devre Dışı Bırakma

dize değerleri

Bazı karakterlerin devre dışı bırakılması gerekiyor ( kaçmak ) veya sorunlar olabilir.

Bunun için ters eğik çizgi kullanılır.(\).

özel kelimeler

MySQL'den beri birçok özel kelime var ( SEÇ veya GÜNCELLE ), bunları kullanırken hataları önlemek için tırnak işaretleri kullanmanız gerekir. Ama sıradan alıntılar değil, bunlar(`).

Yani, " adlı bir sütun eklemeniz gerekecek. silmek ", şöyle yapılmalı:

Çözüm

Sonuna kadar okuduğunuz için teşekkürler. Umarım bu makale sizin için yararlı olmuştur. Daha bitmedi! Devam edecek:).

Yeni Başlayanlar için SQL makalesinin ücretsiz bir çevirisini dikkatinize sunuyorum

Giderek daha fazla modern web uygulaması, genellikle dili kullanarak veritabanlarıyla etkileşime girer. SQL... Neyse ki bizim için bu dili öğrenmesi oldukça kolay. Bu yazıda SQL sorgularının temellerini ve veritabanı ile nasıl etkileşime girdiklerini öğrenmeye başlayacağız. MySQL.

Neye ihtiyacın var

SQL (Structured Query Language), aşağıdakiler gibi ilişkisel veritabanı yönetim sistemleri (DBMS) ile etkileşim kurmak için tasarlanmış bir dildir. MySQL, Oracle, Sqlite ve diğerleri. Bu makaledeki SQL sorgularını yürütmek için, yüklediğinizi varsayıyorum. MySQL... ayrıca kullanmanı tavsiye ederim phpMyAdmin için görsel bir görüntüleme aracı olarak MySQL.

Aşağıdaki uygulamalar kurulumu kolaylaştıracaktır MySQL ve phpMyAdmin senin bilgisayarına:

  • Windows için WAMP
  • Mac için MAMP

Komut satırında sorguları yürütmeye başlayalım. WAMP konsolda zaten içeriyor MySQL... İçin MAMP, bunu okumanız gerekebilir.

VERİTABANI OLUŞTUR: Veritabanı Oluştur

İlk isteğimiz. Çalışmak için bir veritabanı oluşturacağız.

Öncelikle konsolu açın MySQL ve giriş yapın. İçin WAMP, varsayılan olarak boş bir parola kullanılır. İçin MAMPşifre "root" olmalıdır.

Giriş yaptıktan sonra bu isteği yazın ve tıklayın. Girmek:

VERİTABANI OLUŞTUR my_first_db;

Tıpkı kodunuzdaki bir satırın sonunda olduğu gibi, sorgunun sonuna noktalı virgül (;) eklendiğini unutmayın.

Ayrıca, anahtar kelimeler VERİTABANI YARAT içindeki tüm anahtar kelimeler gibi büyük/küçük harfe duyarsız SQL... Ancak daha iyi okunabilirlik için bunları büyük harfle yazacağız.

Not: karakter seti ve harmanlama

Varsayılan karakter kümesini ve harmanlama sırasını ayarlamak istiyorsanız, benzer bir sorgu kullanın:

VERİTABANI OLUŞTUR my_first_db VARSAYILAN KARAKTER SET utf8 COLLATE utf8_general_ci;

Desteklenen karakter kümelerinin ve harmanlamaların bir listesini şu adreste bulabilirsiniz: MySQL.

VERİTABANLARINI GÖSTER: Tüm veritabanlarının listesi

Bu sorgu tüm veritabanlarını görüntülemek için kullanılır.

DROP DATABASE: Bir veritabanını bırakır

Bu sorgu ile mevcut bir veritabanını bırakabilirsiniz.

Herhangi bir uyarı göstermediğinden bu sorguya dikkat edin. Veritabanınızda tablolar ve veriler olduğunda, sorgu anında hepsini siler.

Teknik olarak, bu bir talep değil. Bu bir "operatör"dür ve sonunda noktalı virgül gerektirmez.

o bilgilendirir MySQL varsayılan veritabanını seçmeniz ve oturumun sonuna kadar onunla çalışmanız gerektiğini. Artık bu veritabanında tablolar ve diğerlerini oluşturmaya hazırız.

Veritabanı tablosu nedir?

Veritabanındaki bir tabloyu normal bir tablo veya yapılandırılmış verileri olan bir csv dosyası olarak düşünebilirsiniz.

Bu örnekte olduğu gibi, tabloda satır adları ve veri sütunları vardır. SQL sorgularını kullanarak bu tabloyu oluşturabiliriz. Ayrıca veri ekleyebilir, okuyabilir, değiştirebilir ve silebiliriz.

TABLO OLUŞTUR: Tablo oluştur

Bu sorgu ile veritabanında bir tablo oluşturabiliriz. Üzgünüz, belgeler için MySQL yeni kullanıcılar için pek kolay değil. Bu sorgunun yapısı çok karmaşık olabilir, ancak basit bir tane ile başlayacağız.

Aşağıdaki sorgu, iki sütunlu bir tablo oluşturur.

CREATE TABLE kullanıcıları (kullanıcı adı VARCHAR (20), create_date DATE);

Lütfen birden fazla satıra bir sorgu yazıp kullanabileceğimizi unutmayın. Sekme girinti için.

İlk satır basit. adında bir tablo oluşturuyoruz. kullanıcılar... Ayrıca, parantez içinde, tablonun sütunları virgülle ayrılmış olarak listelenir. Her sütun adının ardından bir veri türü gelir, örneğin VARCHAR veya TARİH.

VARCHAR (20) sütunun dize türünde olduğu ve uzunluğunun 20 karakterden fazla olamayacağı anlamına gelir. TARİH- tarihlerin "YYYY-AA-GG" biçiminde saklanması amaçlanan veri türü.

Birincil anahtar

Bu sorguyu çalıştırmadan önce bir sütun eklemeliyiz Kullanıcı kimliği, ki bu BİRİNCİL ANAHTAR olacaktır. Çok fazla ayrıntıya girmeden, birincil anahtarı bir tablodaki her bir veri satırını tanımanın bir yolu olarak düşünebilirsiniz.

İstek şu şekilde olur:

CREATE TABLE kullanıcıları (user_id INT AUTO_INCREMENT PRIMARY KEY, kullanıcı adı VARCHAR (20), create_date DATE);

INT- 32 bit tam sayı türü (sayısal). OTOMATİK ARTIŞ her veri satırı eklendiğinde otomatik olarak yeni bir kimlik numarası oluşturur. Gerekli değildir, ancak onunla daha uygundur.

Bu sütun, en yaygın veri türü olmasına rağmen bir tamsayı olmayabilir. Birincil anahtar sütunu isteğe bağlıdır, ancak veritabanınızın performansını ve mimarisini iyileştirmek için kullanılması önerilir.

Sorguyu çalıştıralım:

TABLOLARI GÖSTER: Tüm tabloların listesi

Sorgu, geçerli veritabanındaki tüm tabloların bir listesini almanızı sağlar.

EXPLAIN: Tablo yapısını göster

Mevcut bir tablonun yapısını görmek için bu sorguyu kullanın.

Sonuç olarak alanlar (sütunlar) ve özellikleri gösterilir.

DROP TABLE: Bir tablo bırakır

İlave olarak DROP VERİTABANLARI, bu sorgu herhangi bir uyarı yapmadan tabloyu ve içeriğini siler.

ALTER TABLE: Bir tabloyu değiştir

Böyle bir sorgu karmaşık olabilir çünkü bir tabloda birden çok değişiklik yapabilir. Bazı basit örneklere bir göz atalım.

okunabilirlik sayesinde SQL, bu istek kendini açıklayıcıdır.

Kaldırmak da bir o kadar kolay. Sorguyu dikkatli kullanın, veriler uyarı yapılmadan silinir.

alanı tekrar ekleyelim e-posta, daha sonra hala gerekli olacak:

ALTER TABLE kullanıcıları E-posta EKLE VARCHAR (100) kullanıcı adından SONRA;

Bazen bir sütunun özelliklerini değiştirmeniz gerekebilir, onu silip yeniden oluşturmanız gerekmez.

Bu istek alanı yeniden adlandırır Kullanıcı adı v Kullanıcı adı ve türünü değiştirir VARCHAR (20)üzerinde VARCHAR (30)... Bu tür değişiklikler tablodaki verileri etkilemez.

INSERT: Bir tabloya veri ekleme

Sorguları kullanarak tabloya kayıt ekleyelim.

Gördüğünüz gibi, DEĞERLER () virgülle ayrılmış bir değerler listesi içerir. Dize değerleri tek tırnak içine alınır. Değerler tablo oluşturulurken belirtilen sırada olmalıdır.

Unutmayın ki ilk değer BOŞ alanını adlandırdığımız birincil anahtar için Kullanıcı kimliği... Hepsi alan olarak işaretlendiğinden OTOMATİK ARTIŞ ve kimlik otomatik olarak oluşturulur. İlk veri satırının kimliği 1 olacaktır. Eklenecek sonraki satır 2'dir, vb.

alternatif sözdizimi

İşte dize eklemek için başka bir sözdizimi.

Bu sefer anahtar kelimeyi kullandık AYARLAMAK onun yerine DEĞERLER... Birkaç şeyi not edelim:

  • Sütun atlanabilir. Örneğin alana bir değer atamadık. Kullanıcı kimliği olarak işaretlendiğinden OTOMATİK ARTIŞ... Türüne sahip bir alana bir değer atamazsanız VARCHAR, ardından varsayılan olarak boş bir dizenin değerini alacaktır (tablo oluşturulurken başka bir varsayılan değer belirtilmediyse).
  • Her sütuna adıyla başvurulabilir. Bu nedenle, önceki sözdiziminden farklı olarak alanlar herhangi bir sırada olabilir.

Alternatif sözdizimi numarası 2

İşte başka bir örnek.

Daha önce olduğu gibi, alanlara adlarıyla başvurabilirsiniz, herhangi bir sırayla gidebilirler.

Son eklenen satırın kimliğini almak için bu sorguyu kullanın.

ŞİMDİ ()

İşlevleri nasıl kullanacağınızı göstermenin zamanı geldi MySQL isteklerde.

İşlev ŞİMDİ () geçerli tarihi döndürür. Geçerli tarihi bir tür alanına otomatik olarak eklemek için kullanın TARİH.

Lütfen şuradan bir uyarı aldığımızı unutmayın: MySQL ama bu o kadar önemli değil. Bunun nedeni, işlevin ŞİMDİ () aslında zaman bilgisini döndürür.

bir alan oluşturduk Oluşturma Tarihi bu sadece bir tarih içerebilir ve bir saat içeremez, bu nedenle veriler kesildi. Onun yerine ŞİMDİ () kullanabiliriz KURDATE () bu yalnızca geçerli tarihi döndürür, ancak sonuç aynı olur.

SELECT: Bir tablodan veri alma

Açıkçası, yazdığımız veriler, biz onu okuyana kadar işe yaramaz. Bir istek kurtarmaya geliyor SEÇME.

Bir istek kullanmanın en basit örneği SEÇME bir tablodan veri okumak için:

Yıldız işareti (*), tablodaki tüm sütunları almak istediğimiz anlamına gelir. Yalnızca belirli sütunları almanız gerekiyorsa, bunun gibi bir şey kullanın:

Çoğu zaman, hepsini değil, yalnızca belirli satırları almak istiyoruz. Örneğin, kullanıcının e-posta adresini alalım ağlar.

EĞER koşuluna benzer. WHERE, bir sorguda bir koşul belirlemenize ve istenen sonucu almanıza olanak tanır.

Muhtemelen programlamada kullandığınız çift (==) değil, eşitlik koşulu için tek işaret (=) kullanılır.

Diğer koşulları da kullanabilirsiniz:

VE ve VEYA koşulları birleştirmek için kullanılır:

Sayısal değerlerin tırnak içine alınması gerekmediğini unutmayın.

İÇİNDE ()

Birden çok değerle karşılaştırmak için kullanılır.

BEĞENMEK

Arama için bir şablon belirlemenizi sağlar.

Deseni belirtmek için yüzde işareti (%) kullanılır.

ORDER BY deyimi

Sonucun sıralı olarak dönmesini istiyorsanız bu koşulu kullanın:

Varsayılan sipariş ASC(Yükselen). Eklemek TANIM ters sırada sıralamak için.

SINIR ... OFFSET ...

Döndürülen satır sayısını sınırlayabilirsiniz.

SINIR 2 ilk iki satırı alır. SINIR 1 OFSET 2 ilk ikiden sonra bir satır alır. SINIR 2, 1 aynı anlama gelir, yalnızca ilk sayı ofsettir ve ikincisi satır sayısını sınırlar.

GÜNCELLEME: Bir tablodaki verileri güncelleme

Bu sorgu, bir tablodaki verileri güncellemek için kullanılır.

Çoğu durumda ile birlikte kullanılır NEREDE belirli satırları güncellemek için. eğer koşul NEREDE belirtilmemişse, değişiklikler tüm satırlara uygulanacaktır.

Değişken dizeleri kısıtlamak için şunları kullanabilirsiniz: SINIR.

DELETE: Bir tablodan veri silme

İlave olarak , bu sorgu genellikle koşulla birlikte kullanılır NEREDE.

KESME TABLOSU

Bir tablodan içerik kaldırmak için şuna benzer bir sorgu kullanın:

kullanıcılardan SİL;

Daha iyi performans kullanımı için .

Ayrıca alan sayacını sıfırlar OTOMATİK ARTIŞ, bu nedenle yeni eklenen satırların kimliği 1'e eşit olacaktır. bu olmayacak ve sayaç büyümeye devam edecek.

Kaçan dize değerleri ve özel kelimeler

dize değerleri

Bazı karakterlerin kaçması gerekiyor veya sorunlar olabilir.

Ters eğik çizgi (\) kaçmak için kullanılır.

Bu, güvenlik nedenleriyle çok önemlidir. Herhangi bir kullanıcı verisi, veritabanına yazılmadan önce kaçınılmalıdır. V PHP mysql_real_escape_string() işlevini veya hazırlanmış ifadeleri kullanın.

özel kelimeler

Beri MySQL gibi birçok ayrılmış kelime SEÇME veya Karışıklığı önlemek için sütun ve tablo adlarını tırnak içine alın. Ayrıca, sıradan tırnak işaretleri değil, ters tırnaklar (`) kullanmanız gerekir.

Diyelim ki, herhangi bir nedenle, adında bir sütun eklemek istiyorsunuz. :

Çözüm

Makaleyi okuduğunuz için teşekkürler. Umarım sana o dili gösterebilmişimdir. SQLçok işlevsel ve öğrenmesi kolay.