通过SQL Server建库语句等,采用纯代码方式创建数据库,创建数据表,以及进行相应数据库操作,包括检索,插入,删除,修改。 以下通过一个例题说明数据库操作。 某仓储超市采用POS(PointofSale)收银机负责前台的销售收款,为及时掌握销售信息,并依此指导
通过SQL Server建库语句等,采用纯代码方式创建数据库,创建数据表,以及进行相应数据库操作,包括检索,插入,删除,修改。
以下通过一个例题说明数据库操作。
某仓储超市采用POS(Point of Sale)收银机负责前台的销售收款,为及时掌握销售信息,并依此指导进货,拟建立商品进、销、存数据库信息管理系统。经过系统需求分析、概念结构设计和逻辑结构设计,可以简化得到如下一组关系模式(其中 表示主键, 表示外键):
积分卡(用户编号,用户名,累积消费金额,积分点)
销售详单(销售流水号,商品编码,数量,金额,用户编号,收银员,时间)
销售日汇总(日期,商品编码,数量)
存货表(商品编码,数量)
进货表(送货号码,商品编码,数量,日期)
商品(商品编码,商品名称,单价)
请在SQL Server的查询分析器中按要求完成如下各题:
1、 创建名为Supermarket的数据库,数据文件名取为:Supermarket_data.mdf,日志文件名取为:Supermarket_log.ldf。
2、 按表1-6要求创建6张数据表,并为每张表设置主键码和外键码(若有的话)。
表1 Integralcard积分卡信息表
列名 |
数据类型 |
可否为空 |
说明 |
User_id |
char(10) |
Not null |
用户编号 |
User_name |
varchar(20) |
Not null |
用户名 |
Cumulative_consumption |
numeric(8,2) |
Not null |
累计消费金额 |
Integral_point |
numeric(5,0) |
Not null |
积分点 |
表2 Salesdetails 销售详单信息表
列名 |
数据类型 |
可否为空 |
说明 |
sales_id |
char(10) |
Not null |
销售流水号 |
commodity_code |
char(10) |
Not null |
商品编码 |
number |
numeric(4,0) |
null |
数量 |
amount |
numeric(9,2) |
null |
金额 |
User_id |
char(10) |
Not null |
用户编号 |
cashier |
varchar(20) |
null |
收银员 |
sd_time |
datetime |
null |
时间 |
表3 Salesdatesummary 销售日汇总信息表
列名 |
数据类型 |
可否为空 |
说明 |
sds_date |
datetime |
Not null |
日期 |
commodity_code |
char(10) |
Not null |
商品编码 |
number |
numeric(4,0) |
null |
数量 |
表4 Inventorylist存货信息表
列名 |
数据类型 |
可否为空 |
说明 |
commodity_code |
char(10) |
Not null |
商品编码 |
number |
numeric(4,0) |
null |
数量 |
表5 Purchasetable进货信息表
列名 |
数据类型 |
可否为空 |
说明 |
delivery_number |
char(10) |
Not null |
送货号码 |
commodity_code |
char(10) |
Not null |
商品编码 |
number |
numeric(4,0) |
null |
数量 |
pt_date |
datetime |
Not null |
日期 |
表6 Commodity商品信息表
列名 |
数据类型 |
可否为空 |
说明 |
commodity_code |
char(10) |
Not null |
商品编码 |
commodity_name |
varchar(10) |
Not null |
商品名称 |
commodity_price |
numeric(7,2) |
Not null |
商品单价 |
3、在建好的6张表中,利用对象资源管理器分别输入和更新若干条记录,要求主键码不能为空和重复,外键码只能取另一张表的主键码之一。
4、针对该数据库的6张表,完成如下10个查询请求:
(1)查询用户编号为’yh23001011’的用户的用户名、累积消费金额和积分点;
(2)查询’张三’用户所购的全部商品的商品编码、商品名称、单价、数量和金额;
(3)查询2016年4月各类商品销售数量的排行榜,要求显示商品编号、商品名称和数量(按降序排列);
(4)根据销售详单中的销售流水号’xs80020001’和商品编码’sp03004561’,对存货表中的数量进行更新;
(5)根据进货表中的送货号码’sh00012288’和商品编码’sp03006677’, 对存货表中的数量进行更新;
(6)统计2016年4月中每一天的销售金额,要求显示日期、销售金额(按降序排列)。
5、针对该数据库的6张表,定义如下2个视图:
(1)定义一个商品存货的视图Commodity_Inventorylist,属性包括商品编码、商品名称、单价和数量;
(2)定义一个用户购买商品的详细清单User_Purchase_Details, 属性包括用户编号、用户名、商品编码、商品名称、单价和数量。
--创建数据库 --创建名为Supermarket的数据库,数据文件名取为:Supermarket_data.mdf,日志文件名取为:Supermarket_log.ldf。 USE master--使用系统 GO CREATE DATABASE Supermarket --创建数据库 ON PRIMARY --主文件 ( NAME='Supermarket_data', --文件名 FILENAME='D:\SQLProject\Supermarket_data.mdf',--路径 SIZE=5MB,--初始大小 MAXSIZE=100MB,--最大容量 FILEGROWTH=10%--增长速度 ) LOG ON--日志文件 ( NAME='Supermarket_log', FILENAME='D:\SQLProject\Supermarket_log.ldf', SIZE=5MB, FILEGROWTH=0 ) GO --创建你数据库表 --模式(其中 表示主键, 表示外键): --积分卡(用户编号,用户名,累积消费金额,积分点) --销售详单(销售流水号,商品编码,数量,金额,用户编号,收银员,时间) --销售日汇总(日期,商品编码,数量) --存货表(商品编码,数量) --进货表(送货号码,商品编码,数量,日期) --商品(商品编码,商品名称,单价) use Supermarket go --积分卡(用户编号,用户名,累积消费金额,积分点) create table Integralcard ( User_id char(10) primary key not null, User_name varchar(20) not null, Cumulative_consumption numeric(8,2) not null, Integral_point numeric(5,0) not null ) go --销售详单(销售流水号,商品编码,数量,金额,用户编号,收银员,时间) use Supermarket go create table Salesdetails ( sales_id char(10) not null, commodity_code char(10) not null foreign key(commodity_code) references Commodity(commodity_code) on delete cascade, number numeric(4,0) null, amount numeric(9,2) null, User_id char(10) not null foreign key(User_id) references Integralcard(User_id) on delete cascade, cashier varchar(20) null, sd_time datetime null ) go --外键 ALTER TABLE Salesdetails ADD CONSTRAINT Salesdetails_KEY PRIMARY KEY(sales_id,commodity_code,User_id) Go --销售日汇总(日期,商品编码,数量) use Supermarket go create table Salesdatesummary ( sds_date datetime not null, commodity_code char(10) not null foreign key(commodity_code) references Commodity(commodity_code) on delete cascade, number numeric(4,0) null ) go ALTER TABLE Salesdatesummary ADD CONSTRAINT Salesdatesummary_KEY PRIMARY KEY(commodity_code) Go --存货表(商品编码,数量) use Supermarket go create table Inventorylist ( commodity_code char(10) not null foreign key(commodity_code) references Commodity(commodity_code) on delete cascade, number numeric(4,0) null ) go ALTER TABLE Inventorylist ADD CONSTRAINT Inventorylist_KEY PRIMARY KEY(commodity_code) Go --进货表(送货号码,商品编码,数量,日期) use Supermarket go create table Purchasetable ( delivery_number char(10) not null, commodity_code char(10) not null foreign key(commodity_code) references Commodity(commodity_code) on delete cascade, number numeric(4,0) null, pt_date datetime not null ) go --外键 ALTER TABLE Purchasetable ADD CONSTRAINT Purchasetable_KEY PRIMARY KEY(delivery_number,commodity_code) Go --商品(商品编码,商品名称,单价) use Supermarket go create table Commodity ( commodity_code char(10) primary key not null, commodity_name varchar(10) not null, commodity_price numeric(7,2) not null ) go ----------------------------------------------- --查询用户编号为’yh23001011’的用户的用户名、累积消费金额和积分点 use Supermarket select User_name as 姓名,Cumulative_consumption as 累计消费金额,Integral_point as 积分点 from Integralcard where User_id='yh23001011' go --查询’张三’用户所购的全部商品的商品编码、商品名称、单价、数量和金额; use Supermarket select com.commodity_code,com.commodity_name,com.commodity_price,sal.number,sal.amount from Commodity com,Salesdetails sal,Integralcard ca where com.commodity_code=sal.commodity_code and sal.User_id=ca.User_id and ca.User_name='张三' go --查询2016年4月各类商品销售数量的排行榜,要求显示商品编号、商品名称和数量(按降序排列) use Supermarket select com.commodity_code,com.commodity_name,sal.number,sal.sd_time from Commodity com,Salesdetails sal where com.commodity_code=sal.commodity_code and sal.sd_time between '2016-04-01' and '2016-04-30' order by sal.number desc go --查看结果 use Supermarket select number from Inventorylist where Inventorylist.commodity_code='sp03004561' go --根据销售详单中的销售流水号’xs80020001’和商品编码’sp03004561’,对存货表中的数量进行更新 use Supermarket update Inventorylist set number= number - (select sal.number from Salesdetails sal where sal.sales_id='xs80020001' and sal.commodity_code='sp03004561') go --查看更新结果 use Supermarket select number from Inventorylist where Inventorylist.commodity_code='sp03004561' go --查看结果 use Supermarket select number from Inventorylist where Inventorylist.commodity_code='sp03006677' go --根据进货表中的送货号码’sh00012288’和商品编码’sp03006677’, 对存货表中的数量进行更新 use Supermarket update Inventorylist set Inventorylist.number=Inventorylist.number +(select pur.number from Purchasetable pur where pur.delivery_number='sh00012288' and pur.commodity_code='sp03006677') go --查看更新结果 use Supermarket select number from Inventorylist where commodity_code='sp03006677' go --统计2016年4月中每一天的销售金额,要求显示日期、销售金额(按降序排列) use Supermarket select sal.sds_date,salemoney=com.commodity_price*sal.number from Commodity com,Salesdatesummary sal where com.commodity_code=sal.commodity_code and sal.sds_date>='2016-04-01' and sal.sds_date <p><span style="font-size:18px"><br> </span></p> <p><span style="font-size:18px"><span style="color:#ff6600">数据库实现截图:</span></span></p> <br> <img src="/static/imghwm/default1.png" data-src="http://img.blog.csdn.net/20160519185100347?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" class="lazy" alt=""><br> <p><span style="font-size:18px"><br> </span></p>

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。