What is the best performance of design for my tables? - mysql

I have 3 tables that they can be on 1table. What is the best performance for its design?
I need a fast database on search and read, not on insert.
These 3 tables will be read too more than be written
These 3 tables have more than 5 millions records
Most of the fields that are available in this table "p_apartmentbuy" are used in the search clause query (they have been indexed) And include some fields that are shown in the search result
The fields in this table "p_apartmentbuydetail" aren't used in search clause
"pf_contact" table will be used to show on some search result and usually
some columns are null
And what is differences between a "keyname with several indexes" and "several keynames with one index for each one" (like attachment photo).
Relations between tables:
p_apartmentbuy.id = p_apartmentbuydetail.p_apartmentbuy_id (1:1)
pf_contact.id = p_apartmentbuydetail.pf_contact_id (1:1)
CREATE TABLE `p_apartmentbuy` (
`id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
`dateadd` int(10) unsigned NOT NULL DEFAULT '0',
`sqm` smallint(5) unsigned NOT NULL DEFAULT '0',
`age` tinyint(2) unsigned NOT NULL DEFAULT '0',
`price` bigint(12) unsigned NOT NULL DEFAULT '0',
`pricemeter` int(10) unsigned NOT NULL DEFAULT '0',
`bedroom` tinyint(1) unsigned NOT NULL DEFAULT '0',
`parking` tinyint(1) unsigned NOT NULL DEFAULT '0',
`storage` tinyint(1) unsigned NOT NULL DEFAULT '0',
`elevator` tinyint(1) unsigned NOT NULL DEFAULT '0',
`describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' ',
`featured` tinyint(1) unsigned NOT NULL DEFAULT '0',
`pf_source_id` tinyint(1) unsigned NOT NULL DEFAULT '0',
`l_location_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`l_city_id` smallint(4) unsigned NOT NULL DEFAULT '0',
`l_province_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
`pf_status_id` tinyint(1) unsigned NOT NULL DEFAULT '0',
`pf_floor_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
`pf_facing_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
`pf_cabinet_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
`pf_service_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `dateadd` (`dateadd`),
KEY `sqm` (`sqm`),
KEY `age` (`age`),
KEY `price` (`price`),
KEY `bedroom` (`bedroom`),
KEY `parking` (`parking`),
KEY `storage` (`storage`),
KEY `elevator` (`elevator`),
KEY `l_location_id` (`l_location_id`),
KEY `l_city_id` (`l_city_id`),
KEY `l_province_id` (`l_province_id`),
KEY `pricemeter` (`pricemeter`),
FULLTEXT KEY `describe` (`describe`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `pf_contact` (
`id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' ',
`mobile` bigint(20) unsigned NOT NULL DEFAULT '0',
`telephone` bigint(20) NOT NULL DEFAULT '0',
`telephone2` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `p_apartmentbuydetail` (
`p_apartmentbuy_id` mediumint(7) unsigned NOT NULL,
`address` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' ',
`link` varchar(999) COLLATE utf8_unicode_ci NOT NULL DEFAULT ' ',
`sqmland` smallint(5) unsigned NOT NULL DEFAULT '0',
`floortotal` tinyint(3) unsigned NOT NULL DEFAULT '0',
`floorno` tinyint(3) unsigned NOT NULL DEFAULT '0',
`unitno` tinyint(3) unsigned NOT NULL DEFAULT '0',
`unitperfloor` tinyint(1) unsigned NOT NULL DEFAULT '0',
`remotedoor` tinyint(1) unsigned NOT NULL DEFAULT '0',
`iphone` tinyint(1) unsigned NOT NULL DEFAULT '0',
`trase` tinyint(1) unsigned NOT NULL DEFAULT '0',
`sona` tinyint(1) unsigned NOT NULL DEFAULT '0',
`pool` tinyint(1) unsigned NOT NULL DEFAULT '0',
`jackosi` tinyint(1) unsigned NOT NULL DEFAULT '0',
`renovate` tinyint(1) unsigned NOT NULL DEFAULT '0',
`tel` tinyint(1) unsigned NOT NULL DEFAULT '0',
`water` tinyint(1) unsigned NOT NULL DEFAULT '0',
`gas` tinyint(1) unsigned NOT NULL DEFAULT '0',
`electricity` tinyint(1) unsigned NOT NULL DEFAULT '0',
`pf_kitchen_id` tinyint(1) unsigned NOT NULL DEFAULT '0',
`pf_contact_id` mediumint(7) unsigned NOT NULL DEFAULT '0',
`pf_temperaturesystem_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
`pf_position_id` tinyint(2) unsigned NOT NULL DEFAULT '0',
`prev_id` smallint(8) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`p_apartmentbuy_id`),
KEY `prev_id` (`prev_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Related

Innodb. Error Code: 1191. Can't find FULLTEXT index matching the column list

After migrating from myiasm to innodb the following query fails unexpectedly
SELECT postid, post.dateline
FROM post AS post USE INDEX (threadid)
INNER JOIN thread AS thread ON(thread.threadid = post.threadid)
WHERE MATCH(post.title, post.pagetext) AGAINST ('+match1 +match2' IN BOOLEAN MODE) AND thread.threadid = <my_id>;
If I remove USE INDEX (threadid) the query works
If I instead remove MATCH(post.title, post.pagetext) AGAINST ('+match1 +match2' IN BOOLEAN MODE) AND the query also works.
I am using version 5.6.19-log
Relevant portions of schema:
CREATE TABLE `post` (
`postid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`threadid` int(10) unsigned NOT NULL DEFAULT '0',
`username` varchar(100) NOT NULL DEFAULT '',
`userid` int(10) unsigned NOT NULL DEFAULT '0',
`title` varchar(250) NOT NULL DEFAULT '',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
`pagetext` mediumtext NOT NULL,
`allowsmilie` smallint(6) NOT NULL DEFAULT '0',
`showsignature` smallint(6) NOT NULL DEFAULT '0',
`ipaddress` varchar(16) NOT NULL DEFAULT '',
`iconid` smallint(5) unsigned NOT NULL DEFAULT '0',
`visible` smallint(6) NOT NULL DEFAULT '0',
`parentid` int(10) unsigned NOT NULL DEFAULT '0',
`attach` smallint(5) unsigned NOT NULL DEFAULT '0',
`infraction` smallint(5) unsigned NOT NULL DEFAULT '0',
`reportthreadid` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`),
FULLTEXT KEY `title` (`title`,`pagetext`)
)
CREATE TABLE `thread` (
`threadid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(250) NOT NULL DEFAULT '',
`lastpost` int(10) unsigned NOT NULL DEFAULT '0',
`forumid` smallint(5) unsigned NOT NULL DEFAULT '0',
`pollid` int(10) unsigned NOT NULL DEFAULT '0',
`open` tinyint(4) NOT NULL DEFAULT '0',
`replycount` int(10) unsigned NOT NULL DEFAULT '0',
`postusername` varchar(100) NOT NULL DEFAULT '',
`postuserid` int(10) unsigned NOT NULL DEFAULT '0',
`lastposter` varchar(100) NOT NULL DEFAULT '',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
`views` int(10) unsigned NOT NULL DEFAULT '0',
`iconid` smallint(5) unsigned NOT NULL DEFAULT '0',
`notes` varchar(250) NOT NULL DEFAULT '',
`visible` smallint(6) NOT NULL DEFAULT '0',
`sticky` smallint(6) NOT NULL DEFAULT '0',
`votenum` smallint(5) unsigned NOT NULL DEFAULT '0',
`votetotal` smallint(5) unsigned NOT NULL DEFAULT '0',
`attach` smallint(5) unsigned NOT NULL DEFAULT '0',
`firstpostid` int(10) unsigned NOT NULL DEFAULT '0',
`similar` varchar(55) NOT NULL DEFAULT '',
`hiddencount` int(10) unsigned NOT NULL DEFAULT '0',
`deletedcount` smallint(5) unsigned NOT NULL DEFAULT '0',
`lastpostid` int(10) unsigned NOT NULL DEFAULT '0',
`prefixid` varchar(25) NOT NULL DEFAULT '',
`taglist` mediumtext,
PRIMARY KEY (`threadid`),
KEY `forumid` (`forumid`,`visible`,`sticky`,`lastpost`),
KEY `postuserid` (`postuserid`),
KEY `postuserid_2` (`postuserid`),
KEY `pollid` (`pollid`),
KEY `lastpost` (`lastpost`,`forumid`),
KEY `dateline` (`dateline`),
KEY `prefixid` (`prefixid`,`forumid`),
FULLTEXT KEY `title` (`title`)
)
Could this be a bug in innodb?
Dropping USE INDEX (threadid) would not matter I guess, the query planner is smart enough

InnoDB, how to detect the index types?

I have a table:
CREATE TABLE `posts` (
`post_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`forum_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`poster_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`icon_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`poster_ip` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '',
`post_time` int(11) unsigned NOT NULL DEFAULT '0',
`post_approved` tinyint(1) unsigned NOT NULL DEFAULT '1',
`post_reported` tinyint(1) unsigned NOT NULL DEFAULT '0',
`enable_bbcode` tinyint(1) unsigned NOT NULL DEFAULT '1',
`enable_smilies` tinyint(1) unsigned NOT NULL DEFAULT '1',
`enable_magic_url` tinyint(1) unsigned NOT NULL DEFAULT '1',
`enable_sig` tinyint(1) unsigned NOT NULL DEFAULT '1',
`post_username` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
`post_subject` blob,
`post_text` mediumtext COLLATE utf8_bin NOT NULL,
`post_checksum` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '',
`post_attachment` tinyint(1) unsigned NOT NULL DEFAULT '0',
`bbcode_bitfield` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
`bbcode_uid` varchar(8) COLLATE utf8_bin NOT NULL DEFAULT '',
`post_postcount` tinyint(1) unsigned NOT NULL DEFAULT '1',
`post_edit_time` int(11) unsigned NOT NULL DEFAULT '0',
`post_edit_reason` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
`post_edit_user` mediumint(8) unsigned NOT NULL DEFAULT '0',
`post_edit_count` smallint(4) unsigned NOT NULL DEFAULT '0',
`post_edit_locked` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`post_id`),
KEY `forum_id` (`forum_id`),
KEY `topic_id` (`topic_id`),
KEY `poster_ip` (`poster_ip`),
KEY `poster_id` (`poster_id`),
KEY `post_approved` (`post_approved`),
KEY `post_username` (`post_username`),
KEY `tid_post_time` (`topic_id`,`post_time`) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=22381 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
as you can see, the last index is "USING HASH" - but when I use show indexes from posts;, thats not showing it
After a quick Google search, I quickly found that InnoDB doesn't support HASH indexes, but still accepts the modifier in table definitions.
SHOW CREATE TABLE may show USING HASH, but SHOW INDEXES will actually show you what index type is being used:
Index_type
The index method used (BTREE, FULLTEXT, HASH, RTREE).

Mysql errno 150 cannot create buddies

I tired checking the relationship of the two tables, and matched everything up to see if they were using different engines. But for some reason I cannot create the "buddies" table:
DROP TABLE IF EXISTS `buddies`;
CREATE TABLE `buddies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`characterid` int(11) NOT NULL,
`buddyid` int(11) NOT NULL,
`pending` tinyint(4) NOT NULL DEFAULT '0',
`groupname` varchar(16) NOT NULL DEFAULT 'ETC',
PRIMARY KEY (`id`),
KEY `buddies_ibfk_1` (`characterid`),
CONSTRAINT `buddies_ibfk_1` FOREIGN KEY (`characterid`) REFERENCES `characters` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7998 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
DROP TABLE IF EXISTS `characters`;
CREATE TABLE `characters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accountid` int(11) NOT NULL DEFAULT '0',
`world` tinyint(1) NOT NULL DEFAULT '0',
`name` varchar(13) NOT NULL DEFAULT '',
`level` int(3) NOT NULL DEFAULT '0',
`exp` int(11) NOT NULL DEFAULT '0',
`str` int(5) NOT NULL DEFAULT '0',
`dex` int(5) NOT NULL DEFAULT '0',
`luk` int(5) NOT NULL DEFAULT '0',
`int` int(5) NOT NULL DEFAULT '0',
`hp` int(5) NOT NULL DEFAULT '0',
`mp` int(5) NOT NULL DEFAULT '0',
`maxhp` int(5) NOT NULL DEFAULT '0',
`maxmp` int(5) NOT NULL DEFAULT '0',
`meso` int(11) NOT NULL DEFAULT '0',
`hpApUsed` int(5) NOT NULL DEFAULT '0',
`job` int(5) NOT NULL DEFAULT '0',
`skincolor` tinyint(1) NOT NULL DEFAULT '0',
`gender` tinyint(1) NOT NULL DEFAULT '0',
`fame` int(5) NOT NULL DEFAULT '0',
`hair` int(11) NOT NULL DEFAULT '0',
`face` int(11) unsigned NOT NULL DEFAULT '0',
`faceMarking` int(11) NOT NULL DEFAULT '0',
`ap` int(11) NOT NULL DEFAULT '0',
`map` int(11) NOT NULL DEFAULT '0',
`spawnpoint` int(3) NOT NULL DEFAULT '0',
`gm` int(3) NOT NULL DEFAULT '0',
`party` int(11) NOT NULL DEFAULT '0',
`buddyCapacity` int(11) NOT NULL DEFAULT '25',
`createdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`guildid` int(10) unsigned NOT NULL DEFAULT '0',
`guildrank` tinyint(1) unsigned NOT NULL DEFAULT '5',
`allianceRank` tinyint(1) unsigned NOT NULL DEFAULT '5',
`guildContribution` int(11) NOT NULL DEFAULT '0',
`pets` varchar(13) NOT NULL DEFAULT '-1,-1,-1',
`sp` varchar(255) NOT NULL DEFAULT '0,0,0,0,0,0,0,0,0,0',
`subcategory` int(11) NOT NULL DEFAULT '0',
`rank` int(11) NOT NULL DEFAULT '1',
`rankMove` int(11) NOT NULL DEFAULT '0',
`jobRank` int(11) NOT NULL DEFAULT '1',
`jobRankMove` int(11) NOT NULL DEFAULT '0',
`marriageId` int(11) NOT NULL DEFAULT '0',
`familyid` int(11) NOT NULL DEFAULT '0',
`seniorid` int(11) NOT NULL DEFAULT '0',
`junior1` int(11) NOT NULL DEFAULT '0',
`junior2` int(11) NOT NULL DEFAULT '0',
`currentrep` int(11) NOT NULL DEFAULT '0',
`totalrep` int(11) NOT NULL DEFAULT '0',
`gachexp` int(11) NOT NULL DEFAULT '0',
`fatigue` tinyint(4) NOT NULL DEFAULT '0',
`charm` mediumint(7) NOT NULL DEFAULT '0',
`craft` mediumint(7) NOT NULL DEFAULT '0',
`charisma` mediumint(7) NOT NULL DEFAULT '0',
`will` mediumint(7) NOT NULL DEFAULT '0',
`sense` mediumint(7) NOT NULL DEFAULT '0',
`insight` mediumint(7) NOT NULL DEFAULT '0',
`totalWins` int(11) NOT NULL DEFAULT '0',
`totalLosses` int(11) NOT NULL DEFAULT '0',
`pvpExp` int(11) NOT NULL DEFAULT '0',
`pvpPoints` int(11) NOT NULL DEFAULT '0',
`rebirths` int(11) NOT NULL DEFAULT '0',
`prefix` varchar(45) DEFAULT NULL,
`reborns` int(11) NOT NULL DEFAULT '0',
`apstorage` int(11) NOT NULL DEFAULT '0',
`elf` int(11) NOT NULL DEFAULT '0',
`honourExp` int(11) NOT NULL DEFAULT '0',
`honourLevel` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `accountid` (`accountid`),
KEY `guildid` (`guildid`),
KEY `familyid` (`familyid`),
KEY `marriageId` (`marriageId`),
KEY `seniorid` (`seniorid`)
) ENGINE=InnoDB AUTO_INCREMENT=124 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
Well every time I execute above, I get:Error Code: 1005. Can't create table (errno: 150) 0.000 sec
Put the buddies last so it can reference characters.
http://sqlfiddle.com/#!2/b359c
Have you tried changing the order of the create tables? Buddies is trying to create a table with a foreign key constraint off of characters which may not exist yet.

MySQL syntax error I don't understand [duplicate]

This question already has answers here:
1064 error in CREATE TABLE ... TYPE=MYISAM
(5 answers)
Closed 9 years ago.
MySQL generated by a dump of a v3.23.58 database:
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`DATE` date NOT NULL default '0000-00-00',
`SECTION_ID` smallint(6) NOT NULL default '0',
`PRIORITY` int(11) NOT NULL default '0',
`AUTHOR1` int(100) NOT NULL default '1',
`AUTHOR2` varchar(100) NOT NULL default '',
`AUTHOR3` varchar(100) NOT NULL default '',
`AUTHOR4` varchar(100) NOT NULL default '',
`AUTHOR5` varchar(100) NOT NULL default '',
`AUTHOR6` int(100) NOT NULL default '0',
`AUTHOR7` int(100) NOT NULL default '0',
`AUTHOR8` int(100) NOT NULL default '0',
`AUTHOR9` int(100) NOT NULL default '0',
`AUTHOR10` int(100) NOT NULL default '0',
`AUTHOR_JOB` int(11) NOT NULL default '0',
`TITLE` varchar(100) NOT NULL default '',
`SUBHEAD` varchar(200) NOT NULL default '',
`TEXT` text NOT NULL,
`PULLQUOTE` text NOT NULL,
`SERIES` int(10) unsigned zerofill NOT NULL default '0000000000',
`TYPE` int(10) unsigned zerofill NOT NULL default '0000000000',
`VIEWS` int(10) unsigned zerofill NOT NULL default '0000000000',
`EMAILS` int(10) unsigned zerofill NOT NULL default '0000000000',
`BACKUPTEXT` text NOT NULL,
`BOWDOIN_VIEWS` int(10) unsigned zerofill NOT NULL default '0000000000',
PRIMARY KEY (`DATE`,`SECTION_ID`,`PRIORITY`),
FULLTEXT KEY `article_full_text` (`TITLE`,`TEXT`)
) TYPE=MyISAM;
Attempting to import it into a v5.5.19 database, I get this error:
[ERROR in query 2] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 28
I've tried deconstructing it to a very basis skeleton but still get the error. Ought to be an obvious mistake if you have the eye for it.
Your version of MySQL probably requires that you edit query
replace
TYPE=MyISAM
with
ENGINE=MyISAM
if you are importing from script file then just:
Open script file
Find TYPE=MyISAM
Replace with ENGINE=MyISAM
save
Then try .
change last line
) TYPE=MyISAM;
to
) ENGINE=MyISAM
so all would be
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`DATE` date NOT NULL default '0000-00-00',
`SECTION_ID` smallint(6) NOT NULL default '0',
`PRIORITY` int(11) NOT NULL default '0',
`AUTHOR1` int(100) NOT NULL default '1',
`AUTHOR2` varchar(100) NOT NULL default '',
`AUTHOR3` varchar(100) NOT NULL default '',
`AUTHOR4` varchar(100) NOT NULL default '',
`AUTHOR5` varchar(100) NOT NULL default '',
`AUTHOR6` int(100) NOT NULL default '0',
`AUTHOR7` int(100) NOT NULL default '0',
`AUTHOR8` int(100) NOT NULL default '0',
`AUTHOR9` int(100) NOT NULL default '0',
`AUTHOR10` int(100) NOT NULL default '0',
`AUTHOR_JOB` int(11) NOT NULL default '0',
`TITLE` varchar(100) NOT NULL default '',
`SUBHEAD` varchar(200) NOT NULL default '',
`TEXT` text NOT NULL,
`PULLQUOTE` text NOT NULL,
`SERIES` int(10) unsigned zerofill NOT NULL default '0000000000',
`TYPE` int(10) unsigned zerofill NOT NULL default '0000000000',
`VIEWS` int(10) unsigned zerofill NOT NULL default '0000000000',
`EMAILS` int(10) unsigned zerofill NOT NULL default '0000000000',
`BACKUPTEXT` text NOT NULL,
`BOWDOIN_VIEWS` int(10) unsigned zerofill NOT NULL default '0000000000',
PRIMARY KEY (`DATE`,`SECTION_ID`,`PRIORITY`),
FULLTEXT KEY `article_full_text` (`TITLE`,`TEXT`)
) ENGINE=MyISAM;

