实验七创建和操作数据库对象
计算机基础实验报告(第七次)
完成实验内容,提交实验结果如下:
一、
截图方法:按键盘PrtSc键,将光标定位在放置图片的位置,再按Ctr+V键。若图片太大,可将图片复制到Windows附件“画图”软件中进行裁剪处理。
1,
2,
3,
4,
5,
6,
7,
8,
二、提交
1.独立并按时完成作业,否则本次作业无效。
2.登录ftp://10.20.250.250,用户名和密码均为lqx,将作业提交到“提交实验三”文件夹中。
图A-23输入参数对话框图A-24参数查询运行结果
图A-25“学生成绩查询”的设计视图
4.创建窗体:
(1)使用自动窗体功能创建一个如图A-26所示的显示课程基本情况的纵栏式窗体“浏览课程信息”。
图A-26新建窗体对话框
(2)用窗体向导创建如图A-27所示的带有子窗体的窗体,主窗体名为“浏览学生信息及成绩”,子窗体名为“成绩子窗体”。
(4)建立表间关系,关系如下图A-22。
图A-22学生成绩管理数据库表间关系
3.创建查询:
(1)用向导创建一个选择查询“学生基本信息”,包括学生信息表中的学号、姓名、性别、班级字段。
(2)用设计视图建立一个名为“不及格”的选择查询,查询所有不及格学生的学号、姓名、课程名称和成绩。
(3)用设计视图创建一名为“学生成绩查询”的参数查询,包含字段:学号,姓名、课程、成绩。当运行该查询时,弹出如图A-23所示的对话框,输入数据“宋丝丝”,按确定按钮,则弹出如图A-24所示的运行结果。其设计视图如图A-25所示。
图A-30学生报表
(3)在设计视图中自行设计如图A-31所示的报表“不及格学生名单”。
图A-31“不及格学生名单”报表
实验7数据库操作技术实验步骤
实验七数据库操作技术实验步骤1、新建数据库StaffDataBase2、新建数据表设置主键3、新建职工信息操作窗口(1)添加bindingNavigator控件,添加三个toolStripButton,命名为“添加”、“修改”、“删除”(2)把DisplayStyle属性值改成ImageAndText(3)添加dataGridView(4)得到完整窗口4.新建职工信息编辑窗口5、1)定义一个数据库连接类完成连接类,代码如下(导入包using System.Data.SqlClient);):using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;namespace WindowsFormsApplication2{class DataBaseLink{public string strConn = "Data Source=cc-PC\sqlexpress;InitialCatalog=StaffDataBase;Integrated Security=True"; /*链接字符串*/public SqlConnection DataLink(){SqlConnection con = new SqlConnection(strConn); /*/实例化连接对象*/return con; /*返回链接对象*/}}}6.新建接口InterfaceDataAccessing完成接口类,代码为(导入包using System.Data);):using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace WindowsFormsApplication2{interface InterfaceDataAccessing{void Add(String[] st); /*添加数据到数据库,参数接受信息*/void Updata(String[] st, string id); /*更新数据,参数1接收修改的信息,参数2修改条件*/ void Delete(string id); /* 删除数据,参数删除条件*/DataSet GetData(string st);/*查询数据,参数为查询条件*/}}7.添加职工类去继承接口:对职工类去继承接口并进行操作方法的编写为:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication2{class Staff{DataBaseLink db = new DataBaseLink();/*实例化类的对象*/public void Add(String[] st){using (SqlConnection con = db.DataLink()) /* 返回连接*/{if (con.State == ConnectionState.Closed)/*若数据库状态为关则打开*/ {con.Open();}try{string sql = "Insert into Staff(bh,xm,xb,byxy,xl,xw,gzbm,lxdz,yxdz,zz) Values(@bh,@xm,@xb,@byxy,@xl,@xw,@gzbm,@lxdz,@yxdz,@zz)";//查询语句同学也可以参考教材上的例子编写查询语句,所以字段,所有的值SqlCommand cmd = new SqlCommand(sql, con);/*创建查询命令对象,参数1查询语句,参数2连接对象*/SqlParameter p1 = new SqlParameter("@bh", st[0]);/*结构化查询参数,参数1值变量,参数2,值的具体内容*/SqlParameter p2 = new SqlParameter("@xm", st[1]);SqlParameter p3 = new SqlParameter("@xb", st[2]);SqlParameter p4 = new SqlParameter("@byxy", st[3]);SqlParameter p5 = new SqlParameter("@xl", st[4]);SqlParameter p6 = new SqlParameter("@xw", st[5]);SqlParameter p7 = new SqlParameter("@gzbm", st[6]);SqlParameter p8 = new SqlParameter("@lxdz", st[7]);SqlParameter p9 = new SqlParameter("@yxdz", st[8]);SqlParameter p10 = new SqlParameter("@zz", st[9]);cmd.Parameters.Add(p1);/*把新创建的对象添加到*/cmd.Parameters.Add(p2);cmd.Parameters.Add(p3);cmd.Parameters.Add(p4);cmd.Parameters.Add(p5);cmd.Parameters.Add(p6);cmd.Parameters.Add(p7);cmd.Parameters.Add(p8);cmd.Parameters.Add(p9);cmd.Parameters.Add(p10);cmd.ExecuteNonQuery();//执行查询命令MessageBox.Show("信息添加成功!");}catch (Exception ex)//异常放到ex中{MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);}finally/*不管连接对象状态是否关闭,都执行关闭连接*/{if (con.State == ConnectionState.Open){con.Close();con.Dispose();/*释放连接对象*/}}}}public DataSet GetData(string st) /*定义方法,返回类型数据集,参数为查询条件*/{DataSet ds = new DataSet("Staff");if(st==null)/*判断查询条件是否为空,全查询*/{using (SqlConnection con = db.DataLink())/*返回连接对象*/{if (con.State == ConnectionState.Closed){con.Open();}try{string sql = "Select * From Staff";/*查询语句*/SqlDataAdapter sqlda = new SqlDataAdapter(sql,con);/*新建查询适配器,参数1查询语句,参数2连接对象*/sqlda.Fill(ds);/*执行查询并填充*/}catch (Exception ex){MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);}finally{if (con.State == ConnectionState.Open){con.Close();con.Dispose();}}}}return ds;}public void Delete(string id) /*定义删除方法,返回值类型为空,参数为删除条件*/{using (SqlConnection con = db.DataLink())/*使用连接对象,定义连接变量,返回连接对象*/{if (con.State == ConnectionState.Closed){con.Open();}try{string sql = "Delete From Staff Where bh=" + "'"+id+"'";/*定义查询语句*/SqlCommand comd = new SqlCommand(sql,con);/*创建新的命令对象,参数1删除命令,参数2为连接对象*/comd.ExecuteNonQuery();//执行指令}catch (Exception ex){MessageBox.Show("错误:" + ex.Message, "错误提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Error);}finally{if (con.State == ConnectionState.Open){con.Close();con.Dispose();}}}}public void Updata(String[] st,string id) /*定义更新数据方法,参数1修改内容,参数2修改条件*/{using (SqlConnection con = db.DataLink())/*使用连接对象,定义连接变量,变量接受返回的连接对象*/{if (con.State == ConnectionState.Closed){con.Open();}try{string sql = "Update Staff setbh=@bh,xm=@xm,xb=@xb,byxy=@byxy,xl=@xl,xw=@xw,gzbm=@gzbm,lxdz=@lxdz,yxdz=@yxdz,zz=@zz where bh='"+id+"'";SqlCommand cmd = new SqlCommand(sql, con);/* 创建查询命令对象,参数1查询语句,参数2连接对象*/SqlParameter p1 = new SqlParameter("@bh", st[0]); ;SqlParameter p2 = new SqlParameter("@xm", st[1]); /*结构化查询参数,参数1值变量,参数2值的具体内容*/SqlParameter p3 = new SqlParameter("@xb", st[2]);SqlParameter p4 = new SqlParameter("@byxx", st[3]);SqlParameter p5 = new SqlParameter("@xl", st[4]);SqlParameter p6 = new SqlParameter("@xw", st[5]);SqlParameter p3 = new SqlParameter("@gzbm", st[6]);SqlParameter p4 = new SqlParameter("@lxdz", st[7]);SqlParameter p5 = new SqlParameter("@yxdz", st[8]);SqlParameter p6 = new SqlParameter("@zz", st[9]);cmd.Parameters.Add(p1); /*把新创建的对象添加到数据集和中*/cmd.Parameters.Add(p2);cmd.Parameters.Add(p3);cmd.Parameters.Add(p4);cmd.Parameters.Add(p5);cmd.Parameters.Add(p6);cmd.Parameters.Add(p7);cmd.Parameters.Add(p8);cmd.Parameters.Add(p9);cmd.Parameters.Add(p10);cmd.ExecuteNonQuery();/*执行指令*/}catch (Exception ex){MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);}finally{if (con.State == ConnectionState.Open){con.Close();con.Dispose();/*释放连接对象*/}}}}}}8.编写StaffFrom窗口的相关程序代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication2{public partial class StaffFrom : Form{private BindingSource bindingSource = new BindingSource();/*Bindingsource是显示控件与数据集中的数据表的中间层*/Staff std = new Staff();/*创建学生对象*/public StaffFrom(){InitializeComponent();DataBinding();/*方法,实现数据绑定*/}private void toolStripButton1_Click(object sender, EventArgs e){Form1 form1 = new Form1("xz", null);form1.ShowDialog();DataBinding();}public void DataBinding() /*定义方法*/{DataSet ds = std.GetData(null);bindingSource.DataSource = ds.Tables[0];bindingNavigator1.BindingSource = bindingSource;dataGridView1.DataSource = bindingSource;}private void toolStripButton2_Click(object sender, EventArgs e){DataGridViewRow dataRow = dataGridView1.SelectedRows[0];if (dataRow ==null ){MessageBox.Show("请选中要修改的数据!", "提示");}else{Form1 form = new Form1("xg", dataRow);form.ShowDialog();DataBinding();}}private void toolStripButton3_Click_1(object sender, EventArgs e){DialogResult dia = MessageBox.Show("你确实要删除此记录吗", "确认删除", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);if (dia == DialogResult.OK){DataGridViewRow dataRow = dataGridView1.SelectedRows[0];std.Delete(dataRow.Cells[0].Value.ToString());DataBinding();}}}}完整窗口为:9.编写From1窗口的相关程序代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication2{public partial class Form1 : Form{string str;string id;public Form1(string str,DataGridViewRow dgvr){InitializeComponent();this.str = str;if(str == "xg"){button1.Text = "修改";textBox1.Text = dgvr.Cells[0].Value.ToString(); textBox2.Text = dgvr.Cells[1].Value.ToString(); textBox3.Text = dgvr.Cells[2].Value.ToString(); textBox4.Text = dgvr.Cells[3].Value.ToString(); textBox5.Text = dgvr.Cells[4].Value.ToString(); textBox6.Text = dgvr.Cells[5].Value.ToString(); textBox7.Text = dgvr.Cells[6].Value.ToString(); textBox8.Text = dgvr.Cells[7].Value.ToString(); textBox9.Text = dgvr.Cells[8].Value.ToString(); textBox10.Text = dgvr.Cells[9].Value.ToString(); id = dgvr.Cells[0].Value.ToString();textBox1.Enabled = false;}if(str == "xz"){button1.Text = "新增";}}private void button1_Click(object sender, EventArgs e){string[] st = new string[10];if(str == "xz"){st[0] = textBox1.Text.Trim();st[1] = textBox2.Text.Trim();st[2] = textBox3.Text.Trim();st[3] = textBox4.Text.Trim();st[4] = textBox5.Text.Trim();st[5] = textBox6.Text.Trim();st[6] = textBox7.Text.Trim();st[7] = textBox8.Text.Trim();st[8] = textBox9.Text.Trim();st[9] = textBox10.Text.Trim();Staff idaxz = new Staff();idaxz.Add (st);this.Close();}if(str == "xg"){st[0] = textBox1.Text.Trim();st[1] = textBox2.Text.Trim();st[2] = textBox3.Text.Trim();st[3] = textBox4.Text.Trim();st[4] = textBox5.Text.Trim();st[5] = textBox6.Text.Trim();st[6] = textBox7.Text.Trim();st[7] = textBox8.Text.Trim();st[8] = textBox9.Text.Trim();st[9] = textBox10.Text.Trim();Staff idaxg = new Staff();idaxg.Updata(st,id);this.Close();}}private void button2_Click(object sender, EventArgs e) {this.Close();}}}完整后的窗口为:10.运行程序:1.单击添加:(1).输入数据(2).点击“新增”后:2.单击修改:(1).输入修改数据:(2).单击“修改”后3.单击删除:(1).删除数据:(2).点击取消:(3).点击确定:数据库的分离:。
实验:创建和管理其他数据库对象
实验:创建与管理其他数据库对象一、实验目的掌握创建管理索引、视图、存储过程和触发器对象的使用方法;二、实验环境已安装SQL Server 2005 企业版的计算机;具有局域网环境,有固定IP;三、实验学时4学时四、实验要求1.掌握索引的创建和管理方法;2.掌握视图的创建和管理方法;3.掌握存储过程的创建和管理方法;4.掌握触发器的创建和管理方法;5.完成实验报告;五、实验内容及步骤请使用T-SQL 语句实现进行以下操作:1.在student表的sno列上创建唯一性聚集索引index_sno2.在student表的sname列上创建唯一性非聚集索引index_sname3.在student表的sage列上创建非聚集索引index_sage4.在sc表的sno列和cno列上创建复合非聚集索引index_sno_cno5.将索引index_sno_cno更名为index_snocno6.删除上面的索引index_snocno7.查看student表的索引基本信息8.创建一个只选修8号课程的学生情况的视图信息9.创建一个视图view_stu,只包含学生的学号,姓名,年龄信息10.在上一题视图的基础上创建年龄在20岁以上的的学生的视图11.创建一个包含不及格同学及90分以上同学的学号、姓名、课程名称及成绩的视图12.选择一个上面创建的视图,查看视图的信息13.选择一个上面创建的视图,修改删除其中的一列14. 选择一个上面创建的视图进行删除操作15.从视图view_stu中查询19岁的男生记录16.通过视图view_stu中插入一行数据。
学号:2006010010,姓名:赵青,年龄:17.将视图view_stu中姓名为“李蕾”的年龄改为“22”18.通过视图 view_stu将姓名为“李贵”的记录删除19.自行选择上面创建的一个视图插入一个记录。
20.自行选择一个视图根据一定的条件进行查询。
21.自行选择联合一张表和某个视图进行复合查询。
数据库 实验七 视图的创建、修改和使用
(1)建立物理系选修了0510033号课程的学生视图。
(2)建立物理系选修了0510033号课程且成绩不合格的学生视图,包括学号、姓名和出生年份。
(3)建立物理系学生的视图,并要求进行修改和插入操作时仍须保证该视图只有物理系的学生。
(4)建立中文系选修了0110002号课程且成绩在90分以上的学生视图。
福建师范学院计算机系
实验报告
(2013—2014学年第2学期)
课程名称数据库原理与应用年级
学号姓名
指导教师
实验日期
【实验目的与要求】
掌握视图的创建、修改和使用
实验设备:
SQL Server Management Studio软件。
【实验报告内容】
(5)定义一个反映学生学号、姓名和出生年份的视图。
(6)定义一个反映1985年以后出生的学生姓名的视图。
(7)建立一视图Class_grade,用来反映每个班的所有选修课的平均成绩,并对其进行更新操作。
实验中遇到的问题及心得:
过程总结:
通过这次实验,知道了T-SQL提供的控制流语句可用来进行顺序、分支、循环、存储过程等程序设计这次实验最常用到的是SET语句,声明一个局部变量后,该变量将被初始化为空。使用 SET 语句将一个不是 NULL 的值赋给声明的变量。给变量赋值的 SET 语句返回单值。
4)进入创建视图向导后,首先出现的是欢迎使用创建视图向导对话框,其中简单介绍了该向导的功能。单击“下一步”后,就会出现选择数据库对话框。
5)在选择数据库对话框中,选择视图所属的数据库。单击“下一步”按键,则进入选择表对话框。
6)在选择表对话框中,列出了指定数据库中所有用户定义的表。用户可以从中选择构造视图所需的一个表或者多个表,被选中的表成为构造视图的参考表。选择构造视图参考表的方法是:用鼠标单击表后的“包含在视图中”列,使复选框为选中状态。本例的数据库中只有学生表和选课表,它们都应当被选中。
数据库实验-建立数据库
数据库实验建立数据库一.实验目的1.学会使用SQL的基本语句,会创建数据库。
在Windows系统下学会使用SQL Server编写数据库。
2.熟悉数据库Microsoft SQL Server环境,会连接到SQL Server服务器,创建database,新建查询,在查询中实现对已创建的数据库进行基本操作。
3.掌握SQL基本操作建立表(create)、插入数据(insert)、设立主键与外键、查询数据(select)、更新数据(update)、删除数据(delete)、删除表或主键(drop)等方法。
4.使用所学的查询语句对表格进行自己比较感兴趣的查询、删除、更新;同时进行各种自己比较感兴趣的操作,观察数据库系统的反应并思考其中的原因。
二.实验内容由于我的实验的选题是“学籍与成绩管理系统”,所以实验的内容包括:1.创建数据库Student即“学生与成绩管理系统”;2.在已创建的数据库中创建6个表格包括学生表、课程表、教师表、系表、授课表和学生选课表;3.分别为每个表设立主键和外键,并说明它们的关系;4.建立表之间的参照关系,建立适当的索引。
5.使用insert向每个表中插入数据,我选择的数据已三国时期人物为准,其中向主表至少插入5行数据,向子表至少插入30行数据;6.使用selcet * from观察数据,其中观察的内容为自己比较感兴趣的数据,有:(1).先观察学生表学生的信息、学生性别为“女”的学生信息、系代号不为“01”、“02”、“03”的学生信息、班级号、性别等信息查询;(2).使用*查询课程的所有信息,再分别列出课程所有属性查看课程信息;(3).同理查看教师、系表、授课表和学生选课表的信息;(4).查询教师教授的课程名称和教师名称;(5).查询学数据库的学生信息和教师信息;(6).查询“02000001”班级有选修课学生的学生老师和课程相关的信息;(7).查询学生“刘备”所学的课程的总学分;7.删除已创建的表和清空表中的所有数据;8.在子表中输入含有不存在外键值的数据,观察数据库系统的反应;9.更新部分同学的学籍情况;10.删除部分同学的学籍信息。
数据库常用对象实验报告
一、实验目的1. 理解数据库的基本概念和常用对象。
2. 掌握数据库的创建、修改和删除操作。
3. 熟悉数据库中表、视图、索引、存储过程等对象的创建和使用。
4. 培养实际操作数据库的能力,提高数据库应用水平。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 数据库的基本操作2. 表的创建、修改和删除3. 视图的创建和使用4. 索引的创建和使用5. 存储过程的创建和使用四、实验步骤1. 数据库的基本操作(1)创建数据库打开MySQL Workbench,连接到本地MySQL服务器。
在“对象浏览器”中,右键点击“数据库”,选择“创建数据库”。
在弹出的对话框中,输入数据库名称(如:test_db),点击“创建”按钮。
(2)删除数据库在“对象浏览器”中,右键点击要删除的数据库,选择“删除数据库”。
在弹出的对话框中,点击“确定”按钮。
2. 表的创建、修改和删除(1)创建表在“对象浏览器”中,右键点击“表”,选择“创建表”。
在弹出的对话框中,输入表名(如:students),然后定义表中的列和类型。
例如:```id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL,class VARCHAR(50) NOT NULL```点击“保存”按钮,创建成功。
(2)修改表在“对象浏览器”中,右键点击要修改的表,选择“修改表”。
在弹出的对话框中,可以对表中的列进行添加、删除、修改等操作。
(3)删除表在“对象浏览器”中,右键点击要删除的表,选择“删除表”。
在弹出的对话框中,点击“确定”按钮。
3. 视图的创建和使用(1)创建视图在“对象浏览器”中,右键点击“视图”,选择“创建视图”。
在弹出的对话框中,输入视图名称(如:view_students),然后编写SQL查询语句。
数据库中的对象实训报告
一、实训目的通过本次实训,使学员掌握数据库中常见对象的基本概念、操作方法及在实际应用中的运用,提高学员对数据库对象的认知和操作能力。
二、实训环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实训原理数据库中的对象主要包括:数据库、表、视图、索引、存储过程、触发器等。
这些对象在数据库中扮演着重要的角色,下面简要介绍这些对象的基本概念和操作方法。
1. 数据库(Database)数据库是存储数据的集合,它是数据库管理系统管理的最基本对象。
在MySQL中,可以使用CREATE DATABASE语句创建数据库,例如:```sqlCREATE DATABASE testdb;```2. 表(Table)表是数据库中存储数据的结构化集合,它由行和列组成。
在MySQL中,可以使用CREATE TABLE语句创建表,例如:```sqlCREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);```3. 视图(View)视图是一个虚拟表,它是由查询语句定义的。
在MySQL中,可以使用CREATE VIEW 语句创建视图,例如:```sqlCREATE VIEW student_view ASSELECT id, name, ageFROM studentsWHERE age > 18;```4. 索引(Index)索引是数据库表中用于加速数据检索的数据结构。
在MySQL中,可以使用CREATE INDEX语句创建索引,例如:```sqlCREATE INDEX idx_name ON students (name);```5. 存储过程(Stored Procedure)存储过程是一组为了完成特定功能的SQL语句集合。
在MySQL中,可以使用CREATE PROCEDURE语句创建存储过程,例如:```sqlDELIMITER //CREATE PROCEDURE get_student_info(IN student_id INT)BEGINSELECT FROM students WHERE id = student_id;END //DELIMITER ;```6. 触发器(Trigger)触发器是一种特殊的存储过程,它在满足特定条件时自动执行。
数据库及数据库对象的创建和管理课件
实体关系
分析现实世界中的实体及其属性 、关系,抽象为数据库中的表、
字段和约束。
表间关系
阐述表之间关联关系,如一对一、 一对多、多对多等,实现数据完整 性维护。
索引优化
根据查询需求和数据量,合理创建 索引,提高查询速度和数据访问效 率。
04
CATALOGUE
表的设计与实现策略分享
需求分析阶段:收集业务需求
使用CREATE PROCEDURE语 句创建存储过程,并将SQL语 句嵌入其中。
测试存储过程
编写测试用例,对存储过程进 行全面测试,确保功能完善、 性能达标。
存储过程中异常处理机制说明
异常类型
01
包括语法错误、约束冲突、数据转换错误等常见异常类型。
TCH结构捕获存储过程中可能抛出的异常,并进行
数据库特点
数据结构化、数据共享性高、数 据独立性高、数据冗余度小。
数据库发展历程
01
02
03
人工管理阶段
数据不保存、应用程序管 理数据、数据不共享、数 据不具有独立性。
文件系统阶段
数据可以长期保存、由文 件系统管理数据、数据共 享性差、数据独立性差。
数据库系统阶段
数据结构化、数据共享性 高、数据独立性高、数据 由DBMS统一管理和控制 。
索引(Index)
定义
根据表中一列或多列的值进行排序的数据结构, 用于提高查询速度。
创建方式
使用CREATE INDEX语句创建索引,定义索引的 名称、索引列等。
作用
加快查询速度,提高数据库性能;实现数据的快 速定位和访问;保证数据的唯一性和准确性。
管理方式
使用ALTER INDEX语句修改索引属性,如重建索 引、禁用索引等。索引需要占用一定的存储空间 ,过多的索引会影响数据的增删改操作性能。
数据库对象
实验四oracle对象管理及使用一、实验目的及要求掌握Oracle的常用对象的操作方法。
会使用常用对象解决一些实际问题。
二、实验主要内容(1) 表结构的建立、修改、查看、删除操作。
(2) 索引的建立、修改、查看、删除操作。
(3) 视图的建立、查询、修改、删除操作。
(4) 同义词的建立、查询、修改、删除操作,比较对同义词的操作与对原数据库对象的操作是否一致。
(5) 掌握序列的建立、查询、修改、删除操作,利用序列向数据库表中插入数据。
三、实验仪器设备在局域网环境下,有一台服务器和若干台客户机。
服务器成功安装Oracle 10g数据库服务器(企业版),客户机成功安装Oracle 10g客户端软件,网络服务配置正确,数据库和客户端正常工作。
四、实验步骤1.创建表结构利用命令行方式将下列各表建立到员工医疗保险系统数据库中。
表结构如附录员工医疗保险系统表1-表7所示。
2.查看表结构(1) 利用数据字典查看员工医疗保险系统所有表的字段信息和约束信息。
从数据字典DBA_TAB _COLUMNS查看员工医疗保险系统所有表的字段信息。
从数据字典DBA_ CONSTRAINTS查看员工医疗保险系统所有表的约束信息。
3.修改表结构(1) 将表“staff_sql”重新命名为“staff_sql0”。
(2) 为“staff_sql0”表添加“age ”字段,利用DESC命令查看“staff_sql0”表的字段信息。
(3) 为“staff_sql0”表添加“salary NUMBER(5,2)”、“salary_add NUMBER(3,1)”两个字段,利用DESC命令查看“staff_sql0”表的字段信息。
(4) 向“staff_sql0”表添加“sname”字段惟一性约束,从数据字典DBA_CONSTRAINTS查看“staff_sql0”表的约束信息。
(5) 删除“staff_sql0”表上“sname”字段惟一性约束,从数据字典DBA_CONSTRAINTS查看“staff_sql0”表的约束信息。
数据库实验-对象的建立与数据操作
ALTER TABLE S DROP COLUMN Sage
7.在表S上,按“Sno”属性列的unique方式建立索引;
CREATE UNIQUE INDEX Ssno ON S(Sno);
8.删除表SC;
DROP TABLE SC
数据更新:
对已建好的各表输入适当的数据并练习数据的删除和修改,注意检测键码约束、外码约束、非空约束、唯一约束、取值约束等各种约束在输入数据及数据的删除、修改时的作用,结合课堂教学体会其含义。
Cnamevarchar(50),Cpnovarchar(50),
Ccriditvarchar(50),foreignkey(Cpno)referencesC1(Cno));
4.创建课程关系表SC,其中(Sno,Cno)是主码,Sno和Cno分别是外码:
学号
课程号
成绩
Sno
Cno
grade
createtableSC1(Snovarchar(50),Cnovarchar(50),
SELECTS.Sno,S.SnamefromS,SCwhereCno='1'union
selectS.Sno,S.SnamefromS,SCwhereCno='2';
查询选修了“1”和“2”号课程的学生学号和姓名;
17.查询选修了“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩;
18.查询每位选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩);
19.查询没有选修课程的学生的基本信息;
20.查询选修了3门以上课程的学生学号;
21.查询选修课程成绩至少有一门在80分以上的学生学号;
数据库上的基本操作实验
数据库上的基本操作实验数据库是现代信息管理的重要工具,用于存储和组织大量的数据。
为了使数据能够高效地存储和检索,数据库系统提供了一系列基本操作,本实验将介绍数据库的基本操作以及它们的使用方法。
一、数据库的基本操作1.创建数据库创建数据库是使用数据库系统的第一步。
我们可以通过使用数据库管理系统(DBMS,例如MySQL、Oracle)提供的命令或图形界面来创建数据库。
在命令行中,我们可以使用如下命令创建数据库:CREATE DATABASE database_name;2.创建表数据库中的数据是通过表来组织的,表是由行和列组成的二维表格。
我们可以使用如下命令来创建表:CREATE TABLE table_namecolumn1 datatype,column2 datatype,column3 datatype,...其中,table_name是表的名称,column1、column2、column3是表的列名,datatype是列的数据类型。
3.插入数据一旦表创建完成,我们可以通过INSERTINTO语句将数据插入到表中。
语法如下:INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);其中,table_name是表的名称,column1、column2、column3是表的列名,value1、value2、value3是要插入的值。
4.查询数据查询是数据库中最常用的操作之一,可以通过使用SELECT语句来查询数据。
语法如下:SELECT column1, column2, ...FROM table_nameWHERE condition;其中,column1、column2是要查询的列名,table_name是要查询的表名,condition是查询条件。
5.更新数据更新数据可以使用UPDATE语句来完成。
实验七 视图的创建与使用
实验七视图的创建与使用学号 ____ 姓名______ 班级________专业__________________一、实验目的1)理解视图的概念。
2)掌握创建视图、测试、加密视图的方法。
3)掌握更改视图的方法。
4)掌握用视图管理数据的方法。
5)了解分区视图的实现方法。
二、实验内容说明:在所有库文件名与表名取名时,请各位同学在所给定的文件名后加上下划线及学号后四位数字构成自己的实验数据库名与表名。
如:XSGL1_20051101.创建视图是数据库应中的常见需求,可以使用企业管理创建、管理视图,也可以用T-SQL 语言创建、管理视图。
1、用创建视图向导创建视图使用视图向导创建一个名为studview的投影视图,该视图从student表中查询出班级号为“052”班的所有学生的学号,姓名,性别,班级,家庭住址,入学时间,出生年月资料。
(提示:分别进入企业管理器,再分别单击“工具”、“向导”、“数据库”、“创建视图向导”,然后一步一步地创建视图。
)基本步骤:2、用企业管理器创建、管理视图(1)创建视图A、使用企业管理器在表student上创建一个能查询“051”班学生学号、姓名、家庭住址信息的投影视图。
1)依次进入企业管理器、数据库、XSGL库,并用鼠标右键单击“视图”。
2)在系统弹出的快捷菜单中单击“新建视图”,出现“新建视图”窗口。
如图所示:3)最上面的一个窗格用于添加创建视图的基础对象,在其上按鼠标右键,单击快捷菜单中的“添加表”,将表student添加到此窗格中,上面第二个窗格用于选择进入视图的列,分别选择相应字段:在查询条件窗格中输入查询条件:,输入where子句,最后一个窗格为视图结果窗口。
4)单击工具栏,执行按钮“!”,观察执行结果是否正确。
若正确,则单击“保存”按钮,输入文件名:stuview1,再单击“确定”按钮,视图创建完成。
B、使用企业管理器在表student、course、sc表上创建一个能检索学生的学号、姓名、学习课程号、学习课程名及课程成绩。
数据库创建与数据操纵实验报告
Cpno
char
Ccredit
smallint
not null
『主码为Cno;外码为Cpno,被参照表是Course』
SC表
属性
类型Байду номын сангаас
约束条件
Sno
char
not null
Cno
char
not null
Grade
smallint
not null
『主码由Sno和Cno共同构成
外码是Sno,被参照表是student
实验报告
学院(系)名称:计算机与通信工程学院
姓名
**
学号
2010****
专业
计算机科学与技术(中加)
班级
中加*班
实验项目
数据库创建与数据操纵
课程名称
数据库系统概论
课程代码
*********
实验时间
2012.11.2
实验地点
主校区7-215
批改意见
成绩
教师签字:
实验环境(软、硬件环境)
软件环境:Windows 2000
---执行结果:
2、连接查询
1)等值连接查询
Eg:查询每个学生及其选修课程的情况
2)自身连接
Eg:查询每一门课的间接先修课
---执行结果:
3)外连接
4)复合条件连接
Eg:查询选修了1号课程且成绩在90分以上的所有学生
三、嵌套查询
---执行结果:
************数据更新操作************
相关信息:建立一个学生-选课(Student)数据库,其中包含3个关系模式:学生(student)、课程(Course)、选课(SC),学生表由学号(Sno),姓名(Sname),性别(Ssex),年龄(Sage),所在系别(Sdept)组成;课程表由课程号(Cno),课程名(Cname),先行课(Cpno),学分(Ccredit)组成;选课表由学生号(Sno),课程号(Cno),成绩(Grade)组成。
实验七 过程式数据库对象的使用
实验七过程式数据库对象的使用1.存储过程1.1创建存储过程,使用employees表中的员工人数来初始化一个局部变量,并调用这个存储过程use yggl;delimiter $$create procedure test(out number1 integer)begindeclare number2 integer;set number2=(select count(*) from employees);set number1=number2;end$$delimiter;call test(@number);select @number;1.2比较两个员工的实际收入,若前者比后者高就输出0,否则就输出1delimiter $$create procedurecompa(in id1 char(6), in id2 char(6),out bj integer)begindeclare sr1,sr2 float(8);select income-outcome into sr1 from salary where employeeid=id1;select income-outcome into sr2 from salary where employeeid=id2;if id1>id2 thenset bj=0;else set bj=1;end if;end$$delimiter;call compa('01','02',@bj);select @bj;1.3 使用游标定一个员工的实际收入是否排在前三名,结果为true表示是,结果为false表示否。
DELIMITER $$ CREATE PROCEDURE TOP3(IN EM_ID CHAR(6),OUT OK BOOLEAN )BEGIN DECLARE X_EM_ID CHAR(6);DECLARE SEQ INT; DECLARE ACT_IN FLOAT;DECLARE FOUND BOOLEAN;DECLARE SALARY_DIS CURSOR FOR SELECT EmployeeID, InCome-OutCome FROM Salary ORDER BY 2 DESC;DECLARE CONTINUE HANDLER FOR NOT FOUNDSET FOUND=FALSE;SET SEQ=0; SET FOUND=TRUE;SET OK=FALSE;OPEN SALARY_DIS;FETCH SALARY_DIS INTO X_EM_ID,ACT_IN;WHILE FOUND AND SEQ<3 AND OK=FALSE DOSET SEQ=SEQ+1;IF X_EM_ID=EM_ID THENSET OK=TRUE;END IF;FETCH SALARY_DIS INTO X_EM_ID,ACT_IN;END WHILE;CLOSE SALARY_DIS;END$$ DELIMITER ;CALL TOP3('01',@OUT1);1.4创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。
python数据库对象操作
python数据库对象操作Python数据库对象操作Python是一种广泛使用的编程语言,它具有简洁、易读的语法,因此成为了数据处理和分析的首选工具之一。
在Python中,数据库对象操作是一项重要的技能,它允许我们连接数据库、执行查询和更新数据。
本文将介绍Python中常用的数据库对象操作技术,包括创建数据库对象、连接数据库、执行查询和更新操作等。
一、创建数据库对象在Python中,我们可以使用第三方库来创建数据库对象。
常用的库包括MySQLdb、pymysql和psycopg2等。
这些库提供了一系列方法来连接数据库、执行查询和更新操作。
我们可以使用pip安装这些库,然后在Python脚本中导入相应的库来创建数据库对象。
二、连接数据库连接数据库是进行数据库操作的第一步。
在Python中,我们可以使用数据库对象的connect方法来连接数据库。
在连接数据库时,我们需要提供数据库的地址、用户名和密码等信息。
下面是连接MySQL数据库的示例代码:import MySQLdb# 连接数据库conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test')在连接数据库后,我们可以通过数据库对象的cursor方法创建一个游标对象。
游标对象用于执行查询和更新操作。
三、执行查询操作执行查询操作是数据库操作的常见需求。
在Python中,我们可以使用游标对象的execute方法来执行SQL查询语句。
下面是一个查询数据库表中所有数据的示例代码:# 创建游标对象cursor = conn.cursor()# 执行查询语句cursor.execute("SELECT * FROM students")# 获取查询结果results = cursor.fetchall()# 打印查询结果for row in results:print(row)执行查询语句后,我们可以使用fetchall方法获取查询结果。
数据对象操作实验报告
一、实验目的1. 熟悉数据对象的基本概念和操作方法。
2. 掌握数据对象的创建、修改、查询和删除等基本操作。
3. 培养动手实践能力,提高数据管理技能。
二、实验环境1. 操作系统:Windows 102. 开发环境:Visual Studio 20193. 编程语言:C#三、实验内容本次实验主要涉及以下内容:1. 数据对象的基本概念2. 数据对象的创建3. 数据对象的修改4. 数据对象的查询5. 数据对象的删除四、实验步骤1. 数据对象的基本概念数据对象是编程中常用的一种数据结构,用于存储和管理数据。
在C#中,数据对象通常由类(Class)来实现。
类是一种用户自定义的数据类型,可以包含属性(Property)和方法(Method)。
2. 数据对象的创建在C#中,创建数据对象需要先定义一个类,然后在代码中创建类的实例。
(1)定义类```csharppublic class Student{public string Name { get; set; }public int Age { get; set; }public string Class { get; set; }}```(2)创建实例```csharpStudent student = new Student();```3. 数据对象的修改修改数据对象需要通过访问其属性来实现。
```csharp = "张三";student.Age = 20;student.Class = "计算机科学与技术";```4. 数据对象的查询查询数据对象可以通过访问其属性或调用方法来实现。
```csharpConsole.WriteLine("姓名:" + ); Console.WriteLine("年龄:" + student.Age);Console.WriteLine("班级:" + student.Class);```5. 数据对象的删除在C#中,数据对象的删除通常是通过释放其占用的内存来实现的。
数据库实验报告---建立数据库及其对象
学生实验报告书实验名称建立数据库及其对象课程名称数据库系统原理课程号学院(系)专业班级学生姓名学号实验地点实验日期一、实验目的1、掌握用户自定义数据类型的方法;2、掌握用Transact-SQL语句进行数据插入、修改、删除数据库的方法;3、掌握SELECTY语句,能够运用该语句完成各种查询。
二、实验要求1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;2、能认真独立完成实训内容;3、实验后做好实验总结,根据实验情况完成总结报告。
三、实验内容1,用T_SQL语句,创建一用户自定义数据类型:名称为“char20”,数据类型为varchar,长度为20,允许为空。
键入语句后的截图如下:2,用T_SQL语句创建数据库“学生课程数据库”,在此基础上建立该数据库包含的学生表,课程表,学生选课表,并向该表插入相应的数据。
(1)学生课程数据库的截图如下:(2)该学生数据库包含着如下的相关表:表Student:向表中插入数据的语句如下:表Course的语句创建截图如下:向表Course中插入数据的语句如下:表SC用语句创建截图如右图:3,用T_SQL语句,修改上面所建的学生课程数据库中的数据,详细步骤略:4,用T_SQL语句查询相关表的信息。
总结:通知这两次的实验,我们开始慢慢熟悉了SSMS的环境,包括手动与语句篇,以及创建数据库与表的相关知识。
表达相关的约束条件,主键与外键。
更多的是应用我们的SELECT FROM语句来查询更多的内容,在接下来的实验中,我们更应该认真地学习数据库在SSMS中的语句编写技巧与方法,很好的实现数据库的学习方向。
即指导教师日期注:请用A4纸书写,不够另附纸。
第页,共页。
实验七 视图的创建和管理
实验七视图的创建和管理一、实验目的与要求⏹熟练掌握使用企业管理器和SQL语句创建、查询、更新、修改和删除视图。
⏹进一步掌握视图与基本表的联系与区别。
二、实验内容和步骤1、创建视图(1)启动企业管理器,在产品销售数据库CPXS中创建价格小于2000的产品视图VIEW_CP_PRICE2000,要求对该视图的更新都要符合价格小于2000这个条件,写出创建过程和对应的SQL语句:CREATE VIEW VIEW_CP_PRICE2000ASSELECT *FROM CPWHERE 价格< 2000(2)打开查询分析器,用SQL语句创建各客户购买产品的情况VIEW_GMQK视图,包括客户编号、客户名称、产品编号、产品名称、价格,购买日期、购买数量。
CREATE VIEW VIEW_GMQKAS SELECT distinct cpxsb.客户编号, 客户名称,cpxsb.产品编号,产品名称,价格,销售日期,数量FROM CPXSB, cp, xssWHERE cp.产品编号= cpxsb.产品编号AND cpxsb.客户编号= xss.客户编号(3)创建分区视图:在CPXS数据库中创建CP1和CP2两个表,CP1表中为编号小于等于’100010’产品数据,CP2表中为编号大于‘100010’产品数据,以分区列为产品编号,创建可更新的分区视图VIEW_CP1和VIEW_CP2。
CREATE VIEW VIEW_CP1 AS SELECT *FROM CPWHERE 产品编号< '100010'CREATE VIEW VIEW_CP2AS SELECT*FROM CPWHERE产品编号>='100010'WITH CHECK OPTION(这样创建的视图才可进行数据的更新!!要加最后一条子句,否则不可更新)2、查询视图(1)基于VIEW_CP_PRICE2000视图,查询价格在2000以下产品的产品编号、名称和价格。
创建与管理数据库对象
借书 证号 114 113 115 111 112 110
姓名
李菊 张涛 周洪发 李立军 李立军
王红
系
计算机工程系 计算机工程系 计算机工程系 计算机工程系 计算机工程系 计算机工程系
李菊 张涛 周洪发 李立军 李立军
不唯一索引
110
111 112 113 114 115
聚集索引
借书 证号
请不要使用下面的列创建索引:
– 列中仅包含几个不同的值。 – 表中仅包含几行。为小型表创建索引可能
不太划算,因为SQL Server在索引中搜索 数据所花的时间比在表中逐行搜索所花的 时间更长
12
2 创建和管理视图
查询女性读者的姓名、 所借图书的编号和借书时间
CREATE VIEW View_R
17
2 创建和管理视图
使用T-SQL语句创建视图的语法
CREATE VIEW view_name AS <select语句>
CREATE VIEW v_Student1 AS SELECT * FROM Student WHERE ClassNo='20000001'
CREATE VIEW v_Student2 AS SELECT * FROM Student 18 WHERE ClassNo='20000002'
存储过程的优点 执行速度更快 允许模块化程序设计 提高系统安全性 减少网络流通量
22
3 创建和管理存储过程
存储过程的分类 系统存储过程
由系统定义,存放在master数据库中 类似C语言中的系统函数 系统存储过程的名称都以“sp_”开头或”xp_”开头
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程:数据库原理与实用技术实验
实验7 创建和操作数据库对象
实验7-1 存储过程
1、使用不带参数的存储过程
(1)创建一个存储过程my_proc,查询“学生表”中所有计算机系女生的学号、姓名、性别、年龄和所在院系
create proc my_proc as select学号,姓名,性别,年龄,所在院系from学生表
where所在院系='计算机'and性别='女'
(2)执行存储过程
(3)修改存储过程,使其能够查询计算机系女生的所有基本信息
alter proc my_proc as select*from学生表
where所在院系='计算机'and性别='女'
2、带输入参数的存储过程
(1)创建一个存储过程my_procsex,使其能够查询“学生表”中男学生或女学生的学号、姓名、性别、年龄和所在院系
create proc my_procsex @sex char(2) as
select学号,姓名,性别,年龄,所在院系from学生表where性别=@sex
(2)执行存储过程
exec my_procsex @sex='男'
3、带输入/输出参数的存储过程
(1)创建一个存储过程my_procage,使其能够根据学生姓名,查询学生年龄。
(考虑当学生不存在时给出提示信息)
create proc my_procage @name char(10),@age int OUTPUT as
if not exists(select*from学生表where姓名=@name) return-155
select年龄from学生表where姓名=@name
(2)执行存储过程
declare @once_age int, @status int
exec @status=my_procage @name='陈忠刚',
@age=@once_age output
if @status=-155
print'对不起,您输入的名字查找失败!'
print'the output data is:'+convert(varchar(10),@once_age)
declare @once_age int, @status int
exec @status=my_procage @name='李涛',
@age=@once_age output
if @status=-155
print'对不起,您输入的名字查找失败!'
print'the output data is:'+convert(varchar(10),@once_age)
4、返回状态值的存储过程
(1)创建一个存储过程my_procstatus,使其能够根据学生姓名,查询学生的选课信息。
(如果没有输入学生姓名,返回状态码55;如果输入的学生姓名不存在,则返回状态码-155)alter proc my_procstatus @name char(10)as if @name =''
return 55
else if not exists(select*from学生表where姓名=@name)
return-155
select学号,课程号from成绩表where学号in(select学号from学生表where姓名=@name)(2)执行存储过程:接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入名字!!”;如果返回的状态码为-155,则输出“没找到!!”。
declare @status int
exec @status=my_procstatus @name=’’
if @status=55
print=’没有输入名字!’
else if @status=-155
print’没有找到!’
declare @status int
exec @status=my_procstatus @name=’陈忠刚’
if @status=55
print=’没有输入名字!’
else if @status=-155
print’没有找到!’
(3)删除存储过程
5、在存储过程中使用临时表,不指定题目,请理解全局临时表与局部临时表的区别
1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断
开时自动删除。
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table
#Tmp(或者drop table ##Tmp)来显式删除临时表
6、使用存储过程对规则进行绑定与解除绑定操作
(1)修改“学生管理数据库”中的“学生情况表”,添加属性“入学日期”。
将规则
Enter_University_date_rule与入学日期进行绑定
查看执行结果
(3)解除绑定,再次插入该数据,查看执行结果。
7、使用存储过程对默认进行绑定与解除绑定操作
(1)将默认对象“Time_default”和“Age_default”与上表中的“入学日期”和“年
查看执行结果
(2)解除绑定,再次插入该数据,查看执行结果。
实验7-2 视图的创建与使用
1.创建一个名为stud_view1的视图,从“学生管理数据库”的学生表中查询出性别为男的所有学生的学号,姓名,性别,班级,家庭住址,入学时间和出生年月。
create view stud_view1 as select学号,姓名,性别,班级,入学日期from学生where性别='男'
2.创建一个名为stud_view2的视图,查询出选修了《高等数学》的所有同学的选课信息,包括学号,姓名,成绩。
create view stud_view2 as select学生表.学号,学生表.姓名,成绩表.成绩
from成绩表join学生表on成绩表.学号=学生表.学号
where课程号in(select课程号from课程表where课程名='高等数学')
3.从视图stud_view1中查询出软件2班肖一竹的资料。
4.向视图stud_view2中插入一行数据:学号为9940210,姓名为钱丽,成绩为71,结果是什么
5.修改视图stud_view1,将9940201号同学的性别更改为女。
然后再次查询学生表和视图stud_view1,看结果有何改变,为什么
结果便是变为了显示从“学生管理数据库”的学生表中查询出性别为女的所有学生的学号,姓名,性别,班级入学日期。
应为建立视图的时候,from后面只跟了一张表,所以可以对视图进行更新。
6. 完成教科书457页如下习题:
[]a:三条SQL语句都不合法,因为它们的创建视图语句中的from后面都跟了多张表,所以创建的视图不是可更新视图。
[]b:create view agentview as select*from agents
where [percent]<=10 and [percent]>=0 with check option
[]c:
[]d:create view vproducts as select pid,pname,city,quantity from products;
[]:违反了规则5,不能够含有salary1+salary2这种列,这样的话,如果我们对视图进行更新以后就无法使原始表进行同步的更新,因为知道salary1+salary2的值,无法知道salary1与salary2人别的值。
[]:
[]a:
[]b:
update returns set discant=10 where cid='c001'
[]c:
[]d:create view profits as
select ordno,cid,aid,pid,*qty*price-([percent]/100)*(discnt/100)**qty*price as profits
from returns。