1. 程式人生 > >mysql-表、ER圖、索引與檢視的基礎操作

mysql-表、ER圖、索引與檢視的基礎操作

1、建立資料庫以及表
建立資料庫和使用資料庫:
dropdatabase if exists dingbao;
createdatabase dingbao;
         use dingbao;
建立資料表和插入資料:關鍵在於給報紙訂閱表中設定cno和pno為外來鍵。
droptable if exists paper;
droptable if exists cp;
droptable if exists customer;
 
createtable paper(
         pno varchar(10) not null,
    pna varchar(10) not null,
    ppr float not null,
    primary key(pno)
    )engine = InnoDB;
 
insertinto paper values("000001", "人民日報", 12.5),
                                                        ("000002","解放軍報", 14.5),
                        ("000003","光明日報", 10.5),
                        ("000004","青年報", 11.5),
                        ("000005","揚子日報", 18.5);
 
 create table customer(
         cno varchar(10) not null,
    cna varchar(10) not null,
    adr varchar(20) not null,
    primary key(cno)
    )engine = InnoDB;
 
insertinto customer values("0001", "李濤", "無錫市解放東路123號"),
                                                           ("0002", "錢金浩","無錫市人民西路234號"),
                           ("0003","鄧傑", "無錫市惠河路432號"),
                           ("0004","朱海紅", "無錫市中山東路432"),
                           ("0005","歐陽陽文", "無錫市中山東路532號");
 
createtable cp(
         cno varchar(10) not null,
    pno varchar(10) not null,
    num int default 1,
    primary key(cno, pno),
    foreign key(cno) references customer(cno),
    foreign key(pno) references paper(pno)
    )engine = InnoDB;
 
insertinto 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);
執行結果:
資料表paper:


資料表cp:


資料表customer:


 
2、建立和使用檢視
(1)、建立檢視:
createview C_P_N(cno, cna, pno, pna, num)
as selectcp.cno, customer.cna, cp.pno, paper.pna, cp.num
frompaper, cp, customer
         wherecustomer.cno = cp.cno and cp.pno = paper.pno;


 
(2)、修改檢視:
alterview C_P_N(cno, cna, pno, pna, ppr, num)
as selectcp.cno, customer.cna, cp.pno, paper.pna, paper.ppr, cp.num
from paper,cp, customer
         wherecustomer.cno = cp.cno and cp.pno = paper.pno;


(3)、查詢人民日報:
selectdistinct cp.cno, customer.cna, customer.adr, cp.pno, paper.pna, paper.ppr,cp.num
frompaper, cp, customer
         where pna ="人民日報" and paper.pno = cp.pno and cp.cno = customer.cno;


 
修改檢視:
updateC_P_N set num = 3 where cna = "李濤" and pna ="人民日報";
    update C_P_N setpna = "公民日報" where pna = "人民日報";
結果執行報錯,不能修改檢視中的資料。
但是關閉安全模式後就可以更新了,注意更新完之後要重新開啟安全模式,程式碼為:
setsql_safe_updates = 0;
updateC_P_N set num = 3 where cna = "李濤" and pna ="人民日報";
updateC_P_N set pna = "公民日報" where pna = "人民日報";
         setsql_safe_updates = 1;
要注意的是這句話不是在命令列中執行的,要寫在指令碼中才可以。
 
結果為:


(4)、刪除檢視:
         drop viewC_P_N;
 
3、建立資料庫ER圖
直接使用逆向工程生成ER圖,在database中,一路next,選擇資料庫直接建立: