日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库入门(二)

發(fā)布時間:2024/9/21 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库入门(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.數(shù)據(jù)約束

? a.默認值約束

? ??默認值(default)

? ? ?CREATE TABLE test(

???????? NAME VARCHAR(20),

???????? gender VARCHAR(2) DEFAULT ''

? ? ? ? )

? ? 注:當前沒有插入默認值字段的時候,默認值才會起作用

?b.非空約束

? ??非空(not null)

? ? ? CREATE TABLE test(

? ? ? ? ? NAME VARCHAR(20) NOT NULL,

? ? ? ? ? gender VARCHAR(2)

? ? ? ? ?)

? ? ?注:不能不插入值,不能插入null

?c.唯一約束

? ? 唯一(unique)

? ? CREATE TABLE test(

???????? idINT UNIQUE,

???????? NAMEVARCHAR(20)

? ? )

? ? 注:不能插入重復的值,唯一約束不能約束null(可以插入多個null)

?d.主鍵約束

? ? 唯一+非空(primary key)

? ?CREATE TABLE test(

???????? idINT PRIMARY KEY,

???????? NAMEVARCHAR(20)

? ? )

?e.自增長約束

? ? CREATE TABLE test(

???????? idINT PRIMARY KEY AUTO_INCREMENT,

???????? NAMEVARCHAR(20)

? ? ? ?)

? ? ? 注:初始值為0,每次遞增1

?f.外鍵約束

? ?外鍵作用:約束兩種表的數(shù)據(jù)

? ? -- 部門表

? ? CREATE TABLE dept(

???????? idINT PRIMARY KEY AUTO_INCREMENT,

???????? NAMEVARCHAR(20)

? ? ?)

? ? -- 雇員表

? ? CREATE TABLE employee(

???????? idINT PRIMARY KEY AUTO_INCREMENT,

???????? NAMEVARCHAR(20),

???????? deptIdINT,

???????? CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCESdept(id)

???????? -- ? ? ? ? ? ? ? ? ? ? ? 外鍵名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?外鍵字段? 參考?????????

? ? ?)

? ? 注:有了外鍵約束之后,當往副表中插入,修改主表不存在的數(shù)據(jù)時外鍵就會起作用,當刪除與副表 ?有關的主表數(shù)據(jù)時,外鍵起作用。當插入和修改數(shù)據(jù)時,應先向主表中添加;當刪除數(shù)據(jù)時應該先刪除 ? ?副表中的數(shù)據(jù)。

2.級聯(lián)

? ?介紹:當有了外鍵的時候,我們希望修改或刪除數(shù)據(jù)的時候,修改或刪除了主表的數(shù)據(jù),同時能夠影響 ? 副表的數(shù)據(jù),這時就可以使用級聯(lián)。

? CREATE TABLE employee(

???????? idINT PRIMARY KEY AUTO_INCREMENT,

???????? NAMEVARCHAR(20),

???????? deptIdINT,

???????? --添加級聯(lián)修改 ON UPDATE CASCADE

???????? --添加級聯(lián)刪除: ON DELETE CASCADE

???????? CONSTRAINTemployee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE ? ? ? CASCADE ON DELETE CASCADE

???????? -- ? ? ? ? ? ? ? ? ? ? ? ? ? ??外鍵名稱???????????????????? 外鍵字段? 參考?????????

? ? ? ? ? )

3.數(shù)據(jù)庫設計的三大范式 ? ?

? ??第一范式:要求表的每個字段必須獨立的不可分割的單元。

? ?第二范式:在第一范式的基礎上,要求表的除主鍵以外的字段都和主鍵有依賴關系的。

? ?第三范式:在第二范式基礎上,要求表的除主鍵外的字段都只能和主鍵有直接決定的依賴關系。

4.多表查詢

? ?a.交叉連接查詢(笛卡爾乘積: 4*3=12,產(chǎn)生笛卡爾積的原因是沒有足夠的連接條件)

? ? ?SELECT employee.name,dept.name FROMemployee,dept;

? ?b.內(nèi)連接查詢

? ? ??效果:只有滿足連接條件的數(shù)據(jù)才會顯示出來

? ? ??SELECT e.name,d.name

???????? FROMemployee e,dept d

???????? WHEREe.deptId=d.id;

? ? ?-- 另一種表達

? ? ? SELECT e.name,d.name

???????? FROMemployee e

???????? INNERJOIN dept d

???????? ON e.deptId=d.id;

? ?c.左外連接查詢

? ? ??介紹: 右表(部門表)的數(shù)據(jù)全部顯示,左表(員工)的數(shù)據(jù)當滿足連接條件的時候,就顯示滿足 ? ? ? ?條件的數(shù)據(jù),但是如果不滿足連接條件,則顯示null

? ? ? SELECT d.name,e.name

???????? FROMdept d

???????? LEFTOUTER JOIN employee e

???????? ON d.id=e.deptId;

? ? d.自連接查詢

? ? ? ??SELECT e.name AS '員工',b.name AS '上司'

???????? FROMemployee e

???????? LEFTOUTER JOIN employee b

? ? ? ? ? ? ON e.bossId=b.id;

? ? ? -- ?查詢員工姓名及其上司姓名(沒有上司的員工也顯示

4.MySQL存儲過程

? ? a.特點:

? ? ? ?①.存儲過程保存到數(shù)據(jù)庫服務器端,通過數(shù)據(jù)庫客戶端工具調(diào)用存儲過程

? ? ?②.存儲過程的效率會非常高,因為存儲過程是在數(shù)據(jù)庫服務器端執(zhí)行。

? ? ? ??③.存儲過程的移植性非常差的

? ?b.存儲過程語法

? ? ??創(chuàng)建存儲過程

? ? ? -- 定義結束符號

? ? ? DELIMITER 結束符號

? ? ? CREATE PROCEDURE 存儲過程名稱 (形式參數(shù)列表)

? ? ? BEGIN

? ? ? ? ? ?多個sql語句

? ? ? END 結束符號

? ? ? -- 調(diào)用存儲過程

? ? ? CALL 存儲過程名稱(實際參數(shù)列表);

??參數(shù)類型

? ? ?IN: 輸入?yún)?shù),可以攜帶數(shù)據(jù)到存儲過程中