MySQL foreign key to another foreign key

The idea is quite simple: i have three (or more) tables
- master_tbl (id, something, somethingelse)
- tbl2 (id, ....)
- tbl3 (id, ....)
Now what i want is a foreign key relationship, such as tbl3.id would point to tbl2.id and tbl2.id would point to master_tbl.id - all foreign keys are ON UPDATE CASCADE and ON DELETE CASCADE. What I'll get from this is that when I delete a record from tbl2, its tbl3 equivalent will get erased as well, but not master_tbl. When I delete a record from master_tbl, all three tables get erased.
When I try to create the foreign key on tbl3.id->tbl2.id, I get mysql error 150 - can't create table (the tbl2.id->master_tbl.id is already created).
My MySQL version is 5.1.46. Any ideas why this might be?
EDIT: table definitions
smf_members aka master_table
-- Table "smf_members" DDL
CREATE TABLE `smf_members` (
`id_member` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`member_name` varchar(80) NOT NULL DEFAULT '',
`date_registered` int(10) unsigned NOT NULL DEFAULT '0',
`posts` mediumint(8) unsigned NOT NULL DEFAULT '0',
`id_group` smallint(5) unsigned NOT NULL DEFAULT '0',
`lngfile` varchar(255) NOT NULL DEFAULT '',
`last_login` int(10) unsigned NOT NULL DEFAULT '0',
`real_name` varchar(255) NOT NULL DEFAULT '',
`instant_messages` smallint(5) NOT NULL DEFAULT '0',
`unread_messages` smallint(5) NOT NULL DEFAULT '0',
`new_pm` tinyint(3) unsigned NOT NULL DEFAULT '0',
`buddy_list` text NOT NULL,
`pm_ignore_list` varchar(255) NOT NULL DEFAULT '',
`pm_prefs` mediumint(8) NOT NULL DEFAULT '0',
`mod_prefs` varchar(20) NOT NULL DEFAULT '',
`message_labels` text NOT NULL,
`passwd` varchar(64) NOT NULL DEFAULT '',
`openid_uri` text NOT NULL,
`email_address` varchar(255) NOT NULL DEFAULT '',
`personal_text` varchar(255) NOT NULL DEFAULT '',
`gender` tinyint(4) unsigned NOT NULL DEFAULT '0',
`birthdate` date NOT NULL DEFAULT '0001-01-01',
`website_title` varchar(255) NOT NULL DEFAULT '',
`website_url` varchar(255) NOT NULL DEFAULT '',
`location` varchar(255) NOT NULL DEFAULT '',
`icq` varchar(255) NOT NULL DEFAULT '',
`aim` varchar(255) NOT NULL DEFAULT '',
`yim` varchar(32) NOT NULL DEFAULT '',
`msn` varchar(255) NOT NULL DEFAULT '',
`hide_email` tinyint(4) NOT NULL DEFAULT '0',
`show_online` tinyint(4) NOT NULL DEFAULT '1',
`time_format` varchar(80) NOT NULL DEFAULT '',
`signature` text NOT NULL,
`time_offset` float NOT NULL DEFAULT '0',
`avatar` varchar(255) NOT NULL DEFAULT '',
`pm_email_notify` tinyint(4) NOT NULL DEFAULT '0',
`karma_bad` smallint(5) unsigned NOT NULL DEFAULT '0',
`karma_good` smallint(5) unsigned NOT NULL DEFAULT '0',
`usertitle` varchar(255) NOT NULL DEFAULT '',
`notify_announcements` tinyint(4) NOT NULL DEFAULT '1',
`notify_regularity` tinyint(4) NOT NULL DEFAULT '1',
`notify_send_body` tinyint(4) NOT NULL DEFAULT '0',
`notify_types` tinyint(4) NOT NULL DEFAULT '2',
`member_ip` varchar(255) NOT NULL DEFAULT '',
`member_ip2` varchar(255) NOT NULL DEFAULT '',
`secret_question` varchar(255) NOT NULL DEFAULT '',
`secret_answer` varchar(64) NOT NULL DEFAULT '',
`id_theme` tinyint(4) unsigned NOT NULL DEFAULT '0',
`is_activated` tinyint(3) unsigned NOT NULL DEFAULT '1',
`validation_code` varchar(10) NOT NULL DEFAULT '',
`id_msg_last_visit` int(10) unsigned NOT NULL DEFAULT '0',
`additional_groups` varchar(255) NOT NULL DEFAULT '',
`smiley_set` varchar(48) NOT NULL DEFAULT '',
`id_post_group` smallint(5) unsigned NOT NULL DEFAULT '0',
`total_time_logged_in` int(10) unsigned NOT NULL DEFAULT '0',
`password_salt` varchar(255) NOT NULL DEFAULT '',
`ignore_boards` text NOT NULL,
`warning` tinyint(4) NOT NULL DEFAULT '0',
`passwd_flood` varchar(12) NOT NULL DEFAULT '',
`pm_receive_from` tinyint(4) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id_member`),
KEY `member_name` (`member_name`),
KEY `real_name` (`real_name`),
KEY `date_registered` (`date_registered`),
KEY `id_group` (`id_group`),
KEY `birthdate` (`birthdate`),
KEY `posts` (`posts`),
KEY `last_login` (`last_login`),
KEY `lngfile` (`lngfile`(30)),
KEY `id_post_group` (`id_post_group`),
KEY `warning` (`warning`),
KEY `total_time_logged_in` (`total_time_logged_in`),
KEY `id_theme` (`id_theme`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8;
cyp_users aka tbl2
-- Table "cyp_users" DDL
CREATE TABLE `cyp_users` (
`id` mediumint(8) unsigned NOT NULL,
`role` varchar(255) NOT NULL DEFAULT 'unregistered',
PRIMARY KEY (`id`),
CONSTRAINT `cyp_users_ibfk_1` FOREIGN KEY (`id`) REFERENCES `smf_members` (`id_member`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
cyp_vip_users aka tbl3
-- Table "cyp_vip_users" DDL
CREATE TABLE `cyp_vip_users` (
`id` mediumint(8) NOT NULL,
`od` date NOT NULL,
`do` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
The ID's of tbl2 and tbl3 are different types.
Foreign Keys need to be of the same type.
tbl2.ID is UNSIGNED
tbl3.ID is SIGNED