数据库设计学习中.....

7 篇文章 0 订阅

错误代码

CREATE TABLE 成绩(学号 char(10), 课号 char(30), 成绩 int, PRIMARY KEY (学号课号), 

FOREIGN KEY (学号), REFERENCES 学生 ON DELETE CASCADE, FOREIGN KEY (课号), 

REFERENCES 课程 ON DELETE RESTRICT); 

修改为:

CREATE TABLE 成绩(学号 char(10), 课号 char(30), 成绩 int, PRIMARY KEY (学号课号), 
FOREIGN KEY (学号) REFERENCES 学生(学号)on delete cascade, 
FOREIGN KEY (课号) REFERENCES 课程(课号) on delete cascade); 

LZ所写的语法有点问题,FOREIGN KEY后面多了个逗号,REFERENCES 后面只有表名,没有指定关联表的主键列。 主要问题出在ON DELETE CASCADE这样的级联删除约束子句上面。 

上面的语法估计在SQL SERVER上面是没有问题的。但是在ACCESS 2003等环境中就会有“constraint 子句语法错误”的提示。那是因为在不同的SQL环境中,支持的语法标准也是有差异的。 

不过,可以在ACCESS中,工具菜单中“选项”中,设置语法兼容性即可。具体见下图:
 



更进一步分析:
reate table 学生(学号 char(10) ,姓名 char(10), 性别 char(2),primary key (学号));
create table 课程(课号 char(10),课程名 char(10),课时 int,学分 int),primary key (课号));
create table 成绩(学号 char(10),课号 char(10),成绩 int,primary key(学号,课号),foreign key(学号) references 学生 on delete cascade,foreign key(课号) references 课程 on delete restrict);

对成绩这张表的要求是 
当 从学生这张表中删除一条记录时,从成绩表中也删除对应学号的记录,
当 从课程这种表中删除一条记录时,如果成绩表中已经有有对应课号的记录,将不能删除。

教程里面给的语句的例子就是上面的三条,可是我在SQL2000里输入相同的语句却出现错误,

前两条语句都可以通过
第三条提示错误 “在关键字 'restrict' 附近有语法错误。”

我不知道为什么会出现个错误,是restrict语法不对吗?在SQL2000的联机丛书中也没有找到

还有正确的语句应该怎么写啊?


这个问题第1个回答:
on delete  CASCADE 

??

这个
这个问题第2个回答:
引用 1 楼 happyflystone 的回复:
on delete  CASCADE
??
这个


我看的教程里面  就是 把学生表中的学号 作为成绩表中学号的外键 用“on delete cascade”做约束,当从学生表中删除一条记录时,系统会自动从成绩表中删除与学生表中学号相同的记录


这个问题第3个回答:
是,这个级联删除
这个问题第4个回答:
可我问的是:

前两条语句都可以通过
第三条提示错误 “在关键字 'restrict' 附近有语法错误。”

我不知道为什么会出现个错误,是restrict语法不对吗?在SQL2000的联机丛书中也没有找到

还有正确的语句应该怎么写啊?


囧。。。。
这个问题第5个回答:
t-sql没有restrict

联机丛书是这样的.
 ON DELETE { NO ACTION  ¦ CASCADE  ¦ SET NULL  ¦ SET DEFAULT } ]


[ ON UPDATE { NO ACTION  ¦ CASCADE  ¦ SET NULL  ¦ SET DEFAULT } ]

这个问题第6个回答:
不用加on delete

默认情况下是会出错的.
这个问题第7个回答:
ss
这个问题第8个回答:
谢谢 liangCK


案例一个:

学生信息管理系统库
create database 学生信息管理系统
学生个人信息表
create table 学生个人信息
(
学号 char(10) primary key,
姓名 char(20) not null,
性别 char(4) not null,
出生年月 datetime not null,
籍贯 char(30),
所在系 char(10),
班级 char(15),
专业 char(10),
constraint sex check(性别 in('男','女')),
)
开设课程信息
create table 开设课程信息
(
课程代码 char(6) primary key,
课程名称 char(20) not null,
学分 int,
)
选课信息
create table 选课信息
(
学生学号 char(10),
课程代码 char(6),
成绩 int,
constraint grade check(成绩 between 0 and 100),
constraint 学号_课程 primary key(学生学号,课程代码),
constraint 学号_选课 foreign key(学生学号) references 学生个人信息(学号),
constraint 课号_选课 foreign key(课程代码) references 开设课程信息(课程代码),
)
学院奖励信息
create table 学院奖励信息
(
学生学号 char(10) not null,
奖励编号 char(6) not null,
奖励名称 char(10) not null,
奖励级别 char(4),
奖励数额 int,
constraint 奖励主码 primary key(学生学号,奖励编号),
constraint 学号_奖励 foreign key(学生学号) references 学生个人信息(学号),
)
学生职务信息
create table 学生职务信息
(
学生学号 char(10) not null,
职务编号 char(6) not null,
职务名称 char(15) not null,
职务级别 char(4),
职责范围 char(10),
constraint 职务主码 primary key(学生学号,职务编号),
constraint 学号_职务 foreign key(学生学号) references 学生个人信息(学号),
)
学院信息
create table 学院信息
(
学院编号 char(6) primary key,
学院名称 char(30) not null,
地址 char(40),
类型 char(10),
联系电话 char(15),
)
学院系信息
create table 学院系信息
(
系代号 char(6) primary key,
系名称 char(10) not null,
系办公室 char(5),
联系电话 char(15),
学院编号 char(6),
constraint 系外码 foreign key(学院编号) references 学院信息(学院编号),
)
专业信息
create table 专业信息
(
专业代码 char(6) primary key,
专业名称 char(10) not null,
所属系别 char(10),
)





继续.......



创建表格
create table 教师(编号 char(10),姓名 char(10) not null,性别 char(2),年龄 int,职称 char(10),primary key(编号));
create table 学生(学号 char(10),姓名 char(10) not null,性别 char(2),年龄 int,primary key(学号));
create table 课程(课号 char(10),课程名 char(30) not null,学时 int,学分 int,primary key(课号));
create table 成绩(学号 char(10),课号 char(10),成绩 int,primary key(学号,课号),
foreign key(学号) references 学生 on delete cascade,
foreign key(课号) references 课程 on delete   cascade);

修改表格
alter table 学生 add 家庭住址 char(20);
alter table 学生 add 系别 char(20);
drop table   成绩 ;
alter table 表名 add primary key;
alter table 表名 drop primary key;
alter table 表名 add foreign key 列 references表名2;
alter table 表名 drop foreign key;

create index unique 学生索引 on 学生(学号 desc, 姓名 asc);
drop index 学生索引;

select * from 表 where 查询条件
select * from 学生;
select 学号,姓名,年龄,性别 from 学生;
select 职称 from 教师;
select distinct 职称 from 教师;
select * from 教师 where 年龄>30 AND 职称!='讲师';

比较运算符: = != > < >= <= <>
特殊运算符
Between...and   in   like
select 姓名 from 教师 where 年龄 between 30 and 40;
select 姓名 from 教师 where 年龄>=30 and 年龄<=40;
select * from 教师 where 职称 in('教授','副教授');

not and or
select * from 教师 where 年龄>30 AND 职称!='讲师';
select 姓名 from 教师 where 职称='教授' or 职称='副教授';

%代表多个字符
_代表单个字符

select * from 教师 where 姓名   like '王%';
select * from 教师 where 编号 not like '___6';
select * from 教师 where 姓名 in not null;

条件查询的优先级

查询结果排序
order by   asc/desc
select * from 教师 order by 编号 asc;
select * from 教师 order by 姓名,编号 desc;

group by,having子句
组函数count,AVG,SUM,MIN,MAX

select count(*) from 教师;
select count(distinct 职称) from 教师;
select avg(年龄) from 教师 where 职称='教授';

select 职称,count(*) from 教师 group by 职称;
select 性别,AVG(年龄) from 教师 group by 性别;

having 限制group by
select 职称,count(*) from 教师 group by 职称 
having count(*)>1;

与where混合使用
select 职称,count(*) from 教师 where 年龄>30
group by 职称 having count(*)>1;

group by分组唯一性
select 职称,编号 from 教师 group by 职称;

连接查询(从几个表查询)
相等连接 非相等连接 自身连接 非匹配连接(外连接)



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值