Sql tablosuna veri ekleme. T-SQL Temelleri

INSERT deyimi tabloya yeni kayıtlar ekler. Bu durumda, sütun değerleri değişmez sabitler olabilir veya bir alt sorgunun yürütülmesinin sonucu olabilir. İlk durumda, her satırı eklemek için ayrı bir INSERT ifadesi kullanılır; ikinci durumda, alt sorgunun döndürdüğü sayıda satır eklenecektir.

Operatör sözdizimi aşağıdaki gibidir:

    TAKIN [ (,...) ]

    (DEĞERLER(,…))

  1. | (VARSAYILAN DEĞERLER)

Sunulan sözdiziminden görebileceğiniz gibi, sütun listesi isteğe bağlıdır (buna denir) köşeli parantez sözdizimi açıklamasında). Eksikse, eklenen değerlerin listesi eksiksiz olmalıdır, yani tablonun tüm sütunları için değerler sağlanmalıdır. Bu durumda değerlerin sırası, satırların eklendiği tablo için CREATE TABLE deyiminin belirttiği sıraya uygun olmalıdır. Ayrıca bu değerlerin girildiği sütunlarla aynı veri türünde olması gerekmektedir. Örnek olarak, aşağıdaki CREATE TABLE deyimiyle oluşturulan Ürün tablosuna bir satır eklemeyi düşünün:

    TABLO OLUŞTURMA ürünü

    yapıcı karakter (1) NULL DEĞİL,

    model varchar(4) BOŞ DEĞİL,

    varchar(7) yazın NULL DEĞİL

Bu tabloya üretici B'nin PC modeli 1157'yi eklemek istediğinizi varsayalım.Bunu aşağıdaki ifadeyle yapabilirsiniz:

    ÜRÜNE EKLEYİN

    DEĞERLER ("B", 1157, "PC");

Bir sütun listesi belirtirseniz bunların "doğal" sırasını değiştirebilirsiniz:

    ÜRÜNE EKLEYİN (tip, model, üretici)

    DEĞERLER ("PC", 1157, "B");

Görünüşe göre bu tamamen gereksiz bir özellik ve bu da tasarımı daha da hantal hale getiriyor. Ancak sütunların varsayılan değerleri varsa kazanır. Aşağıdaki tablo yapısını göz önünde bulundurun:

    TABLO OLUŞTURMA ürün_D

    yapıcı karakter (1) NULL,

    model varchar(4) NULL,

    varchar yazın (7 ) BOŞ DEĞIL VARSAYILAN "PC"

Burada tüm sütunların değerlerinin varsayılan değerlere sahip olduğunu unutmayın (ilk ikisi NULL ve son sütun - PC tipi). Artık şunu yazabiliriz:

    INSERT INTO Product_D (model, yapımcı)

    DEĞERLER(1157; "B");

Bu durumda, bir satır eklenirken eksik olan değer, varsayılan değer olan PC ile değiştirilecektir. CREATE TABLE ifadesinde bir sütuna varsayılan bir değer verilmezse ve bu tablo sütununda NULL kullanımını yasaklamak için NOT NULL kısıtlaması belirtilirse, NULL'un varsayılan değerinin varsayılacağını unutmayın.

Şu soru ortaya çıkıyor: Bir sütun listesi belirtmemek ve yine de varsayılan değerleri kullanmak mümkün mü? Cevap Evet. Bunu yapmak için değeri açıkça belirtmek yerine DEFAULT ayrılmış sözcüğünü kullanın:

    Ürün_D'YE EKLEYİN

    DEĞERLER ("B", 1158, VARSAYILAN);

Tüm sütunların varsayılan değerleri olduğundan, varsayılan değerlere sahip bir satır eklemek için şunu yazabilirsiniz:

    Ürün_D'YE EKLEYİN

    DEĞERLER(VARSAYILAN, VARSAYILAN, VARSAYILAN);

Ancak bu durum için, yukarıdaki operatörün formda yeniden yazılabileceği özel bir VARSAYILAN DEĞERLER yapısı vardır (operatör sözdizimine bakınız).

    Product_D VARSAYILAN DEĞERLERE EKLEYİN;

Bir tabloya satır eklerken bu tabloya uygulanan tüm kısıtlamaların kontrol edildiğini unutmayın. Kısıtlamalar olabilir birincil anahtar veya benzersiz dizin, CHECK, referans bütünlüğü kısıtlamaları gibi kontrol kısıtlamaları. Herhangi bir kısıtlamanın ihlal edilmesi durumunda satır ekleme işlemi reddedilecektir. Şimdi bir alt sorgu kullanma durumunu ele alalım. Ürün tablosundaki modellerle ilgili tüm satırları Product_D tablosuna eklememiz gerektiğini varsayalım. kişisel bilgisayarlar(tip = 'PC'). İhtiyacımız olan değerler zaten bazı tablolarda olduğundan, eklenen satırları manuel olarak oluşturmak öncelikle etkisizdir ve ikinci olarak giriş hatalarına neden olabilir. Bir alt sorgu kullanmak şu sorunları çözer:

