how to overcome these type of issues where null value inserted into primary key not null column in table
As was stated in the comment
You're not inserting a NULL value, you're inserting ""
If you want to prevent an empty string ("") and NULLs from being used as
ai_name, you need a trigger. In your particular case, you need a
BEFORE INSERT trigger:
DELIMITER $$ CREATE TRIGGER check_for_blank_ai_name BEFORE INSERT ON actionitems FOR EACH ROW BEGIN DECLARE dummy INT; IF ( IFNULL(NEW.ai_name,'') = '' ) THEN SELECT 'Any Message' INTO dummy FROM mysql.user WHERE used = 'anything'; END IF; END $$ DELIMITER ;
The line of code
SELECT 'Any Message' INTO dummy FROM mysql.user WHERE used = 'anything';
will break. That's by design. This will prevent the INSERT from occurring.
I have written triggers that break midstream before in my other posts:
Jun 09, 2013: BEFORE INSERT trigger in MySQL
Dec 11, 2012: Comparing dates in a BEFORE INSERT trigger
Dec 23, 2011: check constraint does not work?
Apr 25, 2011: Trigger in MySQL to prevent insertion
Give it a Try !!!