查看本章节

查看作业目录


需求说明:

  • 使用 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. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  2. 【C/C++】编码(腾讯)

    假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, - -, b, ba, ...

  3. array_filter()用法

    第一种情况: 通过函数,过滤数组中的元素 array_filter($arr,'函数名称') 函数里可以写相应的过滤原则,下面举个栗子,过滤掉不是数字的元素 $arr=array('a','b','c ...

  4. [BUUCTF]REVERSE——[FlareOn6]Overlong

    [FlareOn6]Overlong 附件 步骤: 例行检查,32位程序,不懂是个啥 32位ida载入,main函数很简单 处理函数 sub_401000 程序只对unk_402008的28位进行了处 ...

  5. 『忘了再学』Shell基础 — 2、Shell的作用与分类

    目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...

  6. 项目的基本概念(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 我一看到这个标题就头疼,好吧,又是概念,好在我不要参加相关的考试,否则文字连同标点符号都得背%¥#%#~ 张同学说,项目& ...

  7. CF363A Soroban 题解

    Content 给出一个数 \(n\),请你用算盘来表示 \(n\). 这里的算盘和普通的算盘一样,只不过竖着摆放罢了.左边只有一个珠子,每个珠子表示 \(5\):右边有四个珠子,每个珠子表示 \(1 ...

  8. maven 常用编译

    mvn -B clean package -Dspecific -DskipTests -P test

  9. java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例

    什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...

  10. Python3 面向对象之-----元类

    元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class ObjectCreator(object ...