Sütunların sırası her iki tablo için de aynı olduğundan, alt sorguda “*” simgesinin kullanılması bu durumda haklıdır. Durum böyle olmasaydı, INSERT ifadesine, alt sorguya veya her ikisine de sütunların sırasına uygun bir sütun listesi uygulanması gerekirdi:

Burada, daha önce olduğu gibi, mevcut varsayılan değerleri kullanmak istiyorsanız tüm sütunları belirtemezsiniz, örneğin:

Bu durumda, Product_D tablosunun tür sütunu, eklenen tüm satırlar için varsayılan PC değeriyle değiştirilecektir.

Bir yüklem içeren bir alt sorgu kullanıldığında, yalnızca yüklem değeri DOĞRU (BİLİNMEYEN değil!) olan satırların ekleneceğini unutmayın. Başka bir deyişle, Ürün tablosundaki tür sütunu NULL olabilirse ve bu değer birkaç satırda mevcutsa bu satırlar Product_D tablosuna eklenmeyecektir.

UNION ALL yan tümcesiyle bir satır oluşturan bir alt sorgu kullanmanın yapay tekniği, VALUES yan tümcesinde satır oluşturucuyu kullanırken INSERT deyimine bir satır ekleme konusundaki sınırlamanın üstesinden gelmenize olanak tanır. Dolayısıyla, bir INSERT deyimini kullanarak birkaç satır eklememiz gerekiyorsa şunu yazabiliriz:

    Ürün_D'YE EKLEYİN

    "B" AS yapımcısı, 1158 AS modeli, "PC" AS tipini SEÇİN

    BİRLİK TÜMÜ

    "C", 2190, "Dizüstü Bilgisayar"ı SEÇİN

    BİRLİK TÜMÜ

    "D", 3219, "Yazıcı"yı SEÇİN;

Yinelenen satırların yokluğu garanti edilse bile UNION ALL'ın kullanılması UNION'a tercih edilir, çünkü bu durumda kopyaları ortadan kaldırmak için herhangi bir kontrol yapılmayacaktır.

Satır yapıcıyı kullanarak birden fazla demet eklemenin halihazırda uygulandığına dikkat edilmelidir. Microsoft Corporation tarafından geliştirilen ilişkisel veritabanı yönetim sistemi (DBMS).Yapılandırılmış Sorgu Dili), ilişkisel veritabanlarındaki verileri oluşturmak, değiştirmek ve işlemek için kullanılan evrensel bir bilgisayar dilidir. SQL Server 2008. Bu olasılık göz önüne alındığında son sorgu şu şekilde yeniden yazılabilir:

    Product_D DEĞERLERİNE EKLEYİN

    ("B", 1158, "PC"),

    ("C", 2190, "Dizüstü Bilgisayar"),

Daha önce tartışılan SELECT deyimine ek olarak, Veri İşleme Dili (DML) üç deyim daha içerir: INSERT, UPDATE ve DELETE. SELECT deyimi gibi, bu üç deyim de tablolarda veya görünümlerde çalışır. Bu makalede INSERT deyimi anlatılmaktadır ve diğer iki deyim bir sonraki makalede tartışılmaktadır.

INSERT beyanı tabloya satırlar (veya satırların parçalarını) ekler. Bu talimatın iki farklı şekli vardır:

INSERT tab_name [(col_list)] VARSAYILAN DEĞERLER | DEĞERLER (( VARSAYILAN | NULL | ifade ) [ ,...n]) INSERT INTO sekme_adı | görünüm_adı [(sütun_listesi)] (select_ifadesi | yürütme_ifadesi) Sözdizimi kuralları

Talimatın ilk şekli tabloya bir satır (veya bir kısmını) eklemenizi sağlar. Ve INSERT ifadesinin ikinci biçimi, bir SELECT ifadesinin sonuç kümesini veya bir EXECUTE ifadesi tarafından yürütülen saklı bir prosedürü bir tabloya eklemenizi sağlar. Saklı yordamın tabloya eklenecek verileri döndürmesi gerekir. SELECT ifadesi, INSERT deyimiyle birlikte kullanıldığında, karşılık gelen sütunların veri türleri uyumlu olduğu sürece, verilerin eklendiği farklı veya aynı tablodaki değerleri seçebilir.

