MYSql
1.查詢所有數(shù)據(jù)庫(kù)
show databases使用這個(gè)命令可以查看所有的數(shù)據(jù)庫(kù)
2.創(chuàng)建數(shù)據(jù)庫(kù)
create database renyufei創(chuàng)建數(shù)據(jù)庫(kù)
如果不指定編碼的話默認(rèn)編碼就是utf8
不過我們可以使用character set utf8
我們可以查看默認(rèn)編碼show create database renyufei
3.刪除數(shù)據(jù)庫(kù)
drop database renyufe
4.修改數(shù)據(jù)庫(kù)
alter database renyufei default character set gbk
5.查看所有表
show tables
6.創(chuàng)建表
create table student(id int,name varchar(20))
7.查看表結(jié)構(gòu)
desc student
8.刪除表
drop table student
9.修改表
9.1添加字段
alter table student add column age int
9.2刪除字段
alter table student drop column age
9.3修改字段類型
alter table 表名 modify column 字段名 類型;
9.4修改字段名稱
alter table student change column 原來字段名 修改后字段名 類型
9.5修改表名稱
alter table student rename to teacher
10增刪改數(shù)據(jù)
-- ********一、增刪改數(shù)據(jù)********* ---
-- 1.1 增加數(shù)據(jù)
-- 插入所有字段。一定依次按順序插入
INSERT INTO student VALUES(1,'張三','男',20);
-- 注意不能少或多字段值
-- INSERT INTO student VALUES(2,'李四','女');
-- 插入部分字段
INSERT INTO student(id,NAME) VALUES(2,'李四');
-- 1.2 修改數(shù)據(jù)
-- 修改所有數(shù)據(jù)(建議少用)
UPDATE student SET gender='女';
-- 帶條件的修改(推薦使用)
UPDATE student SET gender='男' WHERE id=1; -- 修改id為1的學(xué)生,修改性別為男
-- 修改多個(gè)字段,注意: SET 字段名=值,字段名=值,....
UPDATE student SET gender='男',age=30 WHERE id=2;
-- 1.3 刪除數(shù)據(jù)
-- 刪除所有數(shù)據(jù)(建議少用)
DELETE FROM student;
-- 帶條件的刪除(推薦使用)
DELETE FROM student WHERE id=2;
-- 另一種方式
-- delete from: 可以全表刪除 1)可以帶條件刪除 2)只能刪除表的數(shù)據(jù),不能刪除表的約束 3)使用delete from刪除的數(shù)據(jù)可以回滾(事務(wù))
-- truncate table: 可以全表刪除 1)不能帶條件刪除 2)即可以刪除表的數(shù)據(jù),也可以刪除表的約束 3)使用truncate table刪除的數(shù)據(jù)不能回滾
TRUNCATE TABLE student;
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增長(zhǎng)約束
NAME VARCHAR(20)
)
DESC test;
-- 1.
DELETE FROM test;
-- 2
TRUNCATE TABLE test;
INSERT INTO test(NAME) VALUES('張三');
INSERT INTO test(NAME) VALUES('張三2');
INSERT INTO test(NAME) VALUES('張三3');
11.查詢數(shù)據(jù)
-- 2.1 查詢所有列
SELECT * FROM student;
-- 2.2 查詢指定列
SELECT id,NAME,gender FROM student;
-- 2.3 查詢時(shí)指定別名(as)
-- 注意: 在多表查詢是經(jīng)常使用表的別名
SELECT id AS '編號(hào)',NAME AS '姓名' FROM student;
-- 2.4 查詢時(shí)添加常量列
-- 需求: 在查詢student表時(shí)添加一個(gè)班級(jí)列,內(nèi)容為“java就業(yè)班”
SELECT id,NAME,gender,age,'java就業(yè)班' AS '年級(jí)' FROM student;
-- 2.5 查詢時(shí)合并列
-- 需求: 查詢每個(gè)學(xué)生的servlet和jsp的總成績(jī)
SELECT id,NAME,(servlet+jsp) AS '總成績(jī)' FROM student;
-- 注意:合并列只能合并數(shù)值類型的字段al
SELECT id,(NAME+servlet) FROM student;
-- 2.6 查詢時(shí)去除重復(fù)記錄(DISTINCT)
-- 需求: 查詢學(xué)生的性別 男 女
SELECT DISTINCT gender FROM student;
-- 另一種語法
SELECT DISTINCT(gender) FROM student;
-- 需求: 查詢學(xué)生所在的地區(qū)
SELECT DISTINCT address FROM student;
-- 2.7 條件查詢(where)
-- 2.7.1 邏輯條件: and(與) or(或)
-- 需求: 查詢id為2,且姓名為李四的學(xué)生
SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集
-- 需求: 查詢id為2,或姓名為張三的學(xué)生
SELECT * FROM student WHERE id=2 OR NAME='張三'; -- 并集
-- 2.7.2 比較條件: > < >= <= = <>(不等于) between and (等價(jià)于>= 且 <=)
-- 需求: 查詢servlet成績(jī)大于70分的學(xué)生
SELECT * FROM student WHERE servlet>70;
-- 需求: 查詢jsp成績(jī)大于等于75,且小于等于90分的學(xué)生
SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
-- 另一個(gè)語法
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后)
SELECT * FROM student WHERE gender<>'男';
條件查詢
-- 2.7 條件查詢(where)
-- 2.7.1 邏輯條件: and(與) or(或)
-- 需求: 查詢id為2,且姓名為李四的學(xué)生
SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集
-- 需求: 查詢id為2,或姓名為張三的學(xué)生
SELECT * FROM student WHERE id=2 OR NAME='張三'; -- 并集
-- 2.7.2 比較條件: > < >= <= = <>(不等于) between and (等價(jià)于>= 且 <=)
-- 需求: 查詢servlet成績(jī)大于70分的學(xué)生
SELECT * FROM student WHERE servlet>70;
-- 需求: 查詢jsp成績(jī)大于等于75,且小于等于90分的學(xué)生
SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
-- 另一個(gè)語法
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后)
SELECT * FROM student WHERE gender<>'男';
-- 2.7.3 判空條件(null 空字符串): is null / is not null / ='' / <>''
-- 需求: 查詢地址為空的學(xué)生(包括null和空字符串)
-- null vs 空字符串
-- null:表示沒有值
-- 空字符串:有值的!
-- 判斷null
SELECT * FROM student WHERE address IS NULL ;
-- 判斷空字符串
SELECT * FROM student WHERE address='';
SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串)
-- 需求: 查詢有地址的學(xué)生(不包括null和空字符串)
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';
模糊查詢
-- 通常使用以下替換標(biāo)記:
-- % : 表示任意個(gè)字符
-- _ : 表示一個(gè)字符
-- 需求: 查詢姓‘張’的學(xué)生
SELECT * FROM student WHERE NAME LIKE '李%';
-- 需求: 查詢姓‘李’,且姓名只有兩個(gè)字的學(xué)生
SELECT * FROM student WHERE NAME LIKE '李_';
聚合查詢
-- 常用的聚合函數(shù): sum() avg() max() min() count()
-- 需求:查詢學(xué)生的servlet的總成績(jī) (sum() :求和函數(shù))
SELECT SUM(servlet) AS 'servlet的總成績(jī)' FROM student;
-- 需求: 查詢學(xué)生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student;
-- 需求: 查詢當(dāng)前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student;
-- 需求: 查詢最低分
SELECT MIN(servlet) AS '最低分' FROM student;
-- 需求: 統(tǒng)計(jì)當(dāng)前有多少學(xué)生(count(字段))
SELECT COUNT(*) FROM student;
SELECT COUNT(id) FROM student;
-- 注意:count()函數(shù)統(tǒng)計(jì)的數(shù)量不包含null的數(shù)據(jù)
-- 使用count統(tǒng)計(jì)表的記錄數(shù),要使用不包含null值的字段
SELECT COUNT(age) FROM student;
SELECT * FROM student;
分頁查詢
-- 2.9 分頁查詢(limit 起始行,查詢幾行)
-- 起始行從0開始
-- 分頁:當(dāng)前頁 每頁顯示多少條
-- 分頁查詢當(dāng)前頁的數(shù)據(jù)的sql: SELECT * FROM student LIMIT (當(dāng)前頁-1)*每頁顯示多少條,每頁顯示多少條;
-- 需求: 查詢第1,2條記錄(第1頁的數(shù)據(jù))
SELECT * FROM student LIMIT 0,2;
-- 查詢第3,4條記錄(第2頁的數(shù)據(jù))
SELECT * FROM student LIMIT 2,2;
-- 查詢第5,6條記錄(第3頁的數(shù)據(jù))
SELECT * FROM student LIMIT 4,2;
-- 查詢第7,8條記錄 (沒有記錄不顯示)
SELECT * FROM student LIMIT 6,2;
查詢排序
-- 語法 :order by 字段 asc/desc
-- asc: 順序,正序。數(shù)值:遞增,字母:自然順序(a-z)
-- desc: 倒序,反序。數(shù)值:遞減,字母:自然反序(z-a)
-- 默認(rèn)情況下,按照插入記錄順序排序
SELECT * FROM student;
-- 需求: 按照id順序排序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id; -- 默認(rèn)正序
SELECT * FROM student ORDER BY id DESC;-- 反序
-- 注意:多個(gè)排序條件
-- 需求: 按照servlet正序,按照jsp的倒序
SELECT * FROM student ORDER BY servlet ASC,jsp DESC;
分組查詢
-- 需求: 查詢男女的人數(shù)
-- 預(yù)期結(jié)果:
-- 男 3
--- 女 2
-- 1) 把學(xué)生按照性別分組(GROUP BY gender)
-- 2) 統(tǒng)計(jì)每組的人數(shù)(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender;
-- 2.12 分組查詢后篩選
-- 需求: 查詢總?cè)藬?shù)大于2的性別
-- 1) 查詢男女的人數(shù)
-- 2)篩選出人數(shù)大于2的記錄(having)
--- 注意: 分組之前條件使用where關(guān)鍵字,分組之前條件使用having關(guān)鍵字
SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;
數(shù)據(jù)庫(kù)約束
-- 1.1 默認(rèn)值
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
address VARCHAR(20) DEFAULT '廣州天河' -- 默認(rèn)值
)
DROP TABLE student;
-- 當(dāng)字段沒有插入值的時(shí)候,mysql自動(dòng)給該字段分配默認(rèn)值
INSERT INTO student(id,NAME) VALUES(1,'張三');
-- 注意:默認(rèn)值的字段允許為null
INSERT INTO student(id,NAME,address) VALUE(2,'李四',NULL);
INSERT INTO student(id,NAME,address) VALUE(3,'王五','廣州番禺');
SELECT * FROM student;
-- 1.2 非空
-- 需求: gender字段必須有值(不為null)
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL -- 非空
)
-- 非空字段必須賦值
INSERT INTO student(id,NAME) VALUES(1,'李四');
-- 非空字符不能插入null
INSERT INTO student(id,NAME,gender) VALUES(1,'李四',NULL);
SELECT * FROM student;
-- 1.3 唯一
CREATE TABLE student(
id INT UNIQUE, -- 唯一
NAME VARCHAR(20)
)
INSERT INTO student(id,NAME) VALUES(1,'zs');
INSERT INTO student(id,NAME) VALUES(1,'lisi'); -- ERROR 1062 (23000): Duplicate entry '1' for key 'id'
INSERT INTO student(id,NAME) VALUES(2,'lisi');
SELECT * FROM student;
-- 1.4 主鍵(非空+唯一)
DROP TABLE student;
CREATE TABLE student(
id INT PRIMARY KEY, -- 主鍵
NAME VARCHAR(20)
)
INSERT INTO student(id,NAME) VALUES(1,'張三');
INSERT INTO student(id,NAME) VALUES(2,'張三');
-- INSERT INTO student(id,NAME) VALUES(1,'李四'); -- 違反唯一約束: Duplicate entry '1' for key 'PRIMARY'
-- insert into student(name) value('李四'); -- 違反非空約束: ERROR 1048 (23000): Column 'id' cannot be null
-- 1.5 自增長(zhǎng)
CREATE TABLE student(
id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增長(zhǎng),從0開始 ZEROFILL 零填充
NAME VARCHAR(20)
)
-- 自增長(zhǎng)字段可以不賦值,自動(dòng)遞增
INSERT INTO student(NAME) VALUES('張三');
INSERT INTO student(NAME) VALUES('李四');
INSERT INTO student(NAME) VALUES('王五');
SELECT * FROM student;
-- 不能影響自增長(zhǎng)約束
DELETE FROM student;
-- 可以影響自增長(zhǎng)約束
TRUNCATE TABLE student;
-- 1.6 外鍵約束
-- 員工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptName VARCHAR(20) -- 部門名稱
)
INSERT INTO employee VALUES(1,'張三','軟件開發(fā)部');
INSERT INTO employee VALUES(2,'李四','軟件開發(fā)部');
INSERT INTO employee VALUES(3,'王五','應(yīng)用維護(hù)部');
SELECT * FROM employee;
-- 添加員工,部門名稱的數(shù)據(jù)冗余高
INSERT INTO employee VALUES(4,'陳六','軟件開發(fā)部');
-- 解決數(shù)據(jù)冗余高的問題:給冗余的字段放到一張獨(dú)立表中
-- 獨(dú)立設(shè)計(jì)一張部門表
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR(20)
)
DROP TABLE employee;
-- 修改員工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptId INT,-- 把部門名稱改為部門ID
-- 聲明一個(gè)外鍵約束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :級(jí)聯(lián)修改
-- 外鍵名稱 外鍵 參考表(參考字段)
)
INSERT INTO dept(id,deptName) VALUES(1,'軟件開發(fā)部');
INSERT INTO dept(id,deptName) VALUES(2,'應(yīng)用維護(hù)部');
INSERT INTO dept(id,deptName) VALUES(3,'秘書部');
INSERT INTO employee VALUES(1,'張三',1);
INSERT INTO employee VALUES(2,'李四',1);
INSERT INTO employee VALUES(3,'王五',2);
INSERT INTO employee VALUES(4,'陳六',3);
-- 問題: 該記錄業(yè)務(wù)上不合法,員工插入了一個(gè)不存在的部門數(shù)據(jù)
INSERT INTO employee VALUES(5,'陳六',4); -- 違反外鍵約束: Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`))
-- 1)當(dāng)有了外鍵約束,添加數(shù)據(jù)的順序: 先添加主表,再添加副表數(shù)據(jù)
-- 2)當(dāng)有了外鍵約束,修改數(shù)據(jù)的順序: 先修改副表,再修改主表數(shù)據(jù)
-- 3)當(dāng)有了外鍵約束,刪除數(shù)據(jù)的順序: 先刪除副表,再刪除主表數(shù)據(jù)
-- 修改部門(不能直接修改主表)
UPDATE dept SET id=4 WHERE id=3;
-- 先修改員工表
UPDATE employee SET deptId=2 WHERE id=4;
-- 刪除部門
DELETE FROM dept WHERE id=2;
-- 先刪除員工表
DELETE FROM employee WHERE deptId=2;
SELECT * FROM dept;
SELECT * FROM employee;
-- 級(jí)聯(lián)修改(修改)
-- 直接修改部門
UPDATE dept SET id=5 WHERE id=4;
-- 級(jí)聯(lián)刪除
-- 直接刪除部門
DELETE FROM dept WHERE id=1;
關(guān)聯(lián)查詢
-- 需求:查詢員工及其所在部門(顯示員工姓名,部門名稱)
-- 2.1 交叉連接查詢(不推薦。產(chǎn)生笛卡爾乘積現(xiàn)象:4 * 4=16,有些是重復(fù)記錄)
SELECT empName,deptName FROM employee,dept;
-- 需求:查詢員工及其所在部門(顯示員工姓名,部門名稱)
-- 多表查詢規(guī)則:1)確定查詢哪些表 2)確定哪些哪些字段 3)表與表之間連接條件 (規(guī)律:連接條件數(shù)量是表數(shù)量-1)
-- 2.2 內(nèi)連接查詢:只有滿足條件的結(jié)果才會(huì)顯示(使用最頻繁)
SELECT empName,deptName -- 2)確定哪些哪些字段
FROM employee,dept -- 1)確定查詢哪些表
WHERE employee.deptId=dept.id -- 3)表與表之間連接條件
-- 內(nèi)連接的另一種語法
SELECT empName,deptName
FROM employee
INNER JOIN dept
ON employee.deptId=dept.id;
-- 使用別名
SELECT e.empName,d.deptName
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;
-- 需求: 查詢每個(gè)部門的員工
-- 預(yù)期結(jié)果:
-- 軟件開發(fā)部 張三
-- 軟件開發(fā)部 李四
-- 應(yīng)用維護(hù)部 王五
-- 秘書部 陳六
-- 總經(jīng)辦 null
-- 2.2 左[外]連接查詢: 使用左邊表的數(shù)據(jù)去匹配右邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
-- (注意: 左外連接:左表的數(shù)據(jù)一定會(huì)完成顯示?。?SELECT d.deptName,e.empName
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
-- 2.3 右[外]連接查詢: 使用右邊表的數(shù)據(jù)去匹配左邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
-- (注意: 右外連接:右表的數(shù)據(jù)一定會(huì)完成顯示!)
SELECT d.deptName,e.empName
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
-- 2.4 自連接查詢
-- 需求:查詢員工及其上司
-- 預(yù)期結(jié)果:
-- 張三 null
-- 李四 張三
-- 王五 李四
-- 陳六 王五
SELECT e.empName,b.empName
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id;
SELECT * FROM employee;
SELECT * FROM dept;
-- 添加上司ID
ALTER TABLE employee ADD bossId INT;
UPDATE employee SET bossId=1 WHERE id=2;
UPDATE employee SET bossId=2 WHERE id=3;
UPDATE employee SET bossId=3 WHERE id=4;
時(shí)間日期相關(guān)函數(shù)

字符串相關(guān)函數(shù)

數(shù)學(xué)相關(guān)函數(shù)

存儲(chǔ)過程
-- 聲明結(jié)束符
-- 創(chuàng)建存儲(chǔ)過程
DELIMITER $
CREATE PROCEDURE pro_test()
BEGIN
-- 可以寫多個(gè)sql語句;
SELECT * FROM employee;
END $
-- 執(zhí)行存儲(chǔ)過程
CALL pro_test();
-- 3.1 帶有輸入?yún)?shù)的存儲(chǔ)過程
-- 需求:傳入一個(gè)員工的id,查詢員工信息
DELIMITER $
CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 輸入?yún)?shù)
BEGIN
SELECT * FROM employee WHERE id=eid;
END $
-- 調(diào)用
CALL pro_findById(4);
-- 3.2 帶有輸出參數(shù)的存儲(chǔ)過程
DELIMITER $
CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) -- OUT:輸出參數(shù)
BEGIN
-- 給參數(shù)賦值
SET str='helljava';
END $
-- 刪除存儲(chǔ)過程
DROP PROCEDURE pro_testOut;
-- 調(diào)用
-- 如何接受返回參數(shù)的值??
-- ***mysql的變量******
-- 全局變量(內(nèi)置變量):mysql數(shù)據(jù)庫(kù)內(nèi)置的變量 (所有連接都起作用)
-- 查看所有全局變量: show variables
-- 查看某個(gè)全局變量: select @@變量名
-- 修改全局變量: set 變量名=新值
-- character_set_client: mysql服務(wù)器的接收數(shù)據(jù)的編碼
-- character_set_results:mysql服務(wù)器輸出數(shù)據(jù)的編碼
-- 會(huì)話變量: 只存在于當(dāng)前客戶端與數(shù)據(jù)庫(kù)服務(wù)器端的一次連接當(dāng)中。如果連接斷開,那么會(huì)話變量全部丟失!
-- 定義會(huì)話變量: set @變量=值
-- 查看會(huì)話變量: select @變量
-- 局部變量: 在存儲(chǔ)過程中使用的變量就叫局部變量。只要存儲(chǔ)過程執(zhí)行完畢,局部變量就丟失?。?
-- 1)定義一個(gè)會(huì)話變量name, 2)使用name會(huì)話變量接收存儲(chǔ)過程的返回值
CALL pro_testOut(@NAME);
-- 查看變量值
SELECT @NAME;
-- 3.3 帶有輸入輸出參數(shù)的存儲(chǔ)過程
DELIMITER $
CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 輸入輸出參數(shù)
BEGIN
-- 查看變量
SELECT n;
SET n =500;
END $
-- 調(diào)用
SET @n=10;
CALL pro_testInOut(@n);
SELECT @n;
-- 3.4 帶有條件判斷的存儲(chǔ)過程
-- 需求:輸入一個(gè)整數(shù),如果1,則返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他數(shù)字,返回“錯(cuò)誤輸入”;
DELIMITER $
CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str='星期一';
ELSEIF num=2 THEN
SET str='星期二';
ELSEIF num=3 THEN
SET str='星期三';
ELSE
SET str='輸入錯(cuò)誤';
END IF;
END $
CALL pro_testIf(4,@str);
SELECT @str;
-- 3.5 帶有循環(huán)功能的存儲(chǔ)過程
-- 需求: 輸入一個(gè)整數(shù),求和。例如,輸入100,統(tǒng)計(jì)1-100的和
DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
BEGIN
-- 定義一個(gè)局部變量
DECLARE i INT DEFAULT 1;
DECLARE vsum INT DEFAULT 0;
WHILE i<=num DO
SET vsum = vsum+i;
SET i=i+1;
END WHILE;
SET result=vsum;
END $
DROP PROCEDURE pro_testWhile;
CALL pro_testWhile(100,@result);
SELECT @result;
USE day16;
-- 3.6 使用查詢的結(jié)果賦值給變量(INTO)
DELIMITER $
CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )
BEGIN
SELECT empName INTO vname FROM employee WHERE id=eid;
END $
CALL pro_findById2(1,@NAME);
SELECT @NAME;
USE day15;
SELECT * FROM student2;
-- 練習(xí): 編寫一個(gè)存儲(chǔ)過程
如果學(xué)生的英語平均分小于等于70分,則輸出'一般'
如果學(xué)生的英語平均分大于70分,且小于等于90分,則輸出‘良好’
如果學(xué)生的英語平均分大于90分,則輸出‘優(yōu)秀’
DELIMITER $
CREATE PROCEDURE pro_testAvg(OUT str VARCHAR(20))
BEGIN
-- 定義局部變量,接收平均分
DECLARE savg DOUBLE;
-- 計(jì)算英語平方分
SELECT AVG(english) INTO savg FROM student2;
IF savg<=70 THEN
SET str='一般';
ELSEIF savg>70 AND savg<=90 THEN
SET str='良好';
ELSE
SET str='優(yōu)秀';
END IF;
END $
CALL pro_testAvg(@str);
SELECT @str;
觸發(fā)器
SELECT * FROM employee;
-- 日志表
CREATE TABLE test_log(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(100)
)
-- 需求: 當(dāng)向員工表插入一條記錄時(shí),希望mysql自動(dòng)同時(shí)往日志表插入數(shù)據(jù)
-- 創(chuàng)建觸發(fā)器(添加)
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 當(dāng)往員工表插入一條記錄時(shí)
INSERT INTO test_log(content) VALUES('員工表插入了一條記錄');
-- 插入數(shù)據(jù)
INSERT INTO employee(id,empName,deptId) VALUES(7,'扎古斯',1);
INSERT INTO employee(id,empName,deptId) VALUES(8,'扎古斯2',1);
-- 創(chuàng)建觸發(fā)器(修改)
CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW -- 當(dāng)往員工表修改一條記錄時(shí)
INSERT INTO test_log(content) VALUES('員工表修改了一條記錄');
-- 修改
UPDATE employee SET empName='eric' WHERE id=7;
-- 創(chuàng)建觸發(fā)器(刪除)
CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW -- 當(dāng)往員工表刪除一條記錄時(shí)
INSERT INTO test_log(content) VALUES('員工表刪除了一條記錄');
-- 刪除
DELETE FROM employee WHERE id=7;
SELECT * FROM employee;
SELECT * FROM test_log;
-- ***********五、mysql權(quán)限問題****************
-- mysql數(shù)據(jù)庫(kù)權(quán)限問題:root :擁有所有權(quán)限(可以干任何事情)
-- 權(quán)限賬戶,只擁有部分權(quán)限(CURD)例如,只能操作某個(gè)數(shù)據(jù)庫(kù)的某張表
-- 如何修改mysql的用戶密碼?
-- password: md5加密函數(shù)(單向加密)
SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
-- mysql數(shù)據(jù)庫(kù),用戶配置 : user表
USE mysql;
SELECT * FROM USER;
-- 修改密碼
UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';
-- 分配權(quán)限賬戶
GRANT SELECT ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456';
GRANT DELETE ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456';