? ? ?OUT: 輸出參數(shù),可以攜帶數(shù)據(jù)到存儲過程外面

? ? ? ? INOUT: 輸入輸出參數(shù)

? ?c.幾種常見存儲過程

? ? ?.?帶有輸入?yún)?shù)的存儲過程

? ? ? ??-- ?傳入員工id查詢對應的員工

? ? ? ? DELIMITER $

? ? ? ? CREATE PROCEDURE pro_testByIn(IN eidINT)? -- 參數(shù)類型(IN 參數(shù)名稱 數(shù)據(jù)類型(int)

? ? ? ? BEGIN

? ? ? ? ? ? ? SELECT* FROM employee WHERE id=eid;

? ? ? ? END $

? ? ? ? -- 調(diào)用

? ? ? ? CALL pro_testByIn(2);

?

? ? .帶有輸出參數(shù)的存儲過程

? ? ? ? DELIMITER $

? ? ? ? CREATE PROCEDURE pro_testByOut(OUT nVARCHAR(20))

? ? ? ? BEGIN

? ? ? ? ? ? --修改變量n

? ? ? ? ? ? SETn = '輸出參數(shù)';

? ? ? ? END $

? ?③.帶有輸入輸出參數(shù)的存儲過程

? ? ? ?DELIMITER $

? ? ? ?CREATE PROCEDURE pro_testByInOut(INOUT nVARCHAR(20))

? ? ? ?BEGIN

? ? ? ? ? ? --查看n變量

? ? ? ? ? ? ?SELECTn;

? ? ? ? ? ? --修改n變量

? ? ? ? ? ? SETn = '500';

? ? ? ?END $

? ? ? ?-- 定義會話變量調(diào)用存儲過程

? ? ? ?SET @n='100';

? ? ? ?CALL pro_testByInOut(@n);

? ? ? ?-- 查看n

? ? ? ? ? ?SELECT @n;

? ?④.帶有判斷條件的存儲過程

? ? ? ? --?輸入一個num整數(shù),num=1 ,輸出‘星期一’,num=2,輸出‘星期二’,num=3,輸出‘星期 ??

? ? ? ? -- 三’,否則,輸出‘錯誤參數(shù)’

? ? ? ?DELIMITER $

? ? ? ?CREATE PROCEDURE pro_testByIf(IN numINT,OUT str VARCHAR(20))

? ? ? ?BEGIN

? ? ? ? ? ? ? IFnum=1 THEN

? ? ? ? ? ? ? ? ? ? ?SETstr = '星期一';

? ? ? ? ? ? ? ELSEIFnum= 2 THEN

? ? ? ? ? ? ? ? ? ? ?SETstr ='星期二';

? ? ? ? ? ? ? ELSEIFnum=3 THEN

? ? ? ? ? ? ? ? ? ? ?SETstr = '星期三';

? ? ? ? ? ? ? ELSE

? ? ? ? ? ? ? ? ? ? ?SETstr = '錯誤參數(shù)';

? ? ? ? ? ? ENDIF;

? ? ? END $

? ? ? CALL pro_testByIf(5,@str);

? ? ? SELECT @str;

? ?⑤.帶有循環(huán)條件的存儲過程

? ? ? ?-- ?輸入一個num,計算從1到num的總和。

? ? ? DELIMITER $

??????CREATE PROCEDURE pro_testByWhile(IN numINT,OUT score INT)

???? ?BEGIN

? ? ? ? ? ?? ?-- 定義局部變量

? ? ? ? ? ? ?DECLARE i INT DEFAULT 1;

???????? ????DECLAREresult INT DEFAULT 0;

???????????? WHILEi<=num DO

????????????????? ????SETresult = result + i;

????????????????? ????SETi = i+1;

???????????? ENDWHILE;

???????? ????SETscore = result;

???? END $

?????CALL pro_testByWhile(200,@score);

????????SELECT @score;

??⑥.攜帶數(shù)據(jù)庫的數(shù)據(jù)給輸出參數(shù)(INTO)

? ? ? -- 需求: 傳入員工id,查詢對應的員工,輸出員工姓名

?????DELIMITER $

???? CREATE PROCEDURE pro_testByData(IN eidINT,OUT sname VARCHAR(20))

???? BEGIN

???????? ? ? ?SELECTNAME INTO sname FROM employee WHERE id=eid;

???? END $

?

???? CALL pro_testByData(2,@sname);

????????SELECT @sname;

?d.mysql數(shù)據(jù)庫三種變量:

? ? ? ? ?①.全局變量。mysql內(nèi)置的變量,mysql程序關閉的時候全局變量才會失效。

? ? ? ? ? ? ? ? ? ? ? ? ? show variables:查看全局變量

? ? ? ? ? ? ? ? ? ? ? ? ? character_set_client: mysql接收的客戶端的數(shù)據(jù)編碼

? ? ? ? ? ? ? ? ? ? ? ? ? character_set_results mysql使用什么編碼輸出給客戶端數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ??查看某個全局變量select @@變量名

? ? ? ? ? ? ? ? ? ? ? ??修改某個全局變量set @@變量名=

? ? ? ? ?②.會話變量。變量只在某次登錄的會話中有效!退出連接,會話變量數(shù)據(jù)失效。??

????????????????? ??????查看某個會話變量 select @變量名

???????? ?????????? ? ??修改/定義某個會話變量 set @變量名=

???????? ③. 局部變量:在存儲過程中定義的變量。存儲過程結束局部變量失效

????????????????? ?????? 查看某個局部變量 select 變量名

???????? ?????????? ? ? ? 修改某個局部變量 set 變量名=

??? ??

5.觸發(fā)器

? ? 定義:當往員工表插入/修改/刪除一條數(shù)據(jù)的時候,同時往日志表記錄下來,這時就要使用觸發(fā)器完 ? ? ? 成。

? ? 觸發(fā)器語法


? ? ? ? --?當往員工表插入一條數(shù)據(jù)時,往員工日志插入一條記錄。

? ? ? ??-- 員工日志表

????????CREATE TABLE emp_log(

???????????????? idINT PRIMARY KEY AUTO_INCREMENT,

? ? ? ? contentVARCHAR(20)

????????)


? ? ? ? -- 創(chuàng)建增加觸發(fā)器

???? ? ?CREATE TRIGGER tri_empAdd AFTER INSERT ONemployee FOR EACH ROW

???????????????? INSERTINTO emp_log(content) VALUES('員工被插入了一條記錄');

????????-- 創(chuàng)建修改觸發(fā)器

????????CREATE TRIGGER tri_empUpd AFTER UPDATE ONemployee FOR EACH ROW

???????? ????????INSERTINTO emp_log(content) VALUES('員工被修改了一條記錄');

????????-- 創(chuàng)建刪除觸發(fā)器

????????CREATE TRIGGER tri_empDel AFTER DELETE ONemployee FOR EACH ROW

???????? ????????INSERTINTO emp_log(content) VALUES('員工被刪除了一條記錄');?

????????DROP TRIGGER tri_empAdd;

????????SELECT * FROM employee;

????????SELECT * FROM emp_log;?

????????INSERT INTO employee(NAME,deptId,bossId)VALUES('李四',5,1);

????????UPDATE employee SET NAME='張三' WHERE id=10;

????????????DELETE FROM employee WHERE id=10;

6.mysql權限問題

???????? root用戶: 超級管理員。??? 權限:增刪改查(數(shù)據(jù)庫,表,數(shù)據(jù))

?????????給mysql數(shù)據(jù)庫分配不同權限的不同用戶

????? ? mysql數(shù)據(jù)庫:存放mysql配置信息,包括用戶信息

????????USE mysql;

????????-- 用戶表

????????SELECT * FROM USER;

????????-- 加密函數(shù)(md5算法--單向加密)

????????SELECT PASSWORD('root');

????????-- 修改用戶密碼

????????UPDATE USER SET PASSWORD=PASSWORD('123456')WHERE USER='root';

????????-- 分配權限給不同的用戶

????????-- 分配查詢day15數(shù)據(jù)庫的employee表的權限給eric用戶,密碼為‘123456’

????????GRANT SELECT ON day15.employee TO'eric'@'localhost' IDENTIFIED BY '123456';

????????GRANT DELETE ON day15.employee TO'eric'@'localhost' IDENTIFIED BY '123456';

????????SHOW TABLES;


轉載于:https://blog.51cto.com/12925070/1933581

總結

以上是生活随笔為你收集整理的数据库入门(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。