Her iki form için de eklenen her değerin veri türü, karşılık gelen tablo sütununun veri türüyle uyumlu olmalıdır. Tüm dize ve geçici veriler tırnak içine alınmalıdır; Sayısal değerlerin tırnak içine alınmasına gerek yoktur.

Tek satır ekleme

INSERT ifadesinin her iki biçimi için de sütun listesinin açıkça belirtilmesi isteğe bağlıdır. Sütunları listelememek, tablodaki tüm sütunları belirtmekle aynı şeydir.

VARSAYILAN DEĞERLER parametresi tüm sütunlar için varsayılan değerleri ekler. TIMESTAMP veri türüne veya IDENTITY özelliğine sahip sütunların varsayılan değerleri otomatik olarak eklenir sistem tarafından oluşturulan. Diğer veri türlerinin sütunları için, eğer varsa karşılık gelen boş olmayan varsayılan değer eklenir, aksi halde NULL eklenir. Bir sütun için ise BOŞ değerler izin verilmez ve bunun için tanımlanmış bir varsayılan değer yoktur, INSERT ifadesi başarısız olur ve karşılık gelen bir mesaj görüntülenir.

Aşağıdaki örnek, SampleDb veritabanındaki Çalışan tablosuna satırlar ekleyerek veritabanına küçük miktarda veri eklemek için INSERT ifadesinin kullanımını gösterir:

SampleDb'yi KULLANIN; Çalışan DEĞERLERİNE EKLEYİN (34990, "Andrey", "Batonov", "d1"); Çalışan DEĞERLERİNE EKLEYİN (38640, "Alexey", "Vasin", "d3");

İki tane Farklı yollar değerleri yeni bir satıra ekleme. Aşağıdaki örnekteki INSERT deyimi açıkça şunu kullanır: anahtar kelime NULL ve NULL değerini ilgili sütuna ekler:

SampleDb'yi KULLANIN; Çalışan DEĞERLERİNE EKLEYİN (34991, "Andrey", "Batonov", NULL);

Bir tablonun bazı (ancak hepsine değil) sütunlarına değer eklemek için genellikle bu sütunları açıkça belirtmeniz gerekir. Belirtilmeyen sütunlar ya NULL değerlere izin vermeli ya da tanımlanmış bir varsayılan değere sahip olmalıdır.

SampleDb'yi KULLANIN; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

Önceki iki örnek eşdeğerdir. Employee tablosunda NULL değerlerine izin veren tek sütun DepartmanNumarası sütunudur ve diğer tüm sütunlar CREATE TABLE deyimindeki NOT NULL yan tümcesi tarafından devre dışı bırakılmıştır.

Değerlerin sırası DEĞERLER teklifi INSERT deyimleri, CREATE TABLE deyiminde belirtilen sıradan farklı olabilir. Bu durumda bunların sırası, ilgili sütunların sütun listesinde listelendiği sırayla eşleşmelidir. Aşağıda orijinalden farklı bir sırayla veri ekleme örneği verilmiştir:

SampleDb'yi KULLANIN; INSERT INTO Employee(DepartmanNumber, LastName, Id, FirstName) VALUES ("d1", "Batonov", 34993, "Andrey");

Birden çok satır ekleme

INSERT ifadesinin ikinci biçimi, bir alt sorgu tarafından seçilen bir veya daha fazla satırı tabloya ekler. Aşağıdaki örnek, INSERT ifadesinin ikinci biçimini kullanarak bir tabloya nasıl satır ekleneceğini gösterir. Bu durumda, Moskova'da bulunan departmanların numaralarını ve adlarını seçmek için bir sorgu yürütülür ve ortaya çıkan sonuç seti daha önce oluşturulan yeni bir tabloya yüklenir.

Yukarıdaki örnekte oluşturulan yeni MoskovaDepartman tablosu, eksik Konum sütunu dışında mevcut Departman tablosuyla aynı sütunlara sahiptir. INSERT deyimindeki alt sorgu, Departman tablosundaki Konum sütunu değeri "Moskova" olan tüm satırları seçer ve bunlar daha sonra sorgunun başında oluşturulan yeni tabloya eklenir.

Aşağıdaki örnek, INSERT ifadesinin ikinci biçimini kullanarak bir tabloya satır eklemenin başka bir yolunu gösterir. Bu durumda proje p2'de çalışan “Yönetici” pozisyonundaki tüm çalışanlar için personel sayılarını, proje sayılarını ve proje başlangıç ​​tarihlerini seçmek ve ardından ortaya çıkan sonuç setini proje başlangıcında oluşturulan yeni bir tabloya yüklemek için bir sorgu yürütülür. sorgu:

SampleDb'yi KULLANIN; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Yönetici";

