33
Oracle SQL Developer Essentials TABLES AND INDEXES

Oracle sql developer essentials

Embed Size (px)

Citation preview

Oracle SQL Developer

Essentials

TABLES AND INDEXES

BASIC CREATE TABLE SYNTAX

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_coursesPRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code FOREIGN KEY

(department_code) REFERENCES departments (department_code)

CONSTRAINT ck_courses_course_number CHECK (course_numberBETWEEN 100 AND 999)

)

TABLESPACE users

PCTFREE 75;

• Column Naming rules

1. 30 characters maximum

2. Names must be unique withing a table

3. Names can be reused in other table

• Number of columns per table 1. Maximum of 1000 columns

2. Over 255 columns result in row chaining

Column Definition Rules

• Minimum Information

1. Names and datatypes must be specified

2. Null and default clauses are optional

CREATE TABLE students

(

student_id NUMBER(6) NOT NULL,

first_name VARCHAR2(30) NOT NULL,

last_name VARCHAR2(30) NOT NULL,

email_address VARCHAR2(128) NOT NULL,

phone VARCHAR2(20) NULL,

city VARCHAR2(30),

state VARCHAR2(2) ,

status_code VARCHAR2(1) DEFAULT ‘A’ NOT NULL,

CONSTRAINT pk_studentsPRIMARY KEY (student_id)

);

Null column values

If not specified , default it will accept null values

CREATE TABLE orders

(

order_id NUMBER(10) NOT NULL,

order_date DATE NOT NULL,

customer_id NUMBER(10) NOT NULL,

subtotal NUMBER(10,2),

tax NUMBER(10,2),

shipping NUMBER(10,2),

grand_total NUMBER(10,2)

AS (subtotal + tax + shipping) VIRTUAL

);

Virtual Column

• Virtual columns are not stored in physical disk space

• You cannot perform insert or update operation on virtual column

• Value is computed in the result set of the query

• Cannot insert or update virtual columns

• Can only make use of columns in the same

table

• Index can be created over virtual column

values

CREATE TABLE students

(

student_id NUMBER(6) NOT NULL,

first_name VARCHAR2(30) NOT NULL,

last_name VARCHAR2(30) NOT NULL,

email_address VARCHAR2(128) NOT

NULL,

phone VARCHAR2(20) NULL,

city VARCHAR2(30) NULL,

state VARCHAR2(2) NULL,

CONSTRAINT pk_students PRIMARY

KEY (student_id)

);

Primary Key

• Primary Key Types

1. Natural Key

- Combination of naturally occurring columns that forms a unique key

2. Surrogate Key

- A unique value is generated for each

row

• Uniquely Identifies each rows in a column

• Can be defined over one or more column

• Cannot contain a null value in primary key

column

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT

NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT

NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses

PRIMARY KEY (department_code,

course_number)

);

Primary Key Using constraint clause

Adding Primary Key to an Existing table

ALTER TABLE courses

CONSTRAINT pk_courses

ADD PRIMARY KEY (department_code,

course_number);

SQL> SELECT rowid, zip_code, city, state

2 FROM zip_codes;

ROWID ZIP_C CITY ST

----------------------- --------------------------------

AAAXoNAAGAAAJzeAAA11201 Brooklyn NY

AAAXoNAAGAAAJzeAAB75201 Dallas TX

AAAXoNAAGAAAJzeAAC80401 Golden CO

AAAXoNAAGAAAJzeAAD92101 San Diego CA

Oracle ROWID

It is not intended to use ROWID as a

replacement for primary key.

Foreign Key

Foreign Key Continues…

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses

PRIMARY KEY (department_code,

course_number),

C O N S T R A I N T

f k _ c o u r s e s _ d e p a r t m e n t _ c o d e

F O R E I G N K E Y ( d e p a r t m e n t _ c o d e )

R E F E R E N C E S d e p a r t m e n t s

( d e p a r t m e n t _ c o d e ) ,

);

