中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

php網(wǎng)站用到的知識山東最新消息今天

php網(wǎng)站用到的知識,山東最新消息今天,外掛網(wǎng)站怎么做,網(wǎng)站你懂我意思正能量晚上在線觀看不用下載免費魅族文章目錄 一、CRUD1.1 數(shù)據(jù)庫操作1.2 表操作1.2.1 五大約束1.2.2 創(chuàng)建表1.2.3 修改表1.2.3 刪除表1.2.4 表數(shù)據(jù)的增刪改查1.2.5 去重方式 二、高級查詢2.1 基礎(chǔ)查詢2.2 條件查詢2.3 范圍查詢2.4 判空查詢2.5 模糊查詢2.6 分頁查詢2.7 查詢后排序2.8 聚合查詢2.9 分組查詢2.10 聯(lián)…

文章目錄

  • 一、CRUD
    • 1.1 數(shù)據(jù)庫操作
    • 1.2 表操作
      • 1.2.1 五大約束
      • 1.2.2 創(chuàng)建表
      • 1.2.3 修改表
      • 1.2.3 刪除表
      • 1.2.4 表數(shù)據(jù)的增刪改查
      • 1.2.5 去重方式
  • 二、高級查詢
    • 2.1 基礎(chǔ)查詢
    • 2.2 條件查詢
    • 2.3 范圍查詢
    • 2.4 判空查詢
    • 2.5 模糊查詢
    • 2.6 分頁查詢
    • 2.7 查詢后排序
    • 2.8 聚合查詢
    • 2.9 分組查詢
    • 2.10 聯(lián)表查詢
    • 2.11 子查詢/合并查詢
  • 三、視圖
  • 四、觸發(fā)器
    • 4.1 要素
    • 4.2 語法
    • 4.3 例子
  • 五、權(quán)限管理
    • 5.1 創(chuàng)建用戶
    • 5.2 授權(quán)

一、CRUD

CRUD操作是指對數(shù)據(jù)庫進(jìn)行創(chuàng)建(Create)、讀取(Read)、更新(Update)和刪除(Delete)等操作的過程。

1.1 數(shù)據(jù)庫操作

創(chuàng)建、選擇、刪除數(shù)據(jù)庫

# 創(chuàng)建
CREATE DATABASE database_name DEFAULT CHARACTER SET utf8;
# 選擇
USE database_name;
# 查看數(shù)據(jù)庫
SHOW database_name;
# 刪除
DROP DATABASE database_name;

1.2 表操作

1.2.1 五大約束

1)非空約束(Not Null)
非空約束用于限制列中的值不能為空。這樣可以確保表中的特定列不包含空值。

2)自增約束(auto_increment)
可以指定初始值,沒有指定默認(rèn)是0;插入節(jié)點的時候會自增。

3)唯一約束(Unique)
唯一約束用于確保表中的某個列或一組列的取值是唯一的,但可以包含空值。一個表可以有多個唯一約束。

4)主鍵約束(Primary Key ):
主鍵約束用于標(biāo)識表中的唯一記錄。一個表只能有一個主鍵,主鍵列不能包含重復(fù)值或空值。

5)外鍵約束(Foreign Key )
外鍵約束用于維護(hù)表之間的關(guān)聯(lián)關(guān)系。它定義了一個或多個列與另一個表的主鍵或唯一鍵之間的關(guān)系。外鍵約束可以防止無效引用和維護(hù)數(shù)據(jù)的完整性。

1.2.2 創(chuàng)建表

# 創(chuàng)建表
CREATE TABLE table_name (column_name column_type);
# 顯示表的創(chuàng)建過程
SHOW CREATE TABLE table_name ;
# 獲取指定表的結(jié)構(gòu)信息
DESC table_name ;

例子

CREATE TABLE IF NOT EXISTS `schedule` (`id` INT AUTO_INCREMENT COMMENT '編號',`course` VARCHAR(100) NOT NULL COMMENT '課程',`teacher` VARCHAR(40) NOT NULL COMMENT '講師',PRIMARY KEY (`id`)
) ENGINE=innoDB DEFAULT CHARSET=utf8 COMMENT = '課程表';SELECT * FROM `schedule`;

NOT NULL表示輸入字段不能為NULL,ENGINE指定引擎,DEFAULT CHARSET指定默認(rèn)編碼方式

1.2.3 修改表

# ALTER 修改表
# 添加列:table_name是要修改的表名,column_name是要添加的列名,datatype是列的數(shù)據(jù)類型
ALTER TABLE table_name ADD column_name datatype;
# 修改列
ALTER TABLE table_name MODIFY column_name datatype;
# 刪除列
ALTER TABLE table_name DROP column_name;

例子

ALTER TABLE `schedule` ADD `begin_time` DATE DEFAULT '2022-10-24';
# 用于修改表schedule中的列begin_time的數(shù)據(jù)類型為DATE,并通過AFTER指定其放置在列id之后。
ALTER TABLE `schedule` MODIFY `begin_time` DATE AFTER `id`;  
ALTER TABLE `schedule` DROP `begin_time`;

1.2.3 刪除表

# 刪除表
DROP TABLE table_name ;
# 截斷表
TRUNCATE TABLE table_name;
# 清空表
DELETE FROM table_name;

在這里插入圖片描述

1.2.4 表數(shù)據(jù)的增刪改查

# 插入數(shù)據(jù)
INSERT INTO table_name ( field1, field2,...fieldN )VALUES( value1, value2,...valueN );
# 刪除數(shù)據(jù)
DELETE FROM table_name [WHERE condition];# 修改數(shù)據(jù)
UPDATE tableName SET field=new_value [WHERE condition]# 查詢數(shù)據(jù)
SELECT field... FROM table_name [WHERE condition]

1.2.5 去重方式

1)GROUP BY
GROUP BY 是一個在 SQL 查詢中使用的子句,用于將結(jié)果集按照一個或多個列進(jìn)行分組,并對每個分組執(zhí)行聚合函數(shù)計算。

SELECT1,2, ... 
FROM 表名
WHERE 條件
GROUP BY1,2, ...

例子,假設(shè)有一張名為 orders 的表,包含以下幾個列:order_id, customer_id, product_id, 和 order_amount。我們想要按照 customer_id 進(jìn)行分組,并計算每個客戶的訂單總金額??梢允褂?GROUP BY 來實現(xiàn)這個目標(biāo):

SELECT customer_id, SUM(order_amount) as total_amount
FROM orders
GROUP BY customer_id

查詢結(jié)果將按照 customer_id 進(jìn)行分組,并計算每個客戶的訂單總金額。SUM() 函數(shù)用于求和 order_amount 列的值。示例輸出:

+-------------+--------------+
| customer_id | total_amount |
+-------------+--------------+
|     1       |    1500      |
|     2       |    2500      |
|     3       |    1800      |
+-------------+--------------+

2)SELECT DISTINCT
SELECT DISTINCT 語句用于檢索指定列中的唯一值,即去除重復(fù)的值。它返回列中不同的值,每個值只出現(xiàn)一次。

SELECT DISTINCTFROM 表名;

例如,假設(shè)有一張名為 employees 的表,包含以下幾個列:employee_id, first_name, last_name, 和 department。我們希望獲取所有不同的部門名稱??梢允褂?SELECT DISTINCT 來實現(xiàn)這個目標(biāo):

SELECT DISTINCT department
FROM employees;

查詢結(jié)果將返回 employees 表中去重后的部門名稱。示例輸出:

+---------------+
|  department   |
+---------------+
|   Sales       |
|   Marketing   |
|   HR          |
|   Finance     |
+---------------+

二、高級查詢

結(jié)合實例,介紹高級查詢

SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (`cid` int(11) NOT NULL AUTO_INCREMENT,`caption` varchar(32) NOT NULL,PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('1', '1908班');
INSERT INTO `class` VALUES ('2', '2004班');
INSERT INTO `class` VALUES ('3', '2101班');
INSERT INTO `class` VALUES ('4', '2109班');-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`cid` int(11) NOT NULL AUTO_INCREMENT,`cname` varchar(32) NOT NULL,`teacher_id` int(11) NOT NULL,PRIMARY KEY (`cid`),KEY `fk_course_teacher` (`teacher_id`),CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('1', '數(shù)學(xué)', '1');
INSERT INTO `course` VALUES ('2', '語文', '2');
INSERT INTO `course` VALUES ('3', '英語', '4');
INSERT INTO `course` VALUES ('4', '理綜', '2');
INSERT INTO `course` VALUES ('5', '文綜', '1');-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (`sid` int(11) NOT NULL AUTO_INCREMENT,`student_id` int(11) NOT NULL,`course_id` int(11) NOT NULL,`num` int(11) NOT NULL,PRIMARY KEY (`sid`),KEY `fk_score_student` (`student_id`),KEY `fk_score_course` (`course_id`),CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '1', '1', '10');
INSERT INTO `score` VALUES ('2', '1', '2', '59');
INSERT INTO `score` VALUES ('3', '4', '5', '100');
INSERT INTO `score` VALUES ('4', '5', '4', '67');
INSERT INTO `score` VALUES ('5', '2', '2', '66');
INSERT INTO `score` VALUES ('6', '2', '1', '58');
INSERT INTO `score` VALUES ('8', '2', '3', '68');
INSERT INTO `score` VALUES ('9', '2', '4', '99');
INSERT INTO `score` VALUES ('10', '3', '1', '77');
INSERT INTO `score` VALUES ('11', '3', '2', '66');
INSERT INTO `score` VALUES ('12', '3', '3', '87');
INSERT INTO `score` VALUES ('13', '3', '4', '99');
INSERT INTO `score` VALUES ('14', '4', '1', '79');
INSERT INTO `score` VALUES ('15', '4', '2', '11');
INSERT INTO `score` VALUES ('16', '4', '3', '67');
INSERT INTO `score` VALUES ('17', '4', '4', '100');
INSERT INTO `score` VALUES ('18', '5', '1', '79');
INSERT INTO `score` VALUES ('19', '5', '2', '11');
INSERT INTO `score` VALUES ('20', '5', '3', '67');
INSERT INTO `score` VALUES ('21', '5', '5', '100');
INSERT INTO `score` VALUES ('22', '6', '1', '9');
INSERT INTO `score` VALUES ('23', '6', '2', '100');
INSERT INTO `score` VALUES ('24', '6', '3', '67');
INSERT INTO `score` VALUES ('25', '6', '4', '100');
INSERT INTO `score` VALUES ('26', '7', '1', '9');
INSERT INTO `score` VALUES ('27', '7', '2', '100');
INSERT INTO `score` VALUES ('28', '7', '3', '67');
INSERT INTO `score` VALUES ('29', '7', '4', '88');
INSERT INTO `score` VALUES ('30', '8', '1', '49');
INSERT INTO `score` VALUES ('31', '8', '2', '100');
INSERT INTO `score` VALUES ('32', '8', '3', '67');
INSERT INTO `score` VALUES ('33', '8', '4', '88');
INSERT INTO `score` VALUES ('34', '9', '1', '91');
INSERT INTO `score` VALUES ('35', '9', '2', '88');
INSERT INTO `score` VALUES ('36', '9', '5', '67');
INSERT INTO `score` VALUES ('37', '9', '4', '22');
INSERT INTO `score` VALUES ('38', '10', '1', '90');
INSERT INTO `score` VALUES ('39', '10', '2', '77');
INSERT INTO `score` VALUES ('40', '10', '3', '43');
INSERT INTO `score` VALUES ('41', '10', '4', '87');
INSERT INTO `score` VALUES ('42', '11', '1', '90');
INSERT INTO `score` VALUES ('43', '11', '2', '77');
INSERT INTO `score` VALUES ('44', '11', '5', '43');
INSERT INTO `score` VALUES ('45', '11', '4', '87');
INSERT INTO `score` VALUES ('46', '12', '1', '90');
INSERT INTO `score` VALUES ('47', '12', '2', '77');
INSERT INTO `score` VALUES ('48', '12', '3', '43');
INSERT INTO `score` VALUES ('49', '12', '5', '87');
INSERT INTO `score` VALUES ('50', '13', '3', '87');
INSERT INTO `score` VALUES ('51', '14', '2', '33');
INSERT INTO `score` VALUES ('52', '15', '3', '22');
INSERT INTO `score` VALUES ('53', '15', '5', '11');
INSERT INTO `score` VALUES ('54', '13', '1', '99');
INSERT INTO `score` VALUES ('55', '13', '2', '99');
INSERT INTO `score` VALUES ('56', '13', '4', '67');
INSERT INTO `score` VALUES ('57', '13', '5', '87');-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`sid` int(11) NOT NULL AUTO_INCREMENT,`gender` char(1) NOT NULL,`class_id` int(11) NOT NULL,`sname` varchar(32) NOT NULL,PRIMARY KEY (`sid`),KEY `fk_class` (`class_id`),CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '男', '1', '羅誼');
INSERT INTO `student` VALUES ('2', '女', '1', '戴巧');
INSERT INTO `student` VALUES ('3', '男', '1', '葉黎');
INSERT INTO `student` VALUES ('4', '男', '3', '邵柴');
INSERT INTO `student` VALUES ('5', '女', '1', '韓琪');
INSERT INTO `student` VALUES ('6', '男', '3', '尹伸');
INSERT INTO `student` VALUES ('7', '女', '2', '孫燕');
INSERT INTO `student` VALUES ('8', '男', '2', '廖寬');
INSERT INTO `student` VALUES ('9', '男', '2', '孫行');
INSERT INTO `student` VALUES ('10', '女', '2', '宋賢');
INSERT INTO `student` VALUES ('11', '男', '2', '譚國興');
INSERT INTO `student` VALUES ('12', '女', '3', '于怡瑤');
INSERT INTO `student` VALUES ('13', '男', '4', '文樂逸');
INSERT INTO `student` VALUES ('14', '男', '4', '鄒樂和');
INSERT INTO `student` VALUES ('15', '女', '5', '鄧洋洋');
INSERT INTO `student` VALUES ('16', '男', '5', '秦永福');-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (`tid` int(11) NOT NULL AUTO_INCREMENT,`tname` varchar(32) NOT NULL,PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('1', '王天一老師');
INSERT INTO `teacher` VALUES ('2', '謝小二老師');
INSERT INTO `teacher` VALUES ('3', '廖阿三老師');
INSERT INTO `teacher` VALUES ('4', '吳啟四老師');
INSERT INTO `teacher` VALUES ('5', '謝飛五老師');

在這里插入圖片描述

2.1 基礎(chǔ)查詢

-- 全部查詢
SELECT * FROM student;
-- 只查詢部分字段
SELECT `sname`, `class_id` FROM student;
-- 別名 列明 不要用關(guān)鍵字
SELECT `sname` AS '姓名' , `class_id` AS '班級ID'
FROM student;
-- 把查詢出來的結(jié)果的重復(fù)記錄去掉
SELECT distinct `class_id` FROM student;

2.2 條件查詢

-- 查詢姓名為 鄧洋洋 的學(xué)生信息
SELECT * FROM `student` WHERE `name` = '鄧洋洋';
-- 查詢性別為 男,并且班級為 2 的學(xué)生信息
SELECT * FROM `student` WHERE `gender`="男" AND `class_id`=2;

2.3 范圍查詢

-- 查詢班級id 1 到 3 的學(xué)生的信息
SELECT * FROM `student` WHERE `class_id` BETWEEN 1 AND 3;

2.4 判空查詢

SELECT * FROM `student` WHERE `class_id` IS NOT NULL; #判斷不為空
SELECT * FROM `student` WHERE `class_id` IS NULL; #判斷為空
SELECT * FROM `student` WHERE `gender` <> ''; #判斷不為空字符串
SELECT * FROM `student` WHERE `gender` = ''; #判斷為空字符串

2.5 模糊查詢

使用 LIKE 關(guān)鍵字,"%"代表任意數(shù)量的字符,”_”代表占位符

-- 查詢名字為 m 開頭的學(xué)生的信息
SELECT * FROM `teacher` WHERE `tname` LIKE '謝%';
-- 查詢姓名里第二個字為 小 的學(xué)生的信息
SELECT * FROM `teacher` WHERE `tname` LIKE '_小%';

2.6 分頁查詢

分頁查詢主要用于查看第N條 到 第M條的信息,通常和排序查詢一起使用
使用LIMIT 關(guān)鍵字,第一個參數(shù)表示從條記錄開始顯示,第二個參數(shù)表示要顯示的數(shù)目。表中默認(rèn)第一條記錄的參數(shù)為0。

-- 查詢第二條到第三條內(nèi)容
SELECT * FROM `student` LIMIT 1,2;

2.7 查詢后排序

ORDER BY field

# ASC:升序, DESC:降序
SELECT * FROM `score` ORDER BY `num` ASC;
-- 按照多個字段排序
SELECT * FROM `score` ORDER BY `course_id` DESC,`num` DESC;

2.8 聚合查詢

聚合函數(shù)描述
sum()計算某列的總和
avg()計算某列的平均值
max()計算某列的最大值
min()計算某列的最小值
count()計算某列的行數(shù)
SELECT sum(`num`) FROM `score`;
SELECT avg(`num`) FROM `score`;
SELECT max(`num`) FROM `score`;
SELECT min(`num`) FROM `score`;
SELECT count(`num`) FROM `score`;

2.9 分組查詢

-- 可以把查詢出來的結(jié)果根據(jù)某個條件來分組顯示
SELECT `gender` FROM `student` GROUP BY `gender`;
-- 分組加group_concat
SELECT `gender`, group_concat(`sname`) as name FROM `student` GROUP BY `gender`;
-- 分組加聚合
SELECT `gender`, count(*) as num FROM `student` GROUP BY `gender`;
-- 分組加條件
SELECT `gender`, count(*) as num FROM `student` GROUP BY `gender` HAVING num > 6;

2.10 聯(lián)表查詢

在這里插入圖片描述
2.10.1 INNER JOIN
只取兩張表有對應(yīng)關(guān)系的記錄

SELECT
cid
FROM
`course`
INNER JOIN `teacher` ON course.teacher_id =
teacher.tid;

2.10.2 LEFT JOIN
在內(nèi)連接的基礎(chǔ)上保留左表沒有對應(yīng)關(guān)系的記錄

SELECT
course.cid
FROM
`course`
LEFT JOIN `teacher` ON course.teacher_id = teacher.tid;

2.10.3 RIGHT JOIN
在內(nèi)連接的基礎(chǔ)上保留右表沒有對應(yīng)關(guān)系的記錄

SELECT
course.cid
FROM
`course`
RIGHT JOIN `teacher` ON course.teacher_id =
teacher.tid;

2.11 子查詢/合并查詢

2.11.1 單行子查詢

SELECT * from course WHERE teacher_id = (SELECT tid FROM teacher WHERE tname = '謝小二老師')

2.11.2 多行子查詢
多行子查詢即返回多行記錄的子查詢.

IN 關(guān)鍵字:運算符可以檢測結(jié)果集中是否存在某個特定的值,如果檢測成功就執(zhí)行外部的查詢。

EXISTS 關(guān)鍵字:內(nèi)層查詢語句不返回查詢的記錄。而是返回一個真假值。如果內(nèi)層查詢語句查詢到滿足條件的記錄,就返回一個真值( true ),否則,將返回一個假值( false )。當(dāng)返回的值為 true 時,外層查詢語句將進(jìn)行查詢;當(dāng)返回的為false時,外層查詢語句不進(jìn)行查詢或者查詢不出任何記錄。

ALL 關(guān)鍵字:表示滿足所有條件。使用 ALL 關(guān)鍵字時,只有滿足內(nèi)層查詢語句返回的所有結(jié)果,才可以執(zhí)行外層查詢語句。

ANY 關(guān)鍵字:允許創(chuàng)建一個表達(dá)式,對子查詢的返回值列表,進(jìn)行比較,只要滿足內(nèi)層子查詢中的,任意一個比較條件,就返回一個結(jié)果作為外層查詢條件。

在 FROM 子句中使用子查詢:子查詢出現(xiàn)在 from 子句中,這種情況下將子查詢當(dāng)做一個臨時表使用。

select * from student where class_id in (select cid from course where teacher_id = 2);select * from student where exists(select cid from course where cid = 5);select student_id,sname 
FROM (SELECT * FROM score WHERE course_id = 5 OR course_id = 2) AS A 
LEFT JOIN student ON A.student_id = student.sid;

三、視圖

視圖 view 不是表,是一種虛表,沒有實體,并不實際存儲數(shù)據(jù),其內(nèi)容由查詢 select 定義。用來創(chuàng)建視圖的表稱為基表,通過視圖,可以展現(xiàn)基表的部分?jǐn)?shù)據(jù)。

視圖的優(yōu)點:
1)簡單:使用視圖的用戶完全不需要關(guān)心后面對應(yīng)的表的結(jié)構(gòu)、關(guān)聯(lián)條件和篩選條件,對用戶來說已經(jīng)是過濾好的復(fù)合條件的結(jié)果集。

2)安全:使用視圖的用戶只能訪問他們被允許查詢的結(jié)果集,對表的權(quán)限管理并不能限制到某個行某個列,但是通過視圖就可以簡單的實現(xiàn)。

3)數(shù)據(jù)獨立:一旦視圖的結(jié)構(gòu)確定了,可以屏蔽表結(jié)構(gòu)變化對用戶的影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者的影響。

CREATE VIEW 視圖名 AS SELECT 語句

例如,查詢 ‘?dāng)?shù)學(xué)’ 課程比 ‘語文’ 課程成績高的所有學(xué)生的學(xué)號

CREATE VIEW view_test1 AS SELECT A.student_id FROM 
((SELECT student_id,num FROM score WHERE course_id = (SELECT cid FROM course WHERE cname = '數(shù)學(xué)') ) AS AINNER JOIN(SELECT student_id,num FROM scoreWHERE course_id = (SELECT cid FROM course WHERE cname = '語文') ) AS BON A.student_id = B.student_id
)
WHERE A.num > B.num;	SELECT * FROM view_test1;

