Apache Derby - Tablo İfadesini Değiştir

ALTER TABLE deyimi, mevcut bir tabloyu değiştirmenize izin verir. Bunu kullanarak aşağıdakileri yapabilirsiniz -

  • Bir sütun ekleyin, bir kısıt ekleyin

  • Bir sütun bırakın, bir kısıt bırakın

  • Bir tablonun satır düzeyinde kilitlemesini değiştirme

Aşağıda gösterildiği gibi Çalışanlar adlı bir tablo oluşturduğumuzu varsayalım -

ij> CREATE TABLE Employees (
   Id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255),
   PRIMARY KEY (Id)
);

Ve insert deyimini kullanarak dört kayıt eklendi -

ij> INSERT INTO Employees (Name, Salary, Location) VALUES
 ('Amit', 30000, 'Hyderabad'),
 ('Kalyan', 40000, 'Vishakhapatnam'),
 ('Renuka', 50000, 'Delhi'),
 ('Archana', 15000, 'Mumbai');

Tabloya bir sütun eklemek

Aşağıda, ALTER ifadesini kullanarak bir tabloya sütun eklemek için sözdizimi verilmiştir.

ALTER TABLE table_name ADD COLUMN column_name column_type;

Misal

ALTER deyimini kullanarak, tip tamsayısı ile Age adında yeni bir sütun eklemeye çalışıyoruz.

ALTER TABLE Employees ADD COLUMN Age INT;
0 rows inserted/updated/deleted

Tamsayı türüne sahip Telefon_Numarası adlı başka bir sütun ekleyin.

ALTER TABLE Employees ADD COLUMN Phone_No BIGINT;
0 rows inserted/updated/deleted

DESCRIBE komutu, tablo varsa, sütunları ve ayrıntılarını listeleyerek belirtilen tabloyu açıklar. TANIMLARsanız, Çalışanlar tablosunda yeni eklenen sütunları aşağıda gösterildiği gibi gözlemleyebilirsiniz -

ij> DESCRIBE Employees;
COLUMN_NAME |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
------------------------------------------------------------------------------
ID |INTEGER |0 |10 |10 |AUTOINCRE&|NULL |NO
NAME |VARCHAR |NULL|NULL|255 |NULL |510 |YES
SALARY |INTEGER |0 |10 |10 |NULL |NULL |NO
LOCATION |VARCHAR |NULL|NULL|255 |NULL |510 |YES
AGE |INTEGER |0 |10 |10 |NULL |NULL |YES
PHONE_NO |INTEGER |0 |10 |10 |NULL |NULL |YES
6 rows selected

Tabloya kısıtlama ekleme

Aşağıda, ALTER ifadesini kullanarak bir tablonun sütununa bir sınırlama eklemek için sözdizimi verilmiştir.

ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint (column_name);

Nerede constraint BOŞ, BOŞ, BİRİNCİL ANAHTAR, BENZERSİZ, YABANCI ANAHTAR, KONTROL OLMAYABİLİR.

Misal

ALTER deyimini kullanarak kısıtlama eklemeye çalışıyoruz UNIQUE Phone_No sütununa.

ij> ALTER TABLE Employees ADD CONSTRAINT New_Constraint UNIQUE(Phone_No);
0 rows inserted/updated/deleted

Bir sütuna UNIQUE kısıtlaması eklediğinizde, iki satır için aynı değerlere sahip olamaz, yani telefon numarası her çalışan için benzersiz olmalıdır.

Aynı telefon numarasına sahip iki sütun eklemeye çalışırsanız, aşağıda gösterildiği gibi bir istisna alırsınız.

ij> INSERT INTO Employees (Name, Salary, Location, Age, Phone_No) VALUES
('Amit', 30000, 'Hyderabad', 30, 9848022338);
1 row inserted/updated/deleted
ij> INSERT INTO Employees (Name, Salary, Location, Age, Phone_No) VALUES
('Sumit', 35000, 'Chennai', 25, 9848022338);
ERROR 23505: The statement was aborted because it would have caused a duplicate
key value in a unique or primary key constraint or unique index identified by
'NEW_CONSTRAINT' defined on 'EMPLOYEES'.

Bir tablodan bir kısıtlama kaldırmak

Bir sütunun sınırlamasını kaldırmak için sözdizimi aşağıdadır -

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

Misal

Aşağıdaki sorgu, yukarıda oluşturulan Phone_No sütunundaki New_Constraint kısıtlama adını siler.

ij> ALTER TABLE Employees DROP CONSTRAINT New_Constraint;
0 rows inserted/updated/deleted

Phone_No sütunundaki UNIQUE kısıtlamasını kaldırdığımız için, aynı telefon numarasına sahip sütunlar ekleyebilirsiniz.

ij> INSERT INTO Employees (Name, Salary, Location, Age, Phone_No) VALUES
('Sumit', 35000, 'Chennai', 25, 9848022338);
1 row inserted/updated/deleted

Tablonun içeriğini doğrulayabilirsiniz ij> Çalışanlar'dan * öğesini aşağıdaki gibi seçin -

ID |NAME |SALARY |LOCATION |AGE |PHONE_NO
-------------------------------------------------------------------------
1 |Amit |30000 |Hyderabad |30 |9848022338
2 |Sumit |35000 |Chennai |25 |9848022338
2 rows selected

Tablodan bir sütun düşürme

Bir sütunun bir sütununu bırakma sözdizimi aşağıdadır.

ALTER TABLE table_name DROP COLUMN column_name;

Misal

Aşağıdaki sorgu, adlı sütunu siler age of the employee -

ij> ALTER TABLE Employees DROP COLUMN Age;
0 rows inserted/updated/deleted

Tabloyu tanımlarsanız, yalnızca 4 sütun görebilirsiniz.

ij> DESCRIBE Employees;
COLUMN_NAME |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
------------------------------------------------------------------------------
ID |INTEGER |0 |10 |10 |AUTOINCRE&|NULL |NO
NAME |VARCHAR |NULL|NULL|255 |NULL |510 |YES
SALARY |INTEGER |0 |10 |10 |NULL |NULL |NO
LOCATION |VARCHAR |NULL|NULL|255 |NULL |510 |YES
PHONE_NO |BIGINT |0 |10 |19 |NULL |NULL |YES

JDBC programını kullanarak tabloyu değiştirme

ALTER sorgusunu kullanarak bir tabloyu değiştirmek için JDBC programı aşağıdadır -

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class AlterTableExample {
   public static void main(String args[]) throws Exception {
      //Registering the driver
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
      //Getting the Connection object
      String URL = "jdbc:derby:sampleDB;create=true";
      Connection conn = DriverManager.getConnection(URL);

      //Creating the Statement object
      Statement stmt = conn.createStatement();

      //Executing the query
      String createQuery = "CREATE TABLE Employees( "
         + "Id INT NOT NULL GENERATED ALWAYS AS IDENTITY, "
         + "Name VARCHAR(255), "
         + "Salary INT NOT NULL, "
         + "Location VARCHAR(255), "
         + "PRIMARY KEY (Id))";

      stmt.execute(createQuery);
      System.out.println("Table created");
      System.out.println(" ");

      //Executing the query
      String insertQuery = "INSERT INTO Employees("
         + "Name, Salary, Location) VALUES "
         + "('Amit', 30000, 'Hyderabad'), "
         + "('Kalyan', 40000, 'Vishakhapatnam'), "
         + "('Renuka', 50000, 'Delhi'), "
         + "('Archana', 15000, 'Mumbai'), "
         + "('Trupti', 45000, 'Kochin')";

      stmt.execute(insertQuery);
      System.out.println("Values inserted");
      System.out.println(" ");

      //Executing the query
      String selectQuery = "SELECT * FROM Employees";
      ResultSet rs = stmt.executeQuery(selectQuery);
      System.out.println("Contents of the table after inserting the table");
      while(rs.next()) {
         System.out.println("Id: "+rs.getString("Id"));
         System.out.println("Name: "+rs.getString("Name"));
         System.out.println("Salary: "+rs.getString("Salary"));
         System.out.println("Location: "+rs.getString("Location"));
      }
      System.out.println(" ");

      //Altering the table
      stmt.execute("ALTER TABLE Employees ADD COLUMN Age INT");
      stmt.execute("ALTER TABLE Employees ADD COLUMN Phone_No BigINT");
      stmt.execute("ALTER TABLE Employees " + "ADD CONSTRAINT New_Constraint UNIQUE(Phone_No)");

      stmt.execute("INSERT INTO Employees "
         + "(Name, Salary, Location, Age, Phone_No) "
         + "VALUES ('Amit', 30000, 'Hyderabad', 30, 9848022338)");
      ResultSet alterResult = stmt.executeQuery("Select * from Employees");
      System.out.println("Contents of the table after altering "
         + "the table and inserting values to it: ");
      while(alterResult.next()) {
         System.out.println("Id: "+alterResult.getString("Id"));
         System.out.println("Name: "+alterResult.getString("Name"));
         System.out.println("Salary: "+alterResult.getString("Salary"));
         System.out.println("Location: "+alterResult.getString("Location"));
         System.out.println("Age: "+alterResult.getString("Age"));
         System.out.println("Phone_No: "+alterResult.getString("Phone_No"));
      }
   }
}

Çıktı

Yukarıdaki programı çalıştırırken, aşağıdaki çıktı üretilecektir -

Table created

Values inserted

Contents of the table after inserting the table
Id: 1
Name: Amit
Salary: 30000
Location: Hyderabad
Id: 2
Name: Kalyan
Salary: 40000
Location: Vishakhapatnam
Id: 3
Name: Renuka
Salary: 50000
Location: Delhi
Id: 4
Name: Archana
Salary: 15000
Location: Mumbai
Id: 5
Name: Trupti
Salary: 45000
Location: Kochin

Contents of the table after altering the table and inserting values to it:
Id: 1
Name: Amit
Salary: 30000
Location: Hyderabad
Age: null
Phone_No: null
Id: 2
Name: Kalyan
Salary: 40000
Location: Vishakhapatnam
Age: null
Phone_No: null
Id: 3
Name: Renuka
Salary: 50000
Location: Delhi
Age: null
Phone_No: null
Id: 4
Name: Archana
Salary: 15000
Location: Mumbai
Age: null
Phone_No: null
Id: 5
Name: Trupti
Salary: 45000
Location: Kochin
Age: null
Phone_No: null
Id: 6
Name: Amit
Salary: 30000
Location: Hyderabad
Age: 30
Phone_No: 9848022338