您的位置:首页 > 数据库

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

2011-08-06 15:13 423 查看
错误代码

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 职称;

连接查询(从几个表查询)

相等连接 非相等连接 自身连接 非匹配连接(外连接)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: