实验二讲评 … 张榆…
完成情况 未交实验报告 陈东旭 孔令晗 詹捷浩 田城宇 王党同 王灏 有两位同学抄袭别人的报告!
存在的问题 在图形界面中编辑表的数据时,需要回车来确认插 入(或修改)该行数据
建数据库(create database) sql语句 create database school; 查看master数据库的系统视图sys.databases
建表(create table) 创建“学生选课表”SCT sql语句: use school; create table SCT (ID int not null primary key identity(1,1), Sno varchar(5) not null, Cno varchar(3) not null, Tno varchar(4) not null, Grade decimal(5,1) null ); sql语句中存在的问题: 1、有少数同学忘了添加identity这个约束; 2、少数同学没有设定identity的(初始值,步长),这样系统会使用默认值,也就是本题的要求初始值和步长均为1;
建表(create table) 查看school数据库的系统视图 sys.tables sys.columns sys.indexes
建表(create table) 查看school数据库的系统视图 sys.key_constraints sys.identity_columns sys.objects
添加约束(add constraint) 为表SCT的属性列Sno,Cno,Tno分别添加外键约束 sql语句: use school; alter table SCT add constraint sno_foreignkey foreign key (Sno) references Student(Sno); add constraint cno_foreignkey foreign key (Cno) references Course(Cno); add constraint tno_foreignkey foreign key (Tno) references Teacher(Tno); 该类sql语句存在的问题: 1、在添加约束条件的时候没有为约束起名,这样的话,在当我们需要删除该约束的时候,就无法使用sql来删除该约束了(在后面详述); 2、以分号“;”来标识一条sql语句的结束,在这个例子中,如果忘了在每个sql语句后面添加分号的话,那么在执行的时候实惠报错的
添加约束(add constraint) 为表SCT的属性列Sno,Cno,Tno分别添加外键约束 sql语句: use school; alter table SCT add constraint sno_foreignkey foreign key (Sno) references Student(Sno); add constraint cno_foreignkey foreign key (Cno) references Course(Cno); add constraint tno_foreignkey foreign key (Tno) references Teacher(Tno); 该类sql语句存在的问题: 1、在添加约束条件的时候没有为约束起名,这样的话,在当我们需要删除该约束的时候,就无法使用sql来删除该约束了(在后面详述); 2、以分号“;”来标识一条sql语句的结束,在这个例子中,如果忘了在每个sql语句后面添加分号的话,那么在执行的时候实惠报错的
添加约束(add constraint) 为表SCT的属性列Sno,Cno,Tno分别添加外键约束 sql语句: use school; alter table SCT add constraint sno_foreignkey foreign key (Sno) references Student(Sno); add constraint cno_foreignkey foreign key (Cno) references Course(Cno); add constraint tno_foreignkey foreign key (Tno) references Teacher(Tno); 该类sql语句存在的问题: 1、在添加约束条件的时候没有为约束起名,这样的话,在当我们需要删除该约束的时候,就无法使用sql来删除该约束了(在后面详述); 2、以分号“;”来标识一条sql语句的结束,在这个例子中,如果忘了在每个sql语句后面添加分号的话,那么在执行的时候将会报错的
添加约束(add constraint) 查看school数据库的系统视图 sys.foreign_keys
删除表 (delete table) 删除表Course 可能的sql语句: use school; drop table Course; 执行结果: use school; drop table Course;
删除表 (delete table) 删除表Course 可能的sql语句: use school; drop table Course; 执行结果: 正确的sql语句: use school; drop table Course; use school; alter table SCT drop constraint cno_foreignkey; drop table Course;
删除数据库(delete database) 删除数据库school 可能的sql语句: 执行结果: drop database school; 注意:删除表和数据库的操作都要求通过sql语句来完成;
删除数据库(delete database) 删除数据库school 可能的sql语句: 执行结果: 出错原因: 所打开的sql语句执行窗口是在school数据库的环境下打开的,因此该 语句是在数据库school环境下执行的! drop database school; 注意:删除表和数据库的操作都要求通过sql语句来完成;
删除数据库(delete database) 方法一: 在sql语句中通过语句“use master;”来表明在系统数据库master环境下 执行删除数据看school的sql语句; 方法二: 选中系统数据库master; 在该环境下打开sql语句执行窗口,并执行sql语句(如下); use master; drop database school; 注意:删除表和数据库的操作都要求通过sql语句来完成; drop database school;
sql语句执行流程(伪码) sql语句: DDL处理流程(DDL解释器) CREATE TABLE test (id int , name varchar(10) ); 写出主要的执行步骤即可,即它是如何从提交的sql语句中提取出有效的表名、列名等信息,并写入相关的系统表或系统视图中的,例如……
sql语句执行流程(伪码) DDL处理流程(DDL解释器): interpret(sql) { t_name = extract_table_name(sql); if(validate_table_name(t_name)) insert_into_dict(sys.objects, t_name); insert_into_dict(sys.tables, t_name); col_name_and_datatype = extract_col_info(sql); while(col_name_and_datatype != NULL) insert_into_dict(sys.columns, col_name_and_datatype); }
sql语句执行流程(伪码) DDL处理流程(DDL解释器): interpret(sql) { t_name = extract_table_name(sql); if(validate_table_name(t_name)) insert_into_dict(sys.objects, t_name); insert_into_dict(sys.tables, t_name); col_name_and_datatype = extract_col_info(sql); while(col_name_and_datatype != NULL) insert_into_dict(sys.columns, col_name_and_datatype); }
sql语句执行流程(伪码) DDL处理流程(DDL解释器): interpret(sql) { t_name = extract_table_name(sql); if(validate_table_name(t_name)) insert_into_dict(sys.objects, t_name); insert_into_dict(sys.tables, t_name); col_name_and_datatype = extract_col_info(sql); while(col_name_and_datatype != NULL) insert_into_dict(sys.columns, col_name_and_datatype); }
sql语句执行流程(伪码) DDL处理流程(DDL解释器): interpret(sql) { t_name = extract_table_name(sql); if(validate_table_name(t_name)) insert_into_dict(sys.objects, t_name); insert_into_dict(sys.tables, t_name); col_name_and_datatype = extract_col_info(sql); while(col_name_and_datatype != NULL) insert_into_dict(sys.columns, col_name_and_datatype); }
实验之星 刘力 王金予 岳茜 陆雪妤
THANK YOU !