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语句该怎么写?
...全文
5766 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复 1
具体插入什么值 完全可以在程序端控制 你只要设置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
  • 打赏
  • 举报
回复 1

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`)
)
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;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