INSERT deyimini kullanarak satır eklemeden önce, Moskova Departmanı ve ManagerTeam tabloları (yukarıdaki örneklerde) boştu. Tablo zaten mevcutsa ve veri içeren satırlar içeriyorsa, tabloya yeni satırlar eklenir.

Bazen programcılar veritabanından bir şeyler okumak için büyük bir istek duyarlar. Programcılar gergin ve asabi olurlar, uykuları kaçar ve çılgınca parmaklarını klavyeye doğrultmaya başlarlar. Herkesin yararı ve dünya barışı adına, ADO.NET ve OLE DB kullanarak C#'tan bazı basit veritabanı yönetimine bakalım. Her ne kadar bu mekanizma Oracle gibi farklı veritabanlarını desteklese de burada ve şimdi MS'i kullanacağız. SQL Server.

Bir veritabanıyla çalışırken iki ana görev

2. Sunucuda bir şeyler yapan bir SQL komutunu çalıştırmak (eklemek, güncellemek, silmek, bir işlevi veya saklı yordamı çağırmak)

3. Seçilen seçimden satır satır sıralı okuma. Esas olarak web uygulamalarında kullanılır; masaüstü uygulamalarda tüm seçimin tek seferde indirilmesi daha kolaydır Veri deposu, yalnızca gerekli satırların okunmasından elde edilen tasarruf ihmal edilebilir düzeydedir.

4. Nadir durum. Otomatik güncelleme DataTable'daki değişikliklere dayalı olarak veritabanındaki tablolar (genellikle görsel bir arayüz aracılığıyla düzenlenir). İÇİNDE gerçek hayat Veriler genellikle karmaşık bir yığın birleştirme sorgusu veya görünümü aracılığıyla okunur, bu nedenle otomatik senkronizasyon uygun değildir.

Bu amaçlar için kullanılan ana sınıflar: OleDbConnection - bağlantı parametrelerini içeren bir dizeyle oluşturulan veritabanına bağlantı, açma, kapatma, OleDbCommand - yalnızca bir güncelleme yapmanız veya almanız gerekiyorsa, bir bağlantı örneği ve bir sql komutuyla oluşturulur tek bir değer varsa bu yeterli bir sınıftır, OleDbCommand ile oluşturulan OleDbDataAdapter, bir DataTable'daki satır kümelerinin tek seferlik okunmasında uzmanlaşmıştır, bir seçime dayalı olarak otomatik olarak DataTable sütunları oluşturabilir, değişiklikleri DataTable'daki bir tabloya aktarabilir. veritabanı, OleDbDataReader - DataTable'daki satırların teker teker sıralı okunması (OleDbDataAdapter dahili olarak çalışır), DataTable / DataSet - veriler için ana kap. OleDbType numaralandırması veritabanının veri türlerini saklar.

System.Data'nın Kullanımı; System.Data.OleDb'yi kullanarak; // bağlantı dizesi, kullanılan sistem Windows kullanıcıları(Entegre Güvenlik=SSPI;) string connString = "Provider=SQLOLEDB.1;Entegre Güvenlik=SSPI;Persist Güvenlik Bilgisi=False;İlk Katalog=veritabanıAdı;Veri Kaynağı=sunucuAdı"; // MS SQL Server kimlik doğrulamasını kullanan alternatif bağlantı dizesi // connString = "Provider=SQLOLEDB.1;Persist Security Info=False;İlk Katalog=veritabanıAdı;Bağlanma Zaman Aşımı=20;Veri Kaynağı=sunucuAdı;Uid=kullanıcıAdı;Pwd=kullanıcıParolası ; " OleDbConnection dbConn = new OleDbConnection(connString); dbConn.Open(); someDataTable = yeni DataTable(); OleDbDataAdapter dbAdapter = new OleDbDataAdapter("TEST_TABLE ORDER BY COLUMN2'den COLUMN1, COLUMN2'yi seçin", dbConn); // iç yapı boş masa okunan verilere göre otomatik olarak oluşturulacak, eğer tablo yapısı zaten belirtilmişse (örneğin, yazılan bir DataSet aracılığıyla), veriler eşleşen adlara sahip sütunlara yazılacak veya yeni sütunlar eklenecektir dbAdapter.Fill(someDataTable ); // Alternatif seçenek DataSet'teki bir tabloyu doldurmak için // dbAdapter.Fill(someDataSet, "someDataTable"); dbConn.Close();

2. Sunucuda bir şeyler yapan bir SQL komutunu çalıştırmak (eklemek, güncellemek, silmek, bir işlevi veya saklı yordamı çağırmak).

