Error in foreignkey table - mysql

I created the database structure using MySQL workbench. When I do the forward engineer or synchronize model it displays some errors.
When I remove the foreign key or if I connect "INT" as a foreign key to the second table then it's working fine. But I want to use "Varchar(255)". Can't we use "Varchar(255)" as a foreign key? If so please help me to fix this error. I can't do forward engineer to this table.

Yes you can use varchar as foreign key.It is appropriate to add a unique index or a unique constraint to your table. However, your primary key should generally be some "meaningless" value, such as an auto-incremented number or a GUID.

Related

How to define a foreign key using phpMyAdmin GUI in mySQL

I am creating a table using the GUI in phpMyAdmin mySQL hosted on an Apache web server (XAMMP).
How do I define a column as a foreign key and where do I insert the reference to the corresponding primary key? There is a drop down option for Primary Key but I don't see any such option for a foreign key.
Thanks
Find the Relation view see picture and there you can define our foreign keys.

I'm getting Error: Missing index on column(s). when I try to create a relationship between tables in phpMyAdmin Designer tool

I need to create the database schema and include it in my software requirements specification for my school project, however, when I try to create a relationship between 2 tables, I get Error: Missing index on column(s).
I think #HazarathChillara has this right; you need to create primary, unique, or index keys.
You said every table has an primary key, but did you make each foreign and referenced key an index as well? It sounds like you neglected to properly set up your table structure; I only get the error when I don't have a primary key or index on the particular columns I'm working with.
"MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan"
You can just put an INDEX on the foreign key (often my referenced key is a primary key anyway, so I don't need any additional key on that column).
This error appears only when you neglect table structure. Make sure that you Indexed a foreign key as well. you can see i marked how could i select my foreign key as index.In this Image I am indexing selected, 'sr' my foreign key
As Usman Khan said you have to go to the structure tab of the particular table and clicked on more options and select 'INDEX' for the foreign key.
the below image will help you how to do it
I think i have another simple solve,
thing is, phpMyAdmin wont allow the addition of foreign keys to an already available data entry, so here is the my simple solve,
1. ensure to backup your database
2. confirm that your data was backed-up securely, recommended Offline backups
4. delete all data entries in all tables that will be part of the new relationship.
5. now Create the relevant relationships.
6. be sure you have created all required and preferred relations to avoid the need to
export data again

Can't create Foreign Key

I wrote a simple SQL statement to create addon for wordpress - just few tables with relations.
I decided to test it a bit in MySQL workbench and all goes fine, got tables and relations. Then I'm trying to forward engineer it - workbench slightly changes the text... and then reports an error:
Honestly, I'm quite puzzled here... schema looks very simple, I'm sure I didn't make any type so why the error?
Make sure the columns are the same in both tables including sign for the foreign key and the primary key.
Could it be the engine? InnoDB handles foreign keys, but I think the standard MyISAM doesn't, or at least, didn't always, depending on version.
If you are trying to add the foreign key restriction to an attribute in a table containing data you can have problems if the foreign key restriction is not fulfilled. I mean, if you have a value in the attribute that now is a foreign key, and this value is not contained in the attribute of the table that the foreign key references.

Do I have to fill foreign key values?

Do I have to fill the field of a foreign key in MySQL or any other database manager?.
I'm writing the data of a table and when I get to the field that is a FK from another table, I have to write something, is this necessary?
I understand that the value in that FK is stored inside the parent table where it comes from.
You have to provide a value unless the foreign key column is nullable.
It depends on whether the is actually a foreign key constraint in place (available in InnoDB only). In some cases frameworks, applications, or database management tools create "false" foreign keys that exist only in the application and not actually in the database. Also, the limits on how you can insert/update/delete data realted to the foreign keys can differ based on the type on constraint in place.
Here is the MYSQL documentation for definitive information:
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
Specifically, look at the "Referential Actions" section for comments on the behavior between the tables.

Does MySQL Workbench automatically create indexes for foreign keys?

When I create a foreign key in MySQL workbench, a new entry appears on the "Indexes" tab with the exact same same as the foreign key that I just created.
Is this actually the foreign key, showing up on the "Indexes" tab for some reason? Or does MySQL Workbench try to be helpful and create an index for me, knowing that I'm likely to be selecting against that column, and give it (confusingly) the same name as the foreign key?
It's MySQL doing that, not workbench.
And yes, it is being helpful to create an index when you create a foreign key constraint.
Foreign keys in innodb require an index or a prefix of an index with the same fields as the constraint in the same order. It seems MySQL Workbench automatically creates these since they appear in the SQL script exported from MySQL Workbench.
This is helpful but the problem is that it does not recognize the prefix from other indexes so it always creates an index even when it is unnecessary.