作用:

1)權(quán)限管理。可以隱藏表結(jié)構(gòu);視圖的表結(jié)構(gòu)可以開放給用戶,但不會開放基表的表結(jié)構(gòu)。即某些表對用戶屏蔽,但是可以給該用戶通過視圖來對該表操作。

2)可復(fù)用。減少重復(fù)語句書寫;類似程序中函數(shù)的作用。

3)節(jié)約資源。一些列表的關(guān)聯(lián)查詢構(gòu)成的數(shù)據(jù)包比較大,而使用 select … from view構(gòu)成的數(shù)據(jù)包就小多了。

4)重構(gòu)利器。假如因為某種需求,需要將 user 拆成表 usera 和表 userb;如果應(yīng)用程序使用 sql 語句:select * from user那就會提示該表不存在;若此時創(chuàng)建視圖

create view user as select a.name,a.age,b.sex 
from usera as a, userb as b
where a.name=b.name; 

則只需要更改數(shù)據(jù)庫結(jié)構(gòu),而不需要更改應(yīng)用程序。

5)邏輯更清晰,屏蔽查詢細(xì)節(jié),關(guān)注數(shù)據(jù)返回。

四、觸發(fā)器

觸發(fā)器(trigger)是一種對表執(zhí)行某操作后會觸發(fā)執(zhí)行其他命令的機(jī)制。

4.1 要素

監(jiān)視對象:table
監(jiān)視事件:insert、update、delete
觸發(fā)時間:before ,after
觸發(fā)事件:insert、update、delete

4.2 語法

-- 創(chuàng)建觸發(fā)器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW
BEGINtrigger_body
END-- trigger_time: { BEFORE | AFTER }
-- trigger_event: { INSERT | UPDATE | DELETE }
-- trigger_order: { FOLLOWS | PRECEDES }
-- trigger_body:tbl_name表更新前(OLD, 列名),表更新后(NEW, 列名)-- 確認(rèn)觸發(fā)器
SHOW TRIGGERS-- 刪除觸發(fā)器
SHOW TRIGGER trigger_name

4.3 例子

DELIMITER 是在 MySQL 數(shù)據(jù)庫中使用的一個關(guān)鍵字,用于指定 SQL 語句的分隔符。它的作用是告訴 MySQL 解析器在遇到指定的分隔符時,將整個語句作為一個整體進(jìn)行處理,而不會將其中的分號視為語句的結(jié)束。通常指定 $$ 或 ||

準(zhǔn)備

-- 創(chuàng)建觸發(fā)器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW
BEGINtrigger_body
END-- trigger_time: { BEFORE | AFTER }
-- trigger_event: { INSERT | UPDATE | DELETE }
-- trigger_order: { FOLLOWS | PRECEDES }
-- trigger_body:tbl_name表更新前(OLD, 列名),表更新后(NEW, 列名)-- 確認(rèn)觸發(fā)器
SHOW TRIGGERS-- 刪除觸發(fā)器
SHOW TRIGGER trigger_name
DROP TABLE IF EXISTS `goods`;
DROP TABLE IF EXISTS `order`;CREATE TABLE `goods` (`gid` INT PRIMARY KEY auto_increment,`name` VARCHAR (32),`num` SMALLINT DEFAULT 0
);CREATE TABLE `order` (`id` INT PRIMARY KEY auto_increment,`gid` INT,`quantity` SMALLINT COMMENT '下單數(shù)量'
);DROP TRIGGER if EXISTS `trig_order_1`;
DROP TRIGGER if EXISTS `trig_order_2`;