Tarihlerle ilgili sorunlar özellikle dikkate değerdir. .Net'te tarihlerin uygulanması son derece çarpıktır - başlangıçta tarihler boş olamaz, ancak gerçek hayatta her zaman boşturlar. En doğru çözüm, Microsoft programcılarının hatalarını düzelten özel bir tarih sınıfı kullanmaktır. Lazier geliştiricileri koddaki tüm tarihleri ​​dizeler halinde tutar ve bunları yalnızca gerektiğinde, örneğin bir veritabanına veya DataTable'a yazarken DateTime'a dönüştürür. Nullable DateTime, arayüzdeki boş bir tarihin boş bir dize gibi görünmesi gerektiğinden ve veritabanına DBNull.Value olarak yazıldığında, koddaki banal bir null bile ek dans olmadan bu değerlere dönüştürülmediği için yardımcı olmuyor. bir tef.

İlk seçenek yalnızca bir sorgu dizesinin birleştirilmesini içerir. Sayımlar kötü uygulama ve saldırıya açık olduğundan özellikle web uygulamalarında tehlikelidir. hacker saldırıları. Boş tarihlerle ilgili sorun o kadar kolay çözülmüyor. Ek olarak, tarihlerle çalışırken ek bir sorun ortaya çıkıyor - .Net Framework'ün bölgesel ayarlarına, geliştirme ortamına ve sql sunucusuna bağlı olarak farklı tarih dizesi biçimleri. Gerçeküstü görünebilir; aynı sorgu SQL Managment Studio'da da çalışır, ancak koddan çalıştırıldığında çöker. Kısmen tarih dizisinin özel formatı tarafından kaydedilir, ancak bu genellikle dış dünyanın varlığını asla bilemeyeceği dahili kullanım için küçük programlarda yapılır.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "INSERT INTO TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VALUES (" + intVariable", " + stringVariable" , " + dateTimeVariable.ToString("yyyyMMdd") +"); dbCommand.ExecuteNonQuery();

Doğru seçenek, kesin olarak yazılmış bir dizi parametre içeren bir komut oluşturmayı içerir. Önceki paragrafın mevcut olmadığını düşünün.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) DEĞERLERİNE EKLEYİN (?, ?, ?)"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; dbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar).Value = stringVariable; if (stringDate == "") ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = DBNull.Value; ) else ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = Convert.ToDateTime(stringDate); ) dbCommand.ExecuteNonQuery();

Saklı prosedür tamamen aynı şekilde çağrılır, çeşitlilik adına parametrelere değer yazmak için başka bir seçenek daha vardır (bu, özellikle saklı prosedürle ilgili değildir):

OleDbCommand someDbComm = new OleDbCommand("someStoredProcedure", this.dbConn); someDbComm.CommandType = CommandType.StoredProcedure; someDbComm.Parameters.Add("@parameter1", OleDbType.VarChar); someDbComm.Parameters.Add("@parameter2", OleDbType.VarChar); someDbComm.Parameters.Value = "Her sorunun her zaman bir çözümü vardır - basit, kullanışlı ve elbette yanlış"; someDbComm.Parameters.Value = "Henry Louis Mencken"; someDbComm.ExecuteNonQuery(); !}

Alan boyutunu ve belirli bir tablo sütununa bağlanmayı gösteren parametre açıklamasının genişletilmiş versiyonu.

DbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar, 100, "VARCHAR_COLUMN").Value = stringVariable;

Bir komut parametresini belirli bir DataTable alanına bağlamamız gerekmiyorsa, boyutu hiç belirtmemek en iyisidir; örneğin, dize belirtilen Varchar uzunluğundan azsa, o zaman iyi .Net çerçevesi ekleyecektir. dizede belirtilen uzunluğa kadar boşluk bırakılması, sunucuya iletilen verileri bozar.

Tek bir alanın değeri ExecuteScalar() yöntemiyle okunur

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "TEST_TABLE'DAN TEST_COLUMN SEÇİN WHERE ID_COLUMN =?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; int sonuç = Convert.ToInt32(dbCommand.ExecuteScalar());

ExecuteScalar'ın Object'i döndürdüğünü ve eğer istek hiçbir şey döndürmediyse sonucun null olacağını ve normal veri türüne dönüştürmenin bir hatayla başarısız olacağını özellikle belirtmek gerekir. Hiçbir yanıt alamadığımız bir durum mümkünse şunu yapmamız gerekir:

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "TEST_TABLE'DAN TEST_COLUMN SEÇİN WHERE ID_COLUMN =?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; object resultObj = dbCommand.ExecuteScalar() int result = -1; // boş sonuç anlamına gelen varsayılan değer if(resultObj != null) ( result = Convert.ToInt32(dbCommand.ExecuteScalar()); )

3. Seçilen seçimden satır satır sıralı okuma
Bir satırı okumak (birkaç tanesi bir döngüde okunur);

OleDbCommand dbCommand = new OleDbCommand(TEST_TABLE, dbConn'dan KİŞİ_ID'sini, ADI, SOYADI'nı seçin); OleDbDataReader dbReader = dbCommand.ExecuteReader(); dbReader.Read(); string name = Convert.ToString(dbReader["NAME"]); string soyadı = Convert.ToString(dbReader["SOYADI"]); dbReader.Close();

4. Nadir durum. DataTable'daki değişikliklere göre veritabanındaki bir tablonun otomatik güncellenmesi (genellikle görsel bir arayüz aracılığıyla düzenlenir).

Her DbAdapter için dört komut yazmanız gerekir olası durum- seçin, ekleyin, güncelleyin, silin.

DbAdapter.InsertCommand = new OleDbCommand("TEST_TABLE (NAME, FAMIL, AGE) değerlerine (?, ?, ?) ekleyin", dbConnection); dbAdapter.InsertCommand.Parameters.Add("NAME", OleDbType.VarChar, 100, "NAME"); dbAdapter.InsertCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); // sabit uzunluktaki veri türleri için, komutta belirtilen uzunluk dikkate alınmaz dbAdapter.InsertCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); // bir güncelleme komutu ekleyin dbAdapter.UpdateCommand = new OleDbCommand("update TEST_TABLE set NAME = ?, FAMIL = ?, AGE = ? burada ID = ?, dbConnection); dbAdapter.UpdateCommand.Parameters.Add("NAME", OleDbType.VarChar,100, "NAME"); dbAdapter.UpdateCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); dbAdapter.UpdateCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); dbAdapter.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); // bir silme komutu ekleyin dbAdapter.DeleteCommand = new OleDbCommand("TEST_TABLE'dan sil burada ID =?", dbConnection); dbAdapter.DeleteCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); try ( // DataTable'daki tüm değişiklikleri veritabanındaki tabloya aktarır dbAdapter.Update(table); ) catch (İstisna hatası) (MessageBox.Show("Veriler kaydedilirken hata oluştu! " + error.Message); return; ) messageBox.Show("Değişiklikler kaydedildi!");



Makalenin içeriği
1. En basit MySQL sorguları
2. Basit SELECT sorguları
3. Basit INSERT (yeni giriş) sorguları
4. Basit UPDATE (üzerine yazma, ekleme) sorguları
5. Basit DELETE (kayıt silme) sorguları
6. Basit DROP (tablo silme) sorguları
7. Karmaşık MySQL sorguları
8. MySQL sorguları ve PHP değişkenleri

1. En basit SQL sorguları

1. TÜM veritabanlarının bir listesini görüntüler.

Veritabanlarını GÖSTER;
2. Base_name Veritabanındaki TÜM tabloları listeler.

base_name'deki tabloları GÖSTER;

2. MySQL veritabanına basit SELECT sorguları

SEÇME– veritabanından mevcut verileri seçen bir sorgu. Seçim için belirli seçim parametrelerini belirleyebilirsiniz. Örneğin, Rusça'daki isteğin özü şu şekildedir: Şu ve bu tablodan şu ve bu sütunları SEÇİN, NEREDE şu ve bu sütunun parametresi değere eşittir.

1. tbl_name tablosundaki TÜM verileri seçer.

tbl_name'den * SEÇİN;
2. tbl_name tablosundaki kayıt sayısını görüntüler.

tbl_name'den sayıyı (*) SEÇİN;
3. (FROM) tablosundan (SELECT) tbl_name limit (LIMIT) 2'den başlayarak 3 kayıt seçer.

tbl_name LIMIT 2,3'TEN * SEÇİN;
4. (FROM) tbl_name tablosundan (SELECT) ALL (*) kayıtlarını seçer ve bunları id alanına göre sıralar (ORDER BY).

SELECT * FROM tbl_name ORDER BY id;
5. tbl_name tablosundan (FROM) TÜM kayıtları seçer (SELECT) ve bunları id alanına göre TERS sırayla (ORDER BY) sıralar.

