1

来源:互联网 发布:网络打印机怎么添加 编辑:程序博客网 时间:2024/06/05 17:24

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


0 0
原创粉丝点击