MySQL數(shù)據(jù)庫創(chuàng)建、表的創(chuàng)建、存儲過程、觸發(fā)器

一、基本內容

(1) 使用SQL語句創(chuàng)建數(shù)據(jù)庫;
(2) 為數(shù)據(jù)庫分配管理權限;
(3) 定義表和數(shù)據(jù)庫的完整性,student(學生表),course(課程表)和 sc(學生選課表),
    并設置各個表之間的聯(lián)系,設置表的主鍵和每個表對應的外鍵約束;
(4) 查看三個表的完整性,錄入三個表的元組數(shù)據(jù),觀察設置外鍵的作用;
(5) 使用 select * from student... 等SQL語句進行數(shù)據(jù)的查詢,觀察實驗結果
(6) 為eduTest數(shù)據(jù)庫的基本表創(chuàng)建視圖、索引,實現(xiàn)數(shù)據(jù)庫的完整性操作;
(7) eduTest數(shù)據(jù)庫,分配用戶權限;

二、SQL語句

1.數(shù)據(jù)庫的創(chuàng)建:

(1) 數(shù)據(jù)庫創(chuàng)建代碼:

CREATE DATABASE eduTest DEFAULT CHARACTER SET utf8;

(2)查詢數(shù)據(jù)庫:

SHOW DATABASES;
image.png

(3) 修改數(shù)據(jù)庫的默認字符集:

ALTER DATABASE eduTest DEFAULT CHARACTER SET utf8;
image.png
ALTER DATABASE eduTest DEFAULT CHARACTER SET gbk;
image.png

2.數(shù)據(jù)庫中表建立的代碼:

(1)course表:

CREATE TABLE course(
    id INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(20) NOT NULL UNIQUE,
    presourse VARCHAR(20) NOT NULL,
    remark VARCHAR(40)
);
image.png

(2)student表:

CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    sno INT(8) ZEROFILL NOT NULL,
    sname VARCHAR(20) NOT NULL,
    sId INT ,
    CONSTRAINT student_course_fk FOREIGN KEY(sId) REFERENCES course(id)  
);
image.png

(3)sc表

CREATE TABLE sc(
    scId INT PRIMARY KEY AUTO_INCREMENT,
    sno INT(8) ZEROFILL NOT NULL,
    grade INT NOT NULL,
    courseId INT NOT NULL,
    remark VARCHAR(20),
    CONSTRAINT sc_course_fk FOREIGN KEY(courseId) REFERENCES course(id)
);
image.png

3. 外鍵的約束

image.png
由于courseId作為外鍵參考于course表的id,當添加的courseId的值在course表中id 不存在時,當前值是不能插入到數(shù)據(jù)庫當中去的。

4.在數(shù)據(jù)庫eduTest中創(chuàng)建視圖便于對數(shù)據(jù)的保護:

(1)將student表中的某些字段單獨提取出來作為給數(shù)據(jù)庫用戶使用的基本 表,便于對重要字段的素具進行保密:

Cs系的student_sc視圖:

/*為每一個系的學生分別創(chuàng)建視圖*/
CREATE VIEW student_sc AS SELECT student.* FROM student WHERE student.sdept='cs';
image.png

Is系的student_is視圖:

CREATE VIEW student_is AS SELECT student.* FROM student WHERE student.sdept='is';
image.png

Net系的student_net視圖:

CREATE VIEW student_net AS SELECT student.* FROM student WHERE student.sdept='net'; 
image.png

Soft系的student_soft視圖:

CREATE VIEW student_soft AS SELECT student.* FROM student WHERE student.sdept='soft'; 
image.png

5.視圖的作用

(1)試圖能夠簡化用戶的操作;效果:視圖機制使用戶可以把主要的精力花費在數(shù)據(jù)上,而不是直接來自哪個基本表。
(2)視圖能使用戶從多種角度去分析數(shù)據(jù)的作用;
效果:在許多用戶同時訪問同一數(shù)據(jù)的時候比較重要。
(3)試圖對重構的數(shù)據(jù)庫提供了一定程度的邏輯性;
效果:可以增加表的字段,也可以在創(chuàng)建視圖的時候摘要自己需要的數(shù)據(jù)項。
(4)試圖能夠對機密數(shù)據(jù)進行安全性保護;
效果:可以將機密的字段進行保護,可以不用顯示給用戶。
(5)適當?shù)倪\用視圖可以更清晰的表達查詢;

6.創(chuàng)建數(shù)據(jù)庫更新操作的日志表

/創(chuàng)建日志表信息對表操作完成后觸發(fā)寫進日志表/

CREATE TABLE text_log(
    id INT PRIMARY KEY AUTO_INCREMENT, 
    opra_table VARCHAR(20) NOT NULL,
    opra_type VARCHAR(20) NOT NULL,
    opra_remark VARCHAR(20)
);

7.創(chuàng)建存儲過程

/創(chuàng)建批插入的存儲過程,觸發(fā)插入操作對應的觸發(fā)器/

DELIMITER $
CREATE PROCEDURE insert_student(IN sno_start INT, IN sno_end INT)
 BEGIN
    DECLARE i INT DEFAULT 0;
    SET i=sno_start;
    WHILE i<=sno_end DO
        INSERT INTO student(sno,sname,sage,ssex,sdept) 
        VALUE(i,'安雨軒',18+i-sno_start,'女','net');
        SET i=i+1;
    END WHILE;
 END 
$

/創(chuàng)建批刪除的存儲過程,觸發(fā)刪除操作對應的觸發(fā)器/

DELIMITER $
CREATE PROCEDURE delete_student(IN sno_start INT, IN sno_end INT)
 BEGIN
    DECLARE i INT DEFAULT 0;
    SET i=sno_start;
    WHILE i<=sno_end DO
         DELETE FROM student WHERE student.sno=i;
         SET i=i+1;
    END WHILE;
 END 
$

8.觸發(fā)器的創(chuàng)建:
/創(chuàng)建student表插入的觸發(fā)器/

CREATE TRIGGER trigger_insert_student AFTER INSERT ON student FOR EACH ROW 
INSERT INTO text_log(opra_table,opra_type,opra_remark) VALUE('student','insert','插入');

/刪除觸發(fā)器pro_insert_student/

DROP TRIGGER trigger_insert_student;

/創(chuàng)建student表刪除的觸發(fā)器/

CREATE TRIGGER trigger_delete_student AFTER DELETE ON student FOR EACH ROW 
INSERT INTO text_log(opra_table,opra_type,opra_remark) VALUE('student','delete','刪除');

/創(chuàng)建student_test表刪除的觸發(fā)器/

CREATE TRIGGER trigger_delete_student_test AFTER DELETE ON student_test FOR EACH ROW
 INSERT INTOtext_log(opra_table,opra_type,opra_remark) VALUE('student','delete','刪除');
DELETE FROM student_test WHERE student_test.sno=04151079;

/創(chuàng)建student_test表插入的觸發(fā)器/

CREATE TRIGGER trigger_insert_student_test AFTER INSERT ON student_test FOR EACH ROW 
INSERT INTO text_log(opra_table,opra_type,opra_remark) VALUE('student','insert','插入');

/刪除觸發(fā)器pro_insert_student_test/

DROP TRIGGER trigger_insert_student_test;
SELECT * FROM text_log;
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容