在弄毕设表的时候 遇到的各种想死问题

来源:互联网 发布:淘宝发货统计 编辑:程序博客网 时间:2024/04/30 02:01

非常呵呵地不想讲……

重新弄了一次毕设的表 然后就遇到了各种残疾问题

 

首先是 毕设的表这次 完全舍弃了外键 不想建

原本是有建外键的计划 但是后来感觉依旧太麻烦 就被我舍弃掉了

 

那下面就一一把纠结的问题列一遍

1、自增长

在MySQL中,自增长的关键字是AUTO_INCREMENT,如果需要指定自增长的起点值,CREATE TABLE XX()之后对AUTO_INCREMENT进行起点值的赋值

 

2、ENGINE = INNODB DEFAULT CHARSET = UTF8

指定引擎和字符集,默认引擎是MyISAM,但是MyISAM不支持事务,就被PASS掉了,最后选择了支持事务的INNODB

 

3、非聚集索引

这是让我纠结了比较久的事情,PRIMARY KEY在设定主键的同时直接指定了聚集索引,然,我需要一个除了聚集索引之外的唯一索引,就悲剧了,一开始查资料发现MySQL中索引是KEY,就很天真地这么写了“UserName VARCHAR(16) KEY”,然后遭遇了各种报错,各种忽略我

和SQL Server不同,MySQL的语法是这样的——“UNIQUE/INDEX IX_AccountsUser_UserName(UserName(16))”  索引类型 索引名(索引字段(字段长度))

相比SQL Server的语法 这个语法有点疼……

 

4、BIT类型

BIT不是1就是0 但是一般写值都是这么写的 b'1'

 

5、MySQL中的日期(建表最疼问题)
Birthday DATE DEFAULT'2012-01-01'

Birthday DATE DEFAULT '2012-01-01'

请对比上述区别——GOOD 一个空格的区别而已 然后 我在执行的时候导致了我各种报错 第二条我执行了千百遍都是报错 然后执行第一条 居然就OK了 BUT 后来更疼的是 在我把表完成 现在在写这篇文的时候 我尝试用第二条去执行 居然又千百遍地执行成功了

最后结论 请不要相信SQLyog……多执行几遍 总有能够吃的菜

 

5.1、没能实现的初始化

还是日期问题 在表结构里面 有三个地方是用到了日期类型的 一个是写入注册日期 一个是生日 最后一个是暂存的信息

先说注册日期和生日 原本的设计是 使用DATE类型 像SQL Server的getdate()一样 直接在插入记录的时候插入默认值 结果遭遇了这样的问题

——DATE类型不允许使用函数初始化(日期初始化函数CURDATE()或者CURDDENT_DATE())

其实在MySQL里面还有这样一个类型TIMESTAMP(时间戳)是日期类型并且可以用函数进行初始化

但是又存在了这样的问题 时间戳在新版本里面会舍弃指定的精确度 也就是 时间戳精确度达到秒级 暂存信息的可以使用到这个日期类型 但是 注册日期和生日则是完全没有精确到秒级的必要 于是 被我无情抛弃了

不过 发现一个很有趣的东西 TIMESTAMP 是MySQL里面一个很有特色的类型 其特色在于 当你指定了这个类型并且加上一句“ON UPDATE CURRENT_TIMESTAMP”的时候 往后每次对于某条记录进行修改时 TIMESTAMP类型的字段会被同步刷新为当前更新的日期

 

6、补充一点 NVARCHAR类型

在MySQL里面 我找不到这个类型……