有这样一个需求 :建三张表,一张是用户表users,一张是权限表privileges,另一张是用户及其对应的权限表 userprivileges。
1,users表
create table users(
id int primary key auto_increment,
username varchar(40),
password varchar(40)
);
2,privileges表
create table privileges(
id int primary key auto_increment,
name varchar(40)
);
3,userprivileges表
如何将多张表联系起来呢,就要用到外键foreign key,并且使用primary key防止重复数据。
create table userprivilege(
user_id int ,
privilege_id int,
foreign key(user_id) references users(id),
foreign key(privilege_id) references privileges(id),
primary key(user_id,privilege_id)
);
我们可以试着插入在前两张基本表中没有的id值,管理器会立即报错。
4,在web项目中需要判断用户是否有权限时可以通过
String sql = "SELECT privileges.name
FROM users,PRIVILEGES,userprivilege
WHERE users.id=userprivilege.user_id
AND privileges.id=userprivilege.privilege_id //两个=消除了笛卡尔集
AND users.id=?";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
List<Object> pnames = runner.query(sql,new ColumnListHandler(), user.getId()); //list返回的是权限集合