1.建表时加上唯一性约束
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(18) NOT NULL unique,
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk
2.给已经建好的表加上唯一性约束
ALTER TABLE `t_user` ADD unique(`username`)
我机器上没有数据库,没验证这2个sql,不晓得行不行,大概是这样的吧。
有些人用程序来给数据做约束的,比如约束用户名,
DataSet ds = dao.queryForDataSet(connName,"select * from t_user where username=? and password=?",new Object[]{username,password},0,0,false)
if(ds.size()==1){
//登陆成功
}else if(ds.size()>1){
//冻结此账户,记录错误日志
}else{
//告知用户账号不存在或者密码错误
}
插入用户之前事先查询一下这个用户是否存在,可以用ajax做验证账号是否重复的效果,很多网站都是这么干的
外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on
update/on
delete子句,
innodb支持5种方式,
分列如下
.
cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
on
delete
cascade从mysql3.23.50开始可用
on
update
cascade从mysql4.0.8开始可用
.
set
null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not
null
on
delete
set
null从mysql3.23.50开始可用
on
update
set
null从mysql4.0.8开始可用
.
no
action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete *** 作
这个是ansi
sql-92标准,从mysql4.0.8开始支持
.
restrict方式
同no
action,
都是立即检查外键约束
不知道这文章对你有没有帮助!
假设一张表中含有 姓名,投递地址,邮编,这三字段。如果你确定在符合条件的查询结果中,这三个字段的值都是相同的:
select distinct 姓名,投递地址,邮编 from AA where ……
#----------------------另外一种情况-------------------------------
如果你想做的是一种统计工作可以用group by
例如:计算出每个投递段(假设用“邮编”区分)需要投递的邮件数量。
select 邮编,count(姓名) as 投递数量 from AA group by 邮编
注:在group by 子句中没有出现的字段,在做投影 *** 作时一定要在聚合函数中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)