需求1:客戶新建訂單購買的數(shù)量,商品表的庫存數(shù)量自動改變

delimiter // 
CREATE TRIGGER `trig_order_1` AFTER INSERT ON `order` FOR EACH ROW
BEGINUPDATE goods SET num = num - new.quantity WHERE gid = new.gid;
END //
delimiter ; -- 測試1:新建訂單
INSERT INTO `order` VALUES (NULL, 1, 2);
INSERT INTO `order` VALUES (NULL, 2, 2);
INSERT INTO `order` VALUES (NULL, 3, 2);SELECT * FROM `order`;

需求2:客戶修改訂單購買的數(shù)量,商品表的庫存數(shù)量自動改變

delimiter // EACH ROW
BEGINUPDATE goods SET num = num + old.quantity - new.quantity WHERE gid = new.gid;
END //
delimiter ; 
INSERT INTO `goods` VALUES (NULL, 'cat', 10);
INSERT INTO `goods` VALUES (NULL, 'dog', 10);
INSERT INTO `goods` VALUES (NULL, 'pig', 10);-- 測試2:修改訂單
UPDATE `order` SET quantity = quantity + 2 WHERE gid = 1;SELECT * FROM `goods`;

五、權(quán)限管理

5.1 創(chuàng)建用戶

CREATE USER username@host IDENTIFIED BY password; 

host 指定該用戶在哪個主機(jī)上可以登陸,如果是本地用戶可用localhost ,如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符 % ;

5.2 授權(quán)

5.2.1 對表授權(quán)