Add a Foreign Key to an Existing Table

ALTER TABLE courses

CONSTRAINT fk_courses_department_code

ADD FOREIGN KEY (department_code)

REFERENCES departments

(department_code);

On Delete Cascade

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses

PRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code FOREIGN KEY (department_code) REFERENCES

departments (department_code) ON DELETE CASCADE

);

Creating foreign key with ON DELETE CASCADE

In Case of ON DELETE CASCADE, if you delete any primary key in

parent table, it will delete the corresponding record from the

child table automatically.

On Delete Cascade continues …

DELETE FROM courses WHERE department_code= ‘PH’;

DELETE FROM departments WHERE department_code= ‘PH’;

COMMIT;

Deleting without ON DELETE CASCADE

To delete a primary key value, no child records can exist

DEFERRED CONSTRAINT

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses PRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code FOREIGN KEY (department_code)

REFERENCES departments (department_code) DEFERRABLE

INITIALLY IMMEDIATE

-- INITIALLY DEFERRABLE

);

Creating foreign key with DEFERRED CONSTRAINT

This way we can tell oracle to defer enforcing the constraint until

the transaction is commited not as soon as statement is

executed.

DEFERRED CONSTRAINT continues …

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses PRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code FOREIGN KEY (department_code)

REFERENCES departments (department_code) DEFERRABLE

INITIALLY IMMEDIATE

);

DEFERRED CONSTRAINT with INITIALLY IMMEDIATE

If we use INITIALLY IMMEDIATE, we tell the oracle to enforce the constraint at statement level like Normal unless we specifically

instruct the oracle to defer checking of the constraint inside of our transaction.

DEFERRED CONSTRAINT continues …

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses PRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code FOREIGN KEY (department_code)

REFERENCES departments (department_code) DEFERRABLE

INITIALLY DEFERRABLE

);

DEFERRED CONSTRAINT with INITIALLY DEFERRABLE

If we use INITIALLY DEFERRABLE, we tell the oracle to enforce the constraint until the transaction commits.

DEFERRED CONSTRAINT continues …

set constraint fk_courses_depatment_code deferred;

UPDATE departments

SET department_code = ‘CO’

WHERE department_code = ‘CS’;

UPDATE courses

SET department_code = ‘CO’

WHERE department_code = ‘CS’;

COMMIT;

Using DEFERRED CONSTRAINT

Check Constraints

CREATE TABLE courses

(

department_code VARCHAR2(2) NOT NULL,

course_number NUMBER(3,0) NOT NULL,

course_title VARCHAR2(64) NOT NULL,

course_description VARCHAR2(512) NOT NULL,

credits NUMBER(3,1) NOT NULL,

CONSTRAINT pk_courses PRIMARY KEY (department_code, course_number),

CONSTRAINT fk_courses_department_code

FOREIGN KEY (department_code) REFERENCES departments (department_code),

CONSTRAINT ck_courses_course_number CHECK (course_number BETWEEN 100 AND 999)

);

Check Constraints continues …

CREATE TABLE states

(

state_code VARCHAR2(2) NOT NULL,

state_name VARCHAR2(30) NOT NULL,

region VARCHAR2(2) NOT NULL,

CONSTRAINT pk_states PRIMARY KEY (state_code),

CONSTRAINT ck_state_regions

CHECK (region IN (‘NE’, ‘SE’, ‘MW’, ‘SC’, ‘NW’, ‘SW’))

);

To Check if a value is within a range

Check Constraints continues …

CREATE TABLE students

(

student_id NUMBER(6) NOT NULL,

first_name VARCHAR2(30) NOT NULL,

last_name VARCHAR2(30) NOT NULL,

email_address VARCHAR2(128) NOT NULL,

likes_ice_cream NUMBER(1) NULL,

CONSTRAINT pk_students PRIMARY KEY (student_id),

CONSTRAINT ck_studens_ice_cream

CHECK (likes_ice_cream IN (0,1))

);

To emulate a Boolean column

Check Constraints continues …

CREATE TABLE zip_codes

(

zip_code VARCHAR2(5) NOT NULL,

city VARCHAR2(30) NOT NULL,

state_code VARCHAR2(30) NOT NULL,

CONSTRAINT pk_codes

PRIMARY KEY (state_code),

CONSTRAINT ck_zip_code_format

CHECK (REGEXP_LIKE (zip_code, '^[0-9]{5}$') )

);

Validate Format Using a Regular Expression

Add a Constraint to an Existing Table

ALTER TABLE zip_codes

ADD CONSTRAINT ck_zip_codes_format

CHECK (REGEXP_LIKE (zip_code, '^[0-9]{5}$') );

Disabling and Enabling Constraints

ALTER TABLE courses

DISABLE CONSTRAINT fk_courses_department_code;

Disabling a constraint

Enabling a constraint

ALTER TABLE courses

ENABLE CONSTRAINT fk_courses_department_code;

Check Constraints continues …

CREATE TABLE zip_codes

(

zip_code VARCHAR2(5) NOT NULL,

city VARCHAR2(30) NOT NULL,

state_code VARCHAR2(30) NOT NULL,

CONSTRAINT pk_codes

PRIMARY KEY (state_code),

CONSTRAINT ck_zip_code_format

CHECK (REGEXP_LIKE (zip_code, '^[0-9]{5}$') )

);

Validate Format Using a Regular Expression

Add a Constraint to an Existing Table

ALTER TABLE zip_codes

ADD CONSTRAINT ck_zip_codes_format

CHECK (REGEXP_LIKE (zip_code, '^[0-9]{5}$') );

Table Storage Options

Oracle stores the tables and views in Database blocks

A Database block is like a shipping container

Table Storage Options

What is a block ?

Block Header

• Block type information

• Object assignment

• Row directory

Row

• Actual data in our tabe

Free space

• Allows for updates to rows.

Table Storage Options

How Oracle Performs Data Access Operation ?

1. Full Table Scan

2. Index operation with Row Lookup.

Full Table Scan

• Oracle scans through every block in the table

• Comparable to a linear search in an array

Table Storage Options

Index Operation with Row lookup

Table Storage Options

Table Data and Sort Order

Data in a table has no implied order.

• Oracle will insert the row wherever they fits

• Physical order in disk != Order data was inserted.

Data returned from queries is not sorted

• Order of results is not order data was returned

• Two different executions can return same results in different

order.

Table Storage Options

Tablespace Introductions

Table Storage Options

Tablespace Block Size

Row Chaining is when a row in table is so long that it will not fit in a single data block.

So oracle has to chain the row and store it in two or more data block.

It increases the amount of IO operation while performing database o/p.

Table Storage Options

Segment space management

Table Storage Options

Oracle Contains Multiple Tablespaces

• Every user has a Default

tablespace

• Some objects may be

created in and alternate

tablespace

Table Storage Options

Specifying a tablespace for a table

CREATE TABLE course_enrollments

(

course_enrollment_id NUMBER NOT NULL,

course_offering_id NUMBER(20) NOT NULL,

student_id NUMBER(10) NOT NULL,

grade_code VARCHAR2(1) NULL,

CONSTRAINT pk_course_enrollments PRIMARY KEY (course_enrollment_id),

CONSTRAINT fk_enrollments_offerings

FOREIGN KEY (course_offering_id) REFERENCES course_offerings(course_offering_id),

CONSTRAINT fk_enrollments_student

FOREIGN KEY (student_id) REFERENCES students (student_id),

CONSTRAINT fk_enrollments_grades FOREIGN KEY (grade_code) REFERENCES grades

(grade_code)

)

TABLESPACE student_data;

Table Storage Options

High Water Mark

Highest numbered block that has ever contained data in a table

• For a newly created table, the block is at the left of the table because no data has

ever been inserted into the table.