SELECT * FROM tbl_name ORDER BY id DESC;
6. ( öğesini seçer) SEÇME) TÜMÜ (*) ('den) kayıtlar İTİBAREN) tablolar kullanıcılar ve bunları sıralar ( TARAFINDAN SİPARİŞ) sahada İD artan sırada, limit ( SINIR) ilk 5 giriş.

KULLANICILARDAN SEÇİN * ID LİMİTİNE GÖRE SİPARİŞ 5;
7. Tablodaki tüm kayıtları seçer kullanıcılar, tarla nerede isim değere karşılık gelir Gena.

SELECT * FROM user WHERE fname="Gena";
8. Tablodaki tüm kayıtları seçer kullanıcılar, burada alan değeri isim ile başlar Ge.

fname'in "Ge%" GİBİ NEREDE KULLANILDIĞINI KULLANICILARDAN SEÇİN;
9. Tablodaki tüm kayıtları seçer kullanıcılar, Nerede isim ile biter hayır ve kayıtları artan değer sırasına göre sıralar İD.

SELECT * FROM user WHERE fname LIKE "%na" ORDER BY id;
10. Sütunlardaki tüm verileri seçer isim, isim masadan kullanıcılar.

Kullanıcılardan fname, lname SEÇİN;

11. Diyelim ki kullanıcı verileri tablonuzda bir ülke var. Dolayısıyla, SADECE ortaya çıkan değerlerin bir listesini görüntülemek istiyorsanız (örneğin, Rusya 20 kez değil yalnızca bir kez görüntülenecek şekilde), o zaman DISTINCT kullanırız. Rusya'yı, Ukrayna'yı, Beyaz Rusya'yı tekrarlanan değerler yığınından çıkaracak. Böylece tablodan kullanıcılar hoparlörler ülke TÜM BENZERSİZ değerlerin çıktısı alınacak

KULLANICILARDAN FARKLI bir ülke SEÇİN;
12. Tablodan TÜM satır verilerini seçer kullanıcılar Nerede yaş 18,19 ve 21 değerlerine sahiptir.

SEÇİN * YAŞIN YERİNDEKİ kullanıcılardan (18,19,21);
13. MAKSİMUM değeri seçer yaş masada kullanıcılar. Yani, tablonuzda en büyük değere sahipseniz yaş(İngilizce yaşından itibaren) 55 ise sorgu sonucu 55 olacaktır.

Kullanıcılardan maksimum(yaş) SEÇİN;
14. Tablodan veri seçin kullanıcılar alanlara göre isim Ve yaş NEREDE yaş en küçük değeri alır.

Kullanıcılardan ad, min(yaş) SEÇİN;
15. Tablodan veri seçin kullanıcılar sahada isim NEREDE İD 2'YE EŞİT DEĞİLDİR.

Kullanıcılardan adı SEÇİN WHERE id!="2";

3. Basit INSERT (yeni giriş) sorguları

SOKMAK– BAŞLANGIÇTA veritabanına bir kayıt eklemenizi sağlayan bir sorgu. Yani veritabanında YENİ bir kayıt (satır) oluşturur.

1. Yapmak Yeni giriş masada kullanıcılar, sahada isim Sergey'i ekler ve sahada yaş 25 ekler. Böylece tabloya eklenir Yeni hat bu değerlerle. Daha fazla sütun varsa geri kalanlar ya boş kalacak ya da varsayılan değerlerle kalacaktır.

INSERT INTO kullanıcılar (isim, yaş) DEĞERLER ("Sergey", "25");

4. MySQL veritabanına basit UPDATE sorguları

GÜNCELLEME– alan değerlerini REZERVASYON yapmanıza veya veritabanında mevcut bir satıra bir şeyler eklemenize olanak tanıyan bir sorgu. Örneğin hazır bir satır var ancak yaş parametresinin zamanla değiştiği için yeniden yazılması gerekiyor.

1. Tabloda kullanıcılar yaş 18 olur.

GÜNCELLEME kullanıcıları SET age = "18" WHERE id = "3";
2. Her şey ilk istektekiyle aynıdır, yalnızca iki veya daha fazla alanın üzerine yazılan istek sözdizimini gösterir.
Masada kullanıcılar WHERE kimliği 3 alan değerine eşittir yaş 18 yaşına giriyor ve ülke Rusya.

GÜNCELLEME kullanıcıları SET yaş = "18", ülke = "Rusya" WHERE id = "3";

5. MySQL veritabanına basit DELETE (kayıt silme) sorguları

SİLMEK– tablodan bir satırı silen bir sorgu.

1. Tablodan bir satırı kaldırır kullanıcılar NEREDE İD 10'a eşittir.

KULLANICILARDAN SİL WHERE id = "10";

6. MySQL veritabanına basit DROP (tablo silme) sorguları

DÜŞÜRMEK– bir tabloyu silen bir sorgu.

1. Tablonun tamamını siler tbl_name.

DROP TABLE tbl_name;

7. MySQL veritabanına karmaşık sorgular

Deneyimli kullanıcılar için bile faydalı olabilecek ilginç sorgular

Kullanıcılardan kimliği, adı, ülkeyi, yöneticileri SEÇİN WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Bu karmaşık sorgu sütunları SEÇİYOR kimlik, ad, ülke TABLOLARDA kullanıcılar,yöneticiler NEREDE Kayıt Tarihi(tarih) daha eski değil 14 günler ben aktivasyon EŞİT DEĞİL 0 , Göre sırala Kayıt Tarihi ters sırada (önce yeni).

GÜNCELLEME kullanıcıları SET age = "18+" WHERE age = (SELECT age FROM user WHERE male = "man");
Yukarıda sözde bir örnek var istek içinde istek SQL'de. Kullanıcıların yaşını cinsiyetin erkek olduğu 18+ olarak güncelleyin. Bu tür istek seçeneklerini önermiyorum. Kişisel deneyimlerime dayanarak, birkaç ayrı tane oluşturmanın daha iyi olacağını söyleyeceğim - bunlar daha hızlı işlenecek.

8. MySQL ve PHP veritabanı sorguları

Bir PHP sayfasındaki MySQL sorgularında, değişkenleri karşılaştırılan değerler vb. olarak ekleyebilirsiniz. Birkaç örnek

1. Tablodaki tüm kayıtları seçer kullanıcılar, tarla nerede isim değişkenin değerine karşılık gelir $isim.

SELECT * FROM user WHERE fname="$name";
2. Tabloda kullanıcılar WHERE kimliği 3 alan değerine eşittir yaş$age değişkeninin değerinde değişiklik yapar.

GÜNCELLEME kullanıcıları SET age = "$age" WHERE id = "3";

Dikkat! Başka bir örnekle ilgileniyorsanız, yorumlara bir soru yazın!

Bu yazıda belki de en önemlilerinden bazılarına bakacağız. SQL sorguları. Bu bir veritabanı tablosuna kayıt ekleme ve kaldırma sorguları. Çünkü ÇOK sık yapmanız gerekir tabloya yeni kayıtlar ekleme ve bunu otomatik olarak yapıyorsanız, bu materyalin üzerinde çalışılması gerekir.

Başlamak Tabloya yeni bir kayıt eklemek için SQL sorgusu:

INSERT INTO kullanıcılar (giriş, geçiş) değerleri("TestUser", "123456")

Bir giriş eklerken "komutu TAKIN", ardından kaydı ekleyeceğimiz tablonun adı. Ardından parantez içinde doldurmak istediğimiz alanların adları gelir. Ve sonra parantez içinde " kelimesinden sonra gelir. değerler"Seçtiğimiz alanların değerlerini listelemeye başlıyoruz. Bu sorguyu çalıştırdıktan sonra tablomuzda yeni bir giriş görünecektir.

Bazen gerekli tablo girişini güncelle, bunun için aşağıdakiler var SQL sorgusu:

GÜNCELLEME kullanıcıları SET giriş = "TestUser2", pass = "1234560" WHERE giriş = "TestUser"

Bu sorgu daha karmaşıktır çünkü " NEREDE", ancak bunun hakkında daha fazla bilgi aşağıda. İlk önce komut gelir " GÜNCELLEME", ardından tablo adı ve ardından " AYARLAMAK"Değiştirmek istediğimiz tüm alanların değerlerini açıklıyoruz. Basit olurdu ama şu soru ortaya çıkıyor: " Hangi kayıt güncellenmeli?". İşte bu yüzden var " NEREDE". Bu durumda kaydı, alanı güncelliyoruz " giriş yapmak"hangisi önemli" Test Kullanıcısı". Lütfen bu tür birkaç kayıt varsa, o zaman kesinlikle her şey güncellenecek! Bunu anlamak çok önemlidir, aksi takdirde masanızı kaybetme riskiyle karşı karşıya kalırsınız.

Biraz daha konuşalım" NEREDE". Basit eşitlik kontrollerinin yanı sıra eşitsizlikler ve mantıksal işlemler de vardır: VE Ve VEYA.

GÜNCELLEME kullanıcıları SET giriş = "TestUser2", pass = "1234560" WHERE kimliği< 15 AND login="TestUser"

SQL sorgusu bu kayıtları güncelleyecek, İD bunlardan daha az var 15 VE alan " giriş yapmak"anlamı var" Test Kullanıcısı"Umarım tasarımı çözmüşsündür" NEREDE"çünkü bu çok önemli. Kesinlikle" NEREDE" ne zaman kullanılır tablolardan kayıt getirme ve bu, veritabanlarıyla çalışırken en sık kullanılan görevdir.

Ve son olarak basit Bir tablodaki kayıtları silmek için SQL sorgusu:

WHERE giriş = "TestUser2" kullanıcılardan SİL

"komutundan sonra SİL", kayıtları silmek istediğiniz tablonun adıdır. Daha sonra "NEREDE" yapısını anlatacağız. Eğer kayıt açıklanan koşulları karşılıyorsa silinecektir. Yine, karşılayan kayıt sayısına göre dikkat ediniz. " sonrasındaki durum NEREDE", bunlardan herhangi biri silinebilir.