怎样设置改变默认值1、2,只允许成功插入男、女??
ALTER TABLE `studentinfo` CHANGE COLUMN `sex` `sex` ENUM('男','女') NOT NULL DEFAULT '男' COMMENT '性别'
插入操作1、2后查询成功
insert into studentinfo(stuid,classid,sex) values("1214","2014001",1)
通常的做法是数据库不设限制,而是在UI层或是数据层进行限制。
如果是这样,那我性别也没必要设置成enum类型,反正代码中都得判断???
@slyvia230: 这么说也是对的。在数据库中设置,只是为了数据库设计人员或者维护人员的方便。
或者这么说吧,通常每一个编程的层面都是可以对数据或是逻辑进行控制,
程序员只是用自己的经验来判断,将逻辑设置在哪一层更为合适。
如果该层不提供相应的限制措施,则换另一层最合适的。
enum默认就是整数,不过貌似从0开始计数。
使用enum代替整数,只是为了可读性,没有其它的特别意义。
enum类型的变量只要是兼容类型(如整数)范畴内,可以赋值任何值,而不是只局限于enum定义的枚举值列表。
我试了下,整数1、2,字符“0”,“1”,“2”都行,1、2,“1”、“2”都是对应“男”,“女”,字符“0”插入后是空的。
那性别类型的约束是不是只能在代码中设置??
@slyvia230: 那可能就是enum的定义是正整数的原因了。比如,你用3、4、5之类的数据插入呢?
至于性别类的约束,这个可以通过数据库来约束,比如你定义成bool,比如你通过一个触发器来限制,比如某些数据库支持这样的限制。但是,一般来说,不要在数据库层做这个限制,而把这个限制转移到应用层。
@519740105: 性别现在分为:
男、女、双性、变性、不清楚、...
请问如何用Bool表示?
@爱编程的大叔: 还有无性、男变女性、女变男性
@519740105: 而且使用True表示男性,用False表示女性,这是对女性的不尊重,涉嫌性别歧视...
@519740105: 1、2是enum类型系统自定义数值,除1、2外整数都不行
@爱编程的大叔: 额。。。之前是用的bool类型。mysql中bool类型1和0,我设置1、0对应男女,只是这样的话在数据库操作时需要检查、转换
@爱编程的大叔: 大叔,思维不要这么活跃,眼界不要这么开阔啊
@slyvia230: 那就是MYSQL识别了enum,都不需要去额外限制就能达成通过数据库来限制数据内容的需求了。
至于1、2,是因为enum默认是整数,默认1开始,你只有两个性别也就只有1、2有效了(顺序号)。
从业务需求来说,这个设计对今后会有很大的负面影响,最好还是在应用系统中去控制,而不是在数据库系统中控制。
而且,既然你是这样的定义,从性能的角度来考虑,还不如用bool来标识。
@爱编程的大叔: 哦,不对,之前用的bit类型1、0
@519740105:嗯,谢谢您的回答。 bool标识数据操作时要判断、变值有点点麻烦,我还是用的enum,不过代码中添加了已经输入操作判断,较之bit类型,删了一部分代码。
谢谢你对enum类型的理解阐述
用bit类型
一开始就是用的bit,1、0表示男女,数据操作时需要判断、变值的地方太麻烦了。显示时1、0变男、女;添加、修改时输入的男、女还得变成数据库类型。不过现在都换了,还是用的enum,代码中只需要添加一个判断就行。