Error
Error Code:
1304
MySQL Error 1304: Stored Program Already Exists
Description
This error occurs when you attempt to create a stored program (such as a procedure, function, trigger, or event) with a name that is already in use within the current database. MySQL prevents the creation of duplicate objects to maintain data integrity and prevent ambiguity.
Error Message
%s %s already exists
Known Causes
3 known causesDuplicated Stored Program Name
You tried to create a stored procedure, function, or event using a name that is already assigned to an existing program of the same type.
Conflicting Trigger Definition
You attempted to create a trigger with a name that already exists, or a new trigger with the same timing (e.g., BEFORE INSERT) on the same table as an existing one.
Case Sensitivity Conflict
On some operating systems or with specific collation settings, MySQL might treat names as case-insensitive, leading to a conflict if an object with a different casing but the same name already exists.
Solutions
4 solutions available1. Drop and Recreate the Stored Program easy
Remove the existing stored program and then create it again.
1
Identify the exact name of the stored program (procedure or function) that is causing the error. The error message `%s %s already exists` will typically contain the type (e.g., 'PROCEDURE', 'FUNCTION') and the name.
SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema = 'your_database_name' AND routine_name = 'your_program_name';
2
Drop the existing stored program using the `DROP` statement. Replace `PROCEDURE` or `FUNCTION` with the correct type and provide the program name.
DROP PROCEDURE IF EXISTS your_database_name.your_program_name;
3
Execute your original `CREATE PROCEDURE` or `CREATE FUNCTION` statement to create the stored program.
-- Your CREATE PROCEDURE or CREATE FUNCTION statement here
-- Example:
-- CREATE PROCEDURE my_procedure() BEGIN
-- SELECT 'Hello World';
-- END;
2. Use `CREATE OR REPLACE` Statement easy
Atomically create or update the stored program if it already exists.
1
Modify your `CREATE PROCEDURE` or `CREATE FUNCTION` statement by adding `OR REPLACE` after `CREATE`. This tells MySQL to replace the existing program if it finds one with the same name.
-- Example for a procedure:
CREATE OR REPLACE PROCEDURE my_procedure()
BEGIN
SELECT 'Hello World';
END;
2
Execute the `CREATE OR REPLACE` statement. If the stored program exists, it will be updated; otherwise, it will be created.
CREATE OR REPLACE PROCEDURE your_database_name.your_program_name(...)
... -- rest of your procedure definition
3. Check for Typos and Duplicates in Script easy
Ensure the script you are running doesn't have duplicate creation statements.
1
Carefully review the SQL script you are executing. Look for multiple instances of `CREATE PROCEDURE` or `CREATE FUNCTION` statements for the same stored program name within the same script.
text
2
Remove any duplicate `CREATE` statements for the same stored program. If you intend to update an existing program, use `CREATE OR REPLACE` or a `DROP` followed by `CREATE`.
text
4. Verify Database and Program Names easy
Confirm that you are targeting the correct database and that the program name is accurate.
1
Ensure that your `USE your_database_name;` statement is correctly placed before the `CREATE` statement, or that you are fully qualifying the program name with the database name (e.g., `your_database_name.your_program_name`).
USE my_application_db;
CREATE PROCEDURE my_new_procedure() ...
2
Double-check the spelling of the stored program name in your `CREATE` statement against its actual name in the database. Case sensitivity might be a factor depending on your operating system and MySQL configuration.
SHOW CREATE PROCEDURE your_program_name;