使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表,并对其进行操作
查看本章节
查看作业目录
需求说明:
- 使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表
- 使用 DML 语句分别新增一条仓库表、供应商表、产品表和入库表记录
- 使用 DML 语句更新满足指定条件的产品进货单价
- 删除一条供应商记录(例如“丁供应商”)
实现思路:
- 入库表中字段仓库名(dName)、供应商名(pName)和产品编号(goodsID)分别参照仓库表、供应商表和产品表
- 新增一条产品记录的 DML 语句
- 以下 DML 语句将创维公司产品的进货单价打 95 折
- 删除供应商数据需要特别注意删除主表数据所引发的删除异常问题。由于供应商数据被入库表记录所引用,因此需要首先将入库表中引用了欲删除供应商的那些入库记录的供应商信息置为 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 语句分别创建仓库表、供应商表、产品表和入库表,并对其进行操作的更多相关文章
- 抓取oracle建表语句及获取建表ddl语句
抓取oracle建表语句及获取建表ddl语句 1.抓取代码如下: 1.1.产生表的语法资料 DECLARE-- v_notPartTable VARCHAR2(1000):= '&2'; -- ...
- MySQL之使用DDL语句创建表
一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...
- MySQL使用DDL语句创建表
一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...
- MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别
DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...
- oracle之 获取建表ddl语句
第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...
- oracle 之 cursor:创建存储过程批量执行DDL语句
说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...
- Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性
早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...
- mysql系统表加trigger和对特定的库禁用 DDL 语句
给 mysql 系统表加上 trigger 1 Reply 默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的.会提示 ERROR 1465 (HY000): Trigg ...
- 2013年10月13日学习:SQL通过命令语句来创建表
优点:操作简单,不容易出错,易于调试 缺点:需要记住命令.命令多了就容易混淆,是吧!但是熟悉了时间长了就OK了! step 1. 新建数据库,命名为Test 点击图形化界面中的新建查询,此时就可以输入 ...
随机推荐
- Excel 数据验证:分类选择及输入限制
几个简单设置让你的数据不再出错 如何快速选择某一大类中的细分小类 多级菜单 注意:引用可以创建二级目录,但是引用前应先用公式定义名称,然后引用,引用只能在本sheet操作.
- JAXB—Java类与XML文件之间转换
JAXB-Java类与XML文件之间转换 简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...
- Oracle—表、约束、索引、表空间、分区、序列、统计信息
表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...
- 二叉树——Java实现
1 package struct; 2 3 interface Tree{ 4 //插入元素 5 void insert(int value); 6 //中序遍历 7 void inOrder(); ...
- Linux基础命令---mailq显示邮件队列
mailq mailq指令可以显示出待发送的邮件队列. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 mailq 2.选项参数列表 ...
- spring注解-自动装配
Spring利用依赖注入(DI)完成对IOC容器中中各个组件的依赖关系赋值 一.@Autowired 默认优先按照类型去容器中找对应的组件(applicationContext.getBean(Boo ...
- APiCloud - api对象
详见网址:https://www.cnblogs.com/jiqing9006/p/5919317.html
- jQuery - 的几种删除方法,还有他们的区别
1.empty() 清空节点,它能清空元素中的所有后代节点,不能删除自己本身这个节点 2.remove() 该节点与该节点所包含的所有后代节点将同时被删除,提供传递一个筛选的表达式,删除指定合集中的元 ...
- 【C/C++】two pointers/归并排序/原理/理解/实现/算法笔记4.6
1.two pointers 思路:对序列进行扫描的时候,根据序列本身的特性用两个下标i和j对序列进行扫描,从而降低算法复杂度. ·例1 在递增序列中找a + b = M while (i<j) ...
- C#生成pdf -- iText7 设置自定义字体和表格
itextsharp已经不再更新,由iText 7来替代 安装 nuget 安装 itext7 注册自定义字体 下载字体文件 .ttc或.ttf到项目目录,设置更新则拷贝到输出目录,这样构建的时候会把 ...