GRANT privileges ON database_name.table_name TO 'username'@'host' WITH GRANT OPTION;

privileges :用戶的操作權(quán)限,如 SELECT INSERTUPDATE 等,如果要授予所的權(quán)限則使用ALL

databasename.tablename 如果是.表示任意數(shù)據(jù)庫以及任意表;

WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權(quán)限授權(quán)給別人。注意:經(jīng)常有人在創(chuàng)建操作用戶的時候不指定WITH GRANT OPTION 選項導(dǎo)致后來該用戶不能使用 GRANT 命令創(chuàng)建用戶或者給其它用戶授權(quán)。
如果不想這個用戶有這個 grant 的權(quán)限,則不要加該 WITHGRANT OPTION 選項;

5.2.2 對視圖授權(quán)

GRANT SELECT, SHOW VIEW ON database_name.view_name TO 'username'@'host';

5.2.3 刷新權(quán)限

-- 修改權(quán)限后需要刷新權(quán)限
FLUSH PRIVILEGES;
http://www.risenshineclean.com/news/11093.html

相關(guān)文章:

  • 如何在工商局網(wǎng)站上做網(wǎng)登湖南專業(yè)關(guān)鍵詞優(yōu)化服務(wù)水平
  • 網(wǎng)站如何制作學(xué)校的做手機(jī)如何建網(wǎng)站
  • 杭州公司展廳設(shè)計公司網(wǎng)站seo優(yōu)化分析
  • 網(wǎng)站充值接口免費推廣軟件
  • 網(wǎng)站建設(shè)需要域名服務(wù)器網(wǎng)絡(luò)營銷手段有哪些方式
  • 網(wǎng)站手機(jī)app開發(fā)seo引擎搜索入口
  • 如何做盆栽蔬菜網(wǎng)站網(wǎng)站首頁快速收錄
  • 哪些網(wǎng)站適合花錢做推廣朝陽區(qū)seo技術(shù)
  • 巫山那家做網(wǎng)站厲害長沙哪里有網(wǎng)站推廣優(yōu)化
  • 互助盤網(wǎng)站開發(fā)杭州龍席網(wǎng)絡(luò)seo
  • wordpress 合法評論網(wǎng)站seo整站優(yōu)化
  • 網(wǎng)站建設(shè)平臺網(wǎng)站設(shè)計seo刷關(guān)鍵詞排名優(yōu)化
  • 慈溪高端網(wǎng)站設(shè)計百度貼吧怎么做推廣
  • 產(chǎn)品網(wǎng)站系統(tǒng)溫州最好的seo
  • 怎樣做網(wǎng)站的二維碼海豹直播nba
  • 完整的網(wǎng)站后臺權(quán)限編碼百度手機(jī)app
  • 怎么建手機(jī)網(wǎng)站鎮(zhèn)江關(guān)鍵字優(yōu)化公司
  • 用什么給網(wǎng)站做測試競價惡意點擊犯法嗎
  • 搬瓦工512m內(nèi)存wordpress北京自動seo
  • 沙田鎮(zhèn)做網(wǎng)站湖北seo診斷
  • 工信部 網(wǎng)站要獨立ip2023b站推廣大全
  • 速成網(wǎng)站-百度怎么推廣自己的視頻
  • 給公司申請網(wǎng)站用自己的賬號淮安百度推廣公司
  • .jsp網(wǎng)站開發(fā)技術(shù)疫情排行榜最新消息
  • 網(wǎng)站欄目變了怎么做跳轉(zhuǎn)競價托管推廣公司
  • 網(wǎng)站推廣及seo方案網(wǎng)站怎么進(jìn)入
  • 網(wǎng)站建設(shè)課程設(shè)計sem托管公司
  • 做網(wǎng)站的畢業(yè)論文怎么寫網(wǎng)絡(luò)廣告營銷典型案例
  • 攝影師的網(wǎng)站有哪些深圳百度seo代理
  • 互聯(lián)網(wǎng)站備案seo關(guān)鍵詞排名優(yōu)化案例