mysql新建表时如何限定字段值的范围?

Crytoll 2013-11-16 08:43:27
新建一个testUser表,包含字段如下:
user_id:int 编号自动增长的主键。
user_name: varchar(12) 用户名。
real_name: varchar(12) 姓名。
password: varchar(8) 密码。
sex: int 性别,只能是0或1.
degree: int 学历,只能是1,2,3或者4.
birthday: datetime 生日。

对应的SQL语句该怎么写?
...全文
3485 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iihero 2013-11-17
CREATE TABLE `testuser` ( `user_id` int(11) NOT NULL auto_increment, `user_name` varchar(12) NOT NULL default '', `real_name` varchar(12) NOT NULL default '', `password` varchar(8) NOT NULL default '', `sex` enum('0','1') NOT NULL default '0', `degree` enum('1','2','3','4') NOT NULL default '1', `birthday` datetime default NULL, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHAR 插入值时,直接上int
回复
rucypli 2013-11-17
具体插入什么值 完全可以在程序端控制 你只要设置sex和degree位tinyint类型即可 这样还可以保证扩展性
回复
ACMAIN_CHM 2013-11-17
create table dic_sex ( sex int primary key); insert into dic_sex values (1),(2); create table dic_degree( degree int primary key); insert into dic_degree values (1),(2),(3),(4); CREATE TABLE `testuser` ( `user_id` int(11) NOT NULL auto_increment, `user_name` varchar(12) NOT NULL default '', `real_name` varchar(12) NOT NULL default '', `password` varchar(8) NOT NULL default '', `sex` int references dic_sex(sex); `degree` int references dic_degree(degree); `birthday` datetime default NULL, PRIMARY KEY (`user_id`) )
回复
WWWWA 2013-11-17
用ENUM类型即可
回复
growning 2013-11-17

create table dic_sex ( sex int primary key);
insert into dic_sex values (1),(2);
create table dic_degree( degree int primary key);
insert into dic_degree values (1),(2),(3),(4);


CREATE TABLE `testuser` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(12) NOT NULL default '',
  `real_name` varchar(12) NOT NULL default '',
  `password` varchar(8) NOT NULL default '',
  `sex` int references dic_sex(sex),
  `degree` int references dic_degree(degree),
  `birthday` datetime default NULL,
  PRIMARY KEY  (`user_id`)
)
回复 1
Crytoll 2013-11-17
引用 4 楼 ACMAIN_CHM 的回复:
create table dic_sex ( sex int primary key);
insert into dic_sex values (1),(2);
create table dic_degree( degree int primary key);
insert into dic_degree values (1),(2),(3),(4);


CREATE TABLE `testuser` (
`user_id` int(11) NOT NULL auto_increment,
`user_name` varchar(12) NOT NULL default '',
`real_name` varchar(12) NOT NULL default '',
`password` varchar(8) NOT NULL default '',
`sex` int references dic_sex(sex);
`degree` int references dic_degree(degree);
`birthday` datetime default NULL,
PRIMARY KEY (`user_id`)
)

它会在`sex` int references dic_sex(sex)这一行报错
回复
kobe8free 2013-11-16
引用 1 楼 fire53 的回复:
CREATE TABLE `testuser` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(12) NOT NULL default '',
  `real_name` varchar(12) NOT NULL default '',
  `password` varchar(8) NOT NULL default '',
  `sex` enum('0','1') NOT NULL default '0',
  `degree` enum('1','2','3','4') NOT NULL default '1',
  `birthday` datetime default NULL,
  PRIMARY KEY  (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
是中好方法,可能插入数据的时候要注意了,sex 和degree 要当做 字符串来进行处理,他们的类型不是int的!
回复
王小葱 2013-11-16
CREATE TABLE `testuser` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(12) NOT NULL default '',
  `real_name` varchar(12) NOT NULL default '',
  `password` varchar(8) NOT NULL default '',
  `sex` enum('0','1') NOT NULL default '0',
  `degree` enum('1','2','3','4') NOT NULL default '1',
  `birthday` datetime default NULL,
  PRIMARY KEY  (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
回复
相关推荐
发帖
MySQL
创建于2007-09-28

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2013-11-16 08:43
社区公告
暂无公告