1.创建数据库后再在数据库下创建三个表格:以下是实现的SQL语句:
a.创建数据库,并使用数据库:
create database DingBao;
use DingBao;
b.创建表一,并显示出来
create table `报纸编码表(paper)` (`报纸编号(pno)` varchar(50) primary key not null,
`报纸名称(pna)` varchar(50) not null,`单价(ppr)` double not null);
insert into `报纸编码表(paper)` values('000001','人民日报',12.5),('000002','解放军报 ',14.5),('000003','光明日报',10.5),
('000004','青年报',11.5),('000005','扬子日报',18.5);
select *from `报纸编码表(paper)`;
c.创建表二,并显示出来
create table `顾客编码表(customer)`(`顾客编号(cno)` varchar(50) not null primary key,
`顾客姓名(cna)` varchar(50) not null,`顾客地址(adr)` varchar(100) not null);
insert into `顾客编码表(customer)` values('0001','李涛','无锡市解放东路123号'),
('0002','钱金浩','无锡市人民西路234号'),('0003','邓杰','无锡市惠河路432号'),
('0004','朱海红','无锡市中山东路432号'),('0005','欧阳阳文','无锡市中山东路532号');
select *from `顾客编码表(customer)`;
d.创建表三,并显示出来:
create table `顾客订阅表(cp)`(`顾客编号(cno)` varchar(50) not null default 1,
`报纸编号(pno)` varchar(50) not null ,`订阅份数(num)` int not null,
primary key(`顾客编号(cno)`,`报纸编号(pno)`),
foreign key (`顾客编号(cno)`) references `顾客编码表(customer)`(`顾客编号(cno)`),
foreign key(`报纸编号(pno)`) references `报纸编码表(paper)`(`报纸编号(pno)`));
insert into `顾客订阅表(cp)` values('0001','000001',2),('0001','000002',4),
('0001','000005',6),('0002','000001',2),('0002','000003',2),('0002','000005',2),
('0003','000003',2),('0003','000004',4),('0004','000001',1),('0004','000003',3),
('0004','000005',2),('0005','000003',4),('0005','000002',1),('0005','000004',3),
('0005','000005',5),('0005','000001',4);
select *from `顾客订阅表(cp)`;
e.创建的三个表格:
2.创建视图,并对视图进行一定处理:
a.创建一个上面所建数据库中的视图:
CREATE VIEW `c_p_n` AS
SELECT
`顾客编码表(customer)`.`顾客编号(cno)` AS `顾客编号(cno)`,
`顾客编码表(customer)`.`顾客姓名(cna)` AS `顾客姓名(cna)`,
`报纸编码表(paper)`.`报纸编号(pno)` AS `报纸编号(pno)`,
`报纸编码表(paper)`.`报纸名称(pna)` AS `报纸名称(pna)`,
`顾客订阅表(cp)`.`订阅份数(num)` AS `订阅份数(num)`
FROM
((`顾客编码表(customer)`
JOIN `报纸编码表(paper)`)
JOIN `顾客订阅表(cp)`)
WHERE
((`顾客编码表(customer)`.`顾客编号(cno)` = `顾客订阅表(cp)`.`顾客编号(cno)`)
AND (`报纸编码表(paper)`.`报纸编号(pno)` = `顾客订阅表(cp)`.`报纸编号 (pno)`));
b.显示视图结果:
desc `c_p_n`;
c.修改视图,增加报纸单价属性:通过alter命令
alter VIEW `c_p_n` AS
SELECT
`顾客编码表(customer)`.`顾客编号(cno)` AS `顾客编号(cno)`,
`顾客编码表(customer)`.`顾客姓名(cna)` AS `顾客姓名(cna)`,
`报纸编码表(paper)`.`报纸编号(pno)` AS `报纸编号(pno)`,
`报纸编码表(paper)`.`报纸名称(pna)` AS `报纸名称(pna)`,
`顾客订阅表(cp)`.`订阅份数(num)` AS `订阅份数(num)`,
`单价(ppr)` AS `单价(ppr)`
FROM
((`顾客编码表(customer)`
JOIN `报纸编码表(paper)`)
JOIN `顾客订阅表(cp)`)
WHERE
((`顾客编码表(customer)`.`顾客编号(cno)` = `顾客订阅表(cp)`.`顾客编号 (cno)`)
AND (`报纸编码表(paper)`.`报纸编号(pno)` = `顾客订阅表(cp)`.`报纸 编号(pno)`));
通过desc `c_p_n`;
再次显示视图结果:
d.修改视图:查询人民日报的订阅情况:
select *from `c_p_n` where `报纸名称(pna)`='人民日报';
更改订阅分数:
以上面表格为例,修改姓名为李涛,报纸为人民日报的订阅份数为25:
update `c_p_n` set `订阅份数(num)`=25 where `顾客姓名(cna)`='李涛' and `报纸名称(pna)`='人民日报;
更改报纸名称:
update `c_p_n` set `报纸名称(pna)`='青年报' where `报纸名称(pna)`='人民日报';
e.最后删除视图:
drop view `c_p_n`;
实验过程中所遇到的问题:
使用MySQL执行update的时候报错:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect. 网上搜的,知在使用mysql执行update的时候,如果不是用主键当where语句,会报这种错误,使用主键用于where语句中正常。这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式。如果想要提高数据库安全等级,可以在恢复回原有的设置,执行命令:SET SQL_SAFE_UPDATES = 1; 也就是说这个SQL_SAFE_UPDATES是数据库安全的等级值,就类似于JavaScript中也有use strict关键字来禁止一些不希望使用的不够安全的操作一样吧。
搜索答案来源于:
http://jingyan.baidu.com/article/e5c39bf58ed69239d76033a4.html