查看本章节

查看作业目录


需求说明:

  • 使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表
  • 使用 DML 语句分别新增一条仓库表、供应商表、产品表和入库表记录
  • 使用 DML 语句更新满足指定条件的产品进货单价
  • 删除一条供应商记录(例如“丁供应商”)

实现思路:

  1. 入库表中字段仓库名(dName)、供应商名(pName)和产品编号(goodsID)分别参照仓库表、供应商表和产品表
  2. 新增一条产品记录的 DML 语句
  3. 以下 DML 语句将创维公司产品的进货单价打 95 折
  4. 删除供应商数据需要特别注意删除主表数据所引发的删除异常问题。由于供应商数据被入库表记录所引用,因此需要首先将入库表中引用了欲删除供应商的那些入库记录的供应商信息置为 null,然后再删除这个供应商

实现代码:

入库表中字段仓库名(dName)、供应商名(pName)和产品编号(goodsID)分别参照仓库表、供应商表和产品表

CREATE TABLE instock(
serialNo INT PRIMARY KEY auto_increment,
FOREIGN KEY(dName) REFERENCES depot(dName) -- 参照仓库表主键
FOREIGN KEY(pName) REFERENCES provider(pName) -- 参照供应商表主键
FOREIGN KEY(goodsID) REFERENCES goods(goodsID) -- 参照产品表主键
inNum INT,
inTime time
)

新增一条产品记录的 DML 语句

INSERT INTO goods VALUES('A1001','创维 55M6','2999');

以下 DML 语句将创维公司产品的进货单价打 95 折

UPDATE goods SET unitPrice=unitPrice*0.95 WHERE gName LIKE '%创维%'

删除供应商数据需要特别注意删除主表数据所引发的删除异常问题。由于供应商数据被入库表记录所引用,因此需要首先将入库表中引用了欲删除供应商的那些入库记录的供应商信息置为 null,然后再删除这个供应商

UPDATE instock SET pName=null WHERE pName='丁供货商'
DELETE FROM provider WHERE pName='丁供货商'

数据库:


SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for depot
-- ----------------------------
DROP TABLE IF EXISTS `depot`;
CREATE TABLE `depot` (
`dName` varchar(255) NOT NULL DEFAULT '',
`tel` varchar(255) DEFAULT NULL,
PRIMARY KEY (`dName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of depot
-- ---------------------------- -- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`goodsID` varchar(255) NOT NULL,
`gName` varchar(255) DEFAULT NULL,
`unitPrice` decimal(10,2) DEFAULT NULL,
`category` varchar(255) DEFAULT NULL,
PRIMARY KEY (`goodsID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of goods
-- ---------------------------- -- ----------------------------
-- Table structure for instock
-- ----------------------------
DROP TABLE IF EXISTS `instock`;
CREATE TABLE `instock` (
`serialNo` int(11) NOT NULL AUTO_INCREMENT,
`dName` varchar(255) DEFAULT NULL,
`pName` varchar(255) DEFAULT NULL,
`goodsID` int(255) DEFAULT NULL,
`inNum` int(255) DEFAULT NULL,
`inTime` datetime DEFAULT NULL,
PRIMARY KEY (`serialNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of instock
-- ---------------------------- -- ----------------------------
-- Table structure for provider
-- ----------------------------
DROP TABLE IF EXISTS `provider`;
CREATE TABLE `provider` (
`pName` varchar(255) NOT NULL,
`contact` varchar(255) DEFAULT NULL,
PRIMARY KEY (`pName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of provider
-- ----------------------------

使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表,并对其进行操作的更多相关文章

  1. 抓取oracle建表语句及获取建表ddl语句

    抓取oracle建表语句及获取建表ddl语句 1.抓取代码如下: 1.1.产生表的语法资料 DECLARE-- v_notPartTable VARCHAR2(1000):= '&2'; -- ...

  2. MySQL之使用DDL语句创建表

    一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...

  3. MySQL使用DDL语句创建表

    一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...

  4. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  5. oracle之 获取建表ddl语句

    第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...

  6. oracle 之 cursor:创建存储过程批量执行DDL语句

    说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...

  7. Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性

    早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...

  8. mysql系统表加trigger和对特定的库禁用 DDL 语句

    给 mysql 系统表加上 trigger 1 Reply 默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的.会提示 ERROR 1465 (HY000): Trigg ...

  9. 2013年10月13日学习:SQL通过命令语句来创建表

    优点:操作简单,不容易出错,易于调试 缺点:需要记住命令.命令多了就容易混淆,是吧!但是熟悉了时间长了就OK了! step 1. 新建数据库,命名为Test 点击图形化界面中的新建查询,此时就可以输入 ...

随机推荐

  1. git pull、git fetch、git merge、git rebase的区别

    一.git pull与git fetch区别 1.两者的区别       两者都是更新远程仓库代码到本地. git fetch相当于是从远程获取最新版本到本地,不会自动merge. 只是将远程仓库最新 ...

  2. html href页面跳转获取参数

    //传递参数 var id = columnData.id; var companyname = encodeURI(columnData.companyname); var linename = e ...

  3. CentOs 7 yum 安装Nginx

    打开官网下载文档:http://nginx.org/en/download.html 2进入操作系统 centOs 7,建立文件夹 nginx ,进入nginx ,拷贝 上图1编辑命令:/etc/yu ...

  4. Redis集群环境各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的解决方式

    总结/朱季谦 在搭建Redis5.x版本的集群环境曾出现各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的情况,故而把解决方式记录下来. 在以下 ...

  5. Pythonweb采集

    一.访问页面 import webbrowser webbrowser.open('http://www.baidu.com/')    pip3 install requests import re ...

  6. WPF将窗口置于桌面下方(可用于动态桌面)

    WPF将窗口置于桌面下方(可用于动态桌面) 先来看一下效果: 界面元素很简单,就一个Button按钮,然后写个定时器,定时更新Button按钮中的内容为当前时间,下面来介绍下原理,和界面组成. 窗口介 ...

  7. CF812A Sagheer and Crossroads 题解

    Content 有一个十字路口,从最下面的部分开始,逆时针依次标号为 \(1,2,3,4\).每个部分有四个灯,分别为左转的灯.直行的灯.右转的灯以及人行通道灯(只有可能为红灯和绿灯).如果某个部分的 ...

  8. CF918B Radio Station 题解

    Content 有 \(n\) 个形如 \(a_i.b_i.c_i.d_i\) 的 IP 地址.有 \(m\) 条命令,每条命令由一条字符串 \(s\) 和一个形如 \(p.q.r.s\) 的 IP ...

  9. CF581B Luxurious Houses 题解

    Content 一条大街上有 \(n\) 个房子,第 \(i\) 个房子的楼层数量是 \(h_i\).如果一个房子的楼层数量大于位于其右侧的所有房屋,则房屋是豪华的.对于第 \(i\) 个房子,请求出 ...

  10. Mac 远程上传文件到 Linux

    打开Mac自带终端: 在最顶端选择Shell ->新建远程连接: 选择sftp连接,填好服务器地址: 连接成功后.上传文件,使用 put 命令: put 本地文件路径 远程主机路径