2. What is Constraint??
Constraints are used to specify rules for the data in a table.
If there is any violation between the constraint and the
data action, the action is aborted by the constraint.
Constraints can be specified when the table is created
(inside the CREATE TABLE statement) or after the table is
created (inside the ALTER TABLE statement).
4. NOT NULL
The NOT NULL constraint enforces a column to NOT
accept NULL values.
It enforces a field to always contain a value.
This means that you cannot insert a new record, or
update a record without adding a value to this field.
5. NOT NULL
Set NOT NULL constraint
• While creating table
• After creating table
Verify NOT NULL in table structure
Try to skip the NOT NULL column in INSERT INTO query
Find what is stored, when we skip NOT NULL column values
Try another ways to insert null into not null column
DROP NOT NULL Constraint from Column
6. Set NOT NULL constraint
While creating
table
After creating
table
7. Set NOT NULL Constraint
(While Creating Table)
mysql> create table table1
-> (
-> rollno int,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.20 sec)
8. Set NOT NULL Constraint
(After Creating Table)
mysql> alter table table1
-> modify name varchar(20) not null;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
9. 1. Verify NOT NULL in Table Structure
NULL value not allowed in
name column
10. Try to enter Null value in name
column
Display Warningmysql> show warnings;
+---------+------+-------------------------------------------+
| Level
| Code | Message
|
+---------+------+-------------------------------------------+
| Warning | 1364 | Field 'name' doesn't have a default value |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)
12. What has been Stored by
Table???.2
mysql> select * from table1;
+--------+------+
| rollno | name |
+--------+------+
|
1 |
|
+--------+------+
1 row in set (0.00 sec)
Still not clear what is stored by Table in Name column
13. What has been Stored by
Table???.3
mysql> select length(name)
-> from table1;
+--------------+
| length(name) |
+--------------+
|
0 |
+--------------+
1 row in set (0.02 sec)
Table stored empty
string
BECAUSE if it is NULL;
length function would
have returned NULL
14. Another way to check table has
stored empty String in not null
column.1
mysql> select * from table1
-> where name is null;
Empty set (0.01 sec)
BECAUSE table has stored empty string instead of null
null != empty String (null is not equal to empty string )
15. Another way to check table has
stored empty String in not null
column.1
mysql> select * from table1
-> where name ='';
+--------+------+
| rollno | name |
+--------+------+
|
1 |
|
+--------+------+
1 row in set (0.00 sec)
Hence Proved table has
Stored empty String
17. MySQL Stores these values
when user doesn’t provide value
and
column cannot store NULL;
They are not equivalent to NULL
String
‘’(empty string)
Number
0
Date
0000-00-00
time
00:00:00
18. Another ways to Insert NULL
value.1
mysql> insert into table1(name)
-> values(NULL);
ERROR 1048 (23000): Column 'name'
cannot be null
19. Another ways to Insert NULL
value.2
mysql> insert into table1
-> values(23,NULL);
ERROR 1048 (23000): Column 'name'
cannot be null
20. Another ways to Insert NULL
value.3
mysql> insert into table1
-> values(23);
ERROR 1136 (21S01): Column count
doesn't match value count at row 1
21. Another ways to Insert NULL
value.4
mysql> insert into table1(rollno,name)
-> values(456);
ERROR 1136 (21S01): Column count doesn't
match value count at row 1
22. DEFAULT
The DEFAULT constraint is used to insert
a default value into a column.
The default value will be added to all
new records, if no other value is
specified.
23. DEFAULT
Set DEFAULT constraint
• While creating table
• After creating table
Verify DEFAULT in table structure
Try to skip rollno column value in INSERT INTO
Find what is stored, when we skip NOT NULL column values
Try another ways to insert null into not null column
30. Simple!!! The DEFAULT value
mysql> SELECT * FROM table1;
+--------+--------+
| rollno | name
|
+--------+--------+
|
500 | harish |
+--------+--------+
1 row in set (0.00 sec)
Default Value 500 is Stored when we did not specify any value
31. What happens when we
specify a value????
mysql> INSERT INTO table1
-> VALUES(1,'ramesh');
Query OK, 1 row affected (0.03 sec)
32. Simple !!! The Specified value is
Stored
mysql> SELECT * FROM table1;
+--------+--------+
| rollno | name
|
+--------+--------+
|
500 | harish |
|
1 | ramesh |
+--------+--------+
2 rows in set (0.00 sec)
The specified value in INSERT INTO statement is stored
33. What happens when we store
null in rollno column???
mysql> insert into table1
-> values(NULL,'suresh');
Query OK, 1 row affected (0.07 sec)
34. NULL is stored but why???
mysql> select * from table1;
+--------+--------+
| rollno | name
|
+--------+--------+
|
500 | harish |
|
1 | ramesh |
|
NULL | suresh |
+--------+--------+
3 rows in set (0.00 sec)
NULL can be stored with DEFAULT constraint column
35. Because…..
mysql> desc table1;
+--------+-------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| rollno | int(11)
| YES |
| 500
|
|
| name
| varchar(20) | YES |
| NULL
|
|
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.03 sec)
NULL is allowed
36. What happens when we Do not
specify any value????
mysql> insert into table1()
-> values();
Query OK, 1 row affected (0.03 sec)
37. Simple!!!
Default values are stored
mysql> select * from table1;
+--------+--------+
| rollno | name
|
+--------+--------+
|
500 | harish |
|
1 | ramesh |
|
NULL | suresh |
NULL is stored because it is|
500 | NULL
|
1. Default value for this column
+--------+--------+
2. NULL is allowed
4 rows in set (0.00 sec)
Rollno has default value 500,
that’s why it is stored
39. Yes!!! We can
When we add DEFAULT Constraint in a Filled
Column,
No Old Values are altered
40. How to Drop DEFAULT??
mysql> alter table table1
-> alter rollno
-> drop default;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
41. Verify, DEFAULT Dropped or
Not….
mysql> desc table1;
+--------+-------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| rollno | int(11)
| YES |
| NULL
|
|
| name
| varchar(20) | YES |
| NULL
|
|
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Returned Back to NULL,
like other columns
NO Default value, Only
NULL
43. What is Foreign key?
1.
2.
3.
4.
5.
6.
7.
A foreign key is a field (or collection of fields) in one table that uniquely
identifies a row of another table.
In other words, a foreign key is a column or a combination of columns
that is used to establish and enforce a link between two tables.
The table containing the foreign key is called the referencing or child
table, and the table containing the candidate key is called
the referenced or parent table.
A FOREIGN KEY in one table points to a PRIMARY KEY in another table.
The FOREIGN KEY constraint also prevents invalid data from being
inserted into the foreign key column, because it has to be one of the
values contained in the table it points to.
A table can contain more than one foreign key.
This is sometimes called a referencing key.
44. Example Scenario
For example, consider a database with two tables: a CUSTOMER table that
includes all customer data and an ORDER table that includes all customer
orders. Suppose the business requires that each order must refer to a single
customer. To reflect this in the database, a foreign key column is added to the
ORDER table (e.g., CUSTOMERID), which references the primary key of
CUSTOMER (e.g. ID). Because the primary key of a table must be unique, and
because CUSTOMERID only contains values from that primary key field, we
may assume that, when it has a value, CUSTOMERID will identify the
particular customer which placed the order.
45. Example 2
Persons table
P_Id
LastName
FirstName
Address
City
1
Hansen
Ola
Timoteivn
10
Sandnes
2
Svendson
Tove
Borgvn 23
Sandnes
3
Pettersen
Kari
Storgt 20
Stavanger
Orders table
O_Id
OrderNo
P_Id
1
77895
3
2
44678
3
3
22456
2
4
24562
1
P_id column is common in these tables. P_id is primary key in persons table. The other
way to check is, p_id values are not unique in orders table. It means persons table
which contains p_id as primary key is parent table and orders table is child table.
48. Example 5
Address table is parent
because address_id is
primary key in address table.
Telephone table is child.
You must have a contact before an address or
telephone number.
Contact table is parent
because contact_id is primary
key in contact table. Address
and telephone tables are
children.
59. How to add foreign key in
MySQL/Oracle
While creating table
SyntaxCONSTRAINT <constraint_name>
FOREIGN KEY(<column name of this/child table>)
REFERENCES <Parent Table Name> (<column name of parent table>)
ExampleCREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
60. How to add foreign key in
MySQL/Oracle
After creating table
SyntaxALTER TABLE <child table name>
ADD CONSTRAINT <constraint_name>
FOREIGN KEY(<column name of this/child table>)
REFERENCES <Parent Table Name> (<column name of parent table>);
ExampleALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);
61. How to check foreign keys in a table
mysql> DESC orders;
+---------+---------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| O_Id
| int(11) | NO
| PRI | NULL
|
|
| OrderNo | int(11) | NO
|
| NULL
|
|
| P_Id
| int(11) | YES | MUL | NULL
|
|
+---------+---------+------+-----+---------+-------+
This shows a foreign key constraint is set to
p_id column in orders table.
But Where are the Details???
Its parent table?
Linked column in parent table?
62. Check full details of foreign keys
mysql> SHOW CREATE TABLE orders;
| Table | Create Table
--------------------------------------------------------+
| orders | CREATE TABLE `orders` (
`O_Id` int(11) NOT NULL,
`OrderNo` int(11) NOT NULL,
`P_Id` int(11) DEFAULT NULL,
PRIMARY KEY (`O_Id`),
KEY `fk_PerOrders` (`P_Id`),
CONSTRAINT `fk_PerOrders` FOREIGN KEY (`P_Id`) REFERENCES `persons`
(`p_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------+---------------------------------------------------------------------Column in
parent table
Foreign key
constraint name
Column of this
table
Parent table name
63. Drop Foreign key in MySQL/Oracle
MySQL
Oracle
SyntaxALTER TABLE <child table name>
DROP FOREIGN KEY <constraint name>;
SyntaxALTER TABLE <child table name>
DROP CONSTRAINT <constraint name>;
ExampleALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders;
ExampleALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders