Mysql 什么';s对于成员数据库更好?
您好,谢谢您阅读我的帖子,我在学习mysql数据库时遇到了一些问题。 现在我已经设置好了,但最近,我有另一个人告诉我,如果我打算有很多成员,我的成员表是缓慢和无用的 我已经看过很多次了,也做过一些谷歌搜索,但我没有发现它有什么问题,也许是因为我是新手吧?你们中的一位sql专家能否仔细检查一下,并告诉我它有什么问题:)Mysql 什么';s对于成员数据库更好?,mysql,database,Mysql,Database,您好,谢谢您阅读我的帖子,我在学习mysql数据库时遇到了一些问题。 现在我已经设置好了,但最近,我有另一个人告诉我,如果我打算有很多成员,我的成员表是缓慢和无用的 我已经看过很多次了,也做过一些谷歌搜索,但我没有发现它有什么问题,也许是因为我是新手吧?你们中的一位sql专家能否仔细检查一下,并告诉我它有什么问题:) 这将是一个游戏常见问题解答/提示的网站,我确实希望以后能有很多会员,但我想我会要求确保一切正常,然后再次和平。我不认为它一定很慢,但我确实注意到,在使用varchar的所有其他文本
这将是一个游戏常见问题解答/提示的网站,我确实希望以后能有很多会员,但我想我会要求确保一切正常,然后再次和平。我不认为它一定很慢,但我确实注意到,在使用
varchar
的所有其他文本字段中,密码字段使用了longtext
。这似乎是要将密码存储在数据库中--不要这样做强>
始终获取用户密码的固定长度加密哈希(例如,使用SHA-1或SHA-2),并将其放入数据库。这样,如果您的数据库服务器被破坏,用户的密码就不会暴露。我认为这并不一定慢,但我确实注意到,在您使用
varchar
的所有其他文本字段中,您使用了longtext
作为密码字段。这似乎是要将密码存储在数据库中--不要这样做强>
始终获取用户密码的固定长度加密哈希(例如,使用SHA-1或SHA-2),并将其放入数据库。这样,如果您的数据库服务器被破坏,用户的密码就不会暴露。除了@Delan所说的,我注意到了
JoinedOn
列在更新当前时间戳时定义为。如果只需要维护加入日期,则不应在更新记录时更新字段
IPAddress
列是VARCHAR(80)
。如果存储IPv4类型的IP地址,这将太长李>
“”
)作为非空列的默认值
。如果目的是在字段上有一个值(而不是'
),则不好
“”
)作为唯一字段的默认值
。如果您的意图是拥有唯一的值(而不是'
),则这与强制执行的约束相矛盾
除了@Delan所说的之外,我注意到:
JoinedOn
列在更新当前时间戳时定义为。如果只需要维护加入日期,则不应在更新记录时更新字段
IPAddress
列是VARCHAR(80)
。如果存储IPv4类型的IP地址,这将太长李>
“”
)作为非空列的默认值
。如果目的是在字段上有一个值(而不是'
),则不好
“”
)作为唯一字段的默认值
。如果您的意图是拥有唯一的值(而不是'
),则这与强制执行的约束相矛盾
另一个人是否解释了为什么他们认为这是缓慢和无用的 以下是一些我认为可以改进的地方:
电子邮件
应该更长一些——从我的头顶上看,320应该足够长,可以容纳大多数电子邮件地址,但你可能想查一下
如果int(1)
字段是简单的开/关字段,那么它们可以是tinyint(1)
或bool
正如@cularis指出的,ipaddress
字段可能不是合适的类型<对于IPv4,code>INT UNSIGNED优于varchar。您可以使用和进行转换。见:
正如@Delan Azabani指出的,您的
密码
字段对于存储的值来说太长。MD5生成一个32个字符的字符串,因此varchar(32)
就足够了。您可以切换到更安全的SHA2,并使用MySQL函数
研究使用数据库引擎而不是MyISAM。它提供外键约束、行级锁定和事务等功能。请看。另一个人是否解释了为什么他们认为这是缓慢和无用的 以下是一些我认为可以改进的地方:
电子邮件
应该更长一些——从我的头顶上看,320应该足够长,可以容纳大多数电子邮件地址,但你可能想查一下
如果int(1)
字段是简单的开/关字段,那么它们可以是tinyint(1)
或bool
正如@cularis指出的,ipaddress
字段可能不是合适的类型<对于IPv4,code>INT UNSIGNED优于varchar。您可以使用和进行转换。见:
正如@Delan Azabani指出的,您的
密码
字段对于存储的值来说太长。MD5生成一个32个字符的字符串,因此varchar(32)
就足够了。您可以切换到更安全的SHA2,并使用MySQL函数
研究使用数据库引擎而不是MyISAM。它提供外键约束、行级锁定和事务等功能。请参阅。您使用
ipaddress
字段的目的是什么?我使用它有几种不同的功能,一种是将其与数据库中存储的已准备就绪的功能进行检查,因此如果不匹配,它们将达到5“try”登录页面上的限制将自动禁止它们。您使用ipaddress
字段做什么?我使用它有几种不同的功能,一种是将其与数据库中存储的已准备就绪的功能进行检查,因此如果不匹配,并且它们达到登录页面上的5“try”限制,它将自动禁止它们。嗨,是的,我正在存储pa
--
-- Table structure for table `members`
--
CREATE TABLE IF NOT EXISTS `members` (
`userid` int(9) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL DEFAULT '',
`password` longtext,
`email` varchar(80) NOT NULL DEFAULT '',
`gender` int(1) NOT NULL DEFAULT '0',
`ipaddress` varchar(80) NOT NULL DEFAULT '',
`joinedon` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`acctype` int(1) NOT NULL DEFAULT '0',
`acclevel` int(1) NOT NULL DEFAULT '0',
`birthdate` date DEFAULT NULL,
`warnings` int(1) NOT NULL DEFAULT '0',
`banned` int(1) NOT NULL DEFAULT '0',
`enabled` int(1) NOT NULL DEFAULT '0',
`online` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`userid`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `emailadd` (`emailadd`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
--
-- Dumping data for table `members`
--