Apache Derby - Tabellenanweisung ändern

Mit der Anweisung ALTER TABLE können Sie eine vorhandene Tabelle ändern. Mit diesem können Sie Folgendes tun:

  • Fügen Sie eine Spalte hinzu, fügen Sie eine Einschränkung hinzu

  • Löschen Sie eine Spalte, löschen Sie eine Einschränkung

  • Ändern Sie die Sperre auf Zeilenebene einer Tabelle

Nehmen wir an, wir haben eine Tabelle mit dem Namen "Mitarbeiter" erstellt (siehe unten).

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)
);

Und fügte vier Datensätze mit der insert-Anweisung als - ein

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

Hinzufügen einer Spalte zu einer Tabelle

Im Folgenden finden Sie die Syntax zum Hinzufügen einer Spalte zu einer Tabelle mithilfe der ALTER-Anweisung.

ALTER TABLE table_name ADD COLUMN column_name column_type;

Beispiel

Mit der Anweisung ALTER versuchen wir, eine neue Spalte mit dem Namen Age mit dem Typ Integer hinzuzufügen.

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

Fügen Sie eine weitere Spalte mit dem Namen Phone_No mit dem Typ Integer hinzu.

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

Der Befehl DESCRIBE beschreibt die angegebene Tabelle, indem die Spalten und ihre Details aufgelistet werden, sofern die Tabelle vorhanden ist. Wenn Sie die Tabelle Mitarbeiter BESCHREIBEN, können Sie die neu hinzugefügten Spalten wie unten gezeigt beobachten -

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

Hinzufügen einer Einschränkung zu einer Tabelle

Im Folgenden finden Sie die Syntax zum Hinzufügen einer Einschränkung zu einer Spalte einer Tabelle mithilfe der ALTER-Anweisung.

ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint (column_name);

Wo constraint kann NICHT NULL, NULL, PRIMARY KEY, EINZIGARTIG, AUSLÄNDISCHER KEY, CHECK sein.

Beispiel

Mit der ALTER-Anweisung versuchen wir, eine Einschränkung hinzuzufügen UNIQUE in die Spalte Phone_No.

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

Wenn Sie einer Spalte eine EINZIGARTIGE Einschränkung hinzufügen, kann sie nicht für zwei Zeilen dieselben Werte haben, dh die Telefonnummer sollte für jeden Mitarbeiter eindeutig sein.

Wenn Sie versuchen, zwei Spalten mit derselben Telefonnummer hinzuzufügen, wird eine Ausnahme angezeigt (siehe unten).

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'.

Löschen einer Einschränkung aus einer Tabelle

Es folgt die Syntax zum Löschen einer Einschränkung einer Spalte:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

Beispiel

Die folgende Abfrage löscht den Einschränkungsnamen New_Constraint in der oben erstellten Spalte Phone_No.

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

Da wir die UNIQUE-Einschränkung für die Spalte Phone_No entfernt haben, können Sie Spalten mit derselben Telefonnummer hinzufügen.

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

Sie können den Inhalt der Tabelle ij> select * from Employees wie folgt überprüfen:

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

Löschen einer Spalte aus einer Tabelle

Es folgt die Syntax zum Löschen einer Spalte einer Spalte.

ALTER TABLE table_name DROP COLUMN column_name;

Beispiel

Die folgende Abfrage löscht die benannte Spalte age of the employee - -

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

Wenn Sie die Tabelle beschreiben, sehen Sie nur 4 Spalten.

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

Ändern der Tabelle mit dem JDBC-Programm

Im Folgenden finden Sie das JDBC-Programm zum Ändern einer Tabelle mithilfe der ALTER-Abfrage:

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"));
      }
   }
}

Ausgabe

Bei Ausführung des obigen Programms wird die folgende Ausgabe generiert:

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