MySQL的進階部分

1.MySQL的表的約束

(1)數(shù)據(jù)完整性的介紹:

??所謂的數(shù)據(jù)的完整性就是,數(shù)據(jù)的準(zhǔn)確性和可靠性??梢酝ㄟ^添加完整性約束來提高數(shù)據(jù)的完整性:

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),蔚縣企業(yè)網(wǎng)站建設(shè),蔚縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,蔚縣網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,蔚縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

  • 實體完整性:為每一個實體(記錄)確定一個唯一標(biāo)識。
    • 實現(xiàn)方式:主鍵約束、唯一約束、主鍵自增
  • 域完整性:表示字段是完整的
    • 實現(xiàn)方式:字段的類型、非空約束、默認值
  • 引用完整性:參照表和被參照表
    • 實現(xiàn)方式:外鍵約束
  • 自定義完整性:自定義某些字段的范圍
    • 實現(xiàn)方式:檢查約束(MySQL暫不支持)

(2)表字段添加約束和刪除

主鍵約束
?要求:要求主鍵列數(shù)唯一,并且不能為空,主鍵可以包含表的一列或多列(可以是一個列成為主鍵,也可以是幾個列組合成為主鍵)。盡量不要選擇業(yè)務(wù)數(shù)據(jù)為主鍵。
? 作用:主鍵是唯一能確定一行數(shù)據(jù)的字段。
創(chuàng)建主鍵的三種方式:

#例1:
#創(chuàng)建字段的時候添加約束
create table stu(
id int primary key ,
sname varchar(20));
#例2:
#最后添加約束
create table stu(
id int ,
sname varchar(20),
primary key(id));
#例3
#表已經(jīng)創(chuàng)建,然后添加約束
create table stu(
id int  ,
sname varchar(20));
alter table stu add constraint ky_id primary key(id);

ps:如果想加入主鍵自增,只需要在primary key 后面加入:auto_increment

刪除主鍵約束:

#刪除主鍵約束,首先要刪除他的主鍵自增,然后在刪除:
alter table stu modify id int //刪除主鍵自增
alter table stu drop primary key;  //刪除主鍵約束

唯一約束
?要求:要求該列唯一,允許為一個空。

#例:
alter table stu add constraint unique(sname) 

刪除唯一約束

#在刪除唯一約束時,首先需要刪除索引,因為在創(chuàng)建唯一約束時默認會創(chuàng)建一個索引
alter table stu drop index sname
alter table stu drop index 唯一約束名

非空約束
?要求:某類內(nèi)容不允許為空
?語法:name varchar(50) not null
默認值
?要求:當(dāng)字段沒有給固定的值得時候,自動賦初值。
?語法:name varchar(50) default ‘zs’;
外鍵約束
?要求:一個表中的某個字段必須與另一張表中的某個字段相等,如果不相等,或者另一張表沒有這個值,則存儲失敗。
?語法:foreign key(表的字段) references 外表名(字段)

#例:添加外鍵約束
alter table table1 add constraint foreign key(需要設(shè)為外鍵的字段) references  table2(父表的關(guān)聯(lián)字段)

(3) 舉例:

CREATE TABLE `t_book` (
  `bid` int(10) NOT NULL,
  `bname` varchar(50) NOT NULL,
  `price` double DEFAULT NULL,
  `author` varchar(50) DEFAULT NULL,
  `authorid` int(10) DEFAULT NULL,
  PRIMARY KEY (`bid`),
  UNIQUE KEY `author` (`author`)
) ;

2.MySQL的索引

??描述:在數(shù)據(jù)庫中用來加速對表的查詢,通過使用快速路徑訪問的方法,快速定位數(shù)據(jù),減少了磁盤的IO。
?類型:B-Tree索引、位圖索引、哈希索引。在不同的存儲引擎中對索引的存儲策略不同:
?? - Myisam引擎:葉子節(jié)點中保存記錄的地址
?? - Innodb引擎:葉子節(jié)點中直接保存相應(yīng)的數(shù)據(jù)。(B+樹索引)
? 索引的優(yōu)點:建立索引可以加快查詢的速度,而降低增、刪、改的效率。
? 索引的創(chuàng)建:索引的創(chuàng)建分為兩種:自動創(chuàng)建和手動創(chuàng)建:
? ? - 自動創(chuàng)建:當(dāng)在表中定義了一個主鍵,或者唯一約束時,數(shù)據(jù)庫會自動的創(chuàng)建一個對應(yīng)的唯一索引。
? ? - 手動創(chuàng)建:

#普通索引
create index index_name on t_name(field)
#唯一索引
create unique index index_name on t_name(field)
#復(fù)合索引
create  index index_name on t_name(field1,field2)

?? 索引的使用條件:當(dāng)通過設(shè)置索引的字段作為過濾條件時查詢的語句,才會用到索引。
? 索引的效率
在查詢時使用:explain select * from emp where ename='scott'; explain關(guān)鍵字用于查看索引的效率:
MySQL的進階部分
關(guān)于type的級別:
MySQL的進階部分
? 使用索引的注意點
?? - 索引與表是分開保存的,會占用大量的磁盤空間
?? - 索引改善了檢索數(shù)據(jù)的性能,但是降低了增、刪、改數(shù)據(jù)的性能。
?? - 限制索引中索引數(shù)目。索引越多,數(shù)據(jù)庫的工作量越大
?? - 索引用于數(shù)據(jù)過濾和數(shù)據(jù)排序(表的數(shù)據(jù)量比較大,經(jīng)常使用某些字段做排序和查詢,建立索引)

3.MySQL的視圖

?? 介紹:視圖是從若干個表和其他視圖中構(gòu)造出來的虛表,并非是以物理文件保存數(shù)據(jù),在執(zhí)行過程中動態(tài)從基表中獲取數(shù)據(jù),以表為底層。

#例:創(chuàng)建視圖
create view v_viem as select * from emp1 where deptno =20;
#修改視圖:
update v_viem set deptno=10;
#查詢視圖
select * from v_viem;
注意:視圖一般不建議進行刪除、修改操作,因為他會影響到基表。以上的案例表示:如果修改了創(chuàng)建視圖的條件字段,但是視圖在查詢時還按照原有的條件查詢,會導(dǎo)致查詢的數(shù)據(jù)不準(zhǔn)確。
# 控制視圖 不能修改字段:
CREATE 
    OR REPLACE VIEW v_emp AS SELECT
    * 
FROM
    emp 
WHERE
    deptno = 20 WITH CHECK OPTION;
    注意:使用上面的方式,創(chuàng)建視圖,如果想對視圖的條件字段進行修改,就會出現(xiàn):
1369 - CHECK OPTION failed 'db1807.v_emp',錯誤。

?? 對視圖的操作

#查詢視圖
select * from v_emp;
#在視圖中插入數(shù)據(jù)
insert into v_emp(field1,field2,field3) values(value1,value2,value3)
#重建視圖
create or REPLACE view t_view as select * from emp where sal >2000
#銷毀視圖
drop view view_name

?? 視圖的優(yōu)點:
?? - 安全性:bao保密敏感字段
?? - 提高查詢效率
?? - 定制化SQL:可以將多張表中經(jīng)常被使用的數(shù)據(jù)放置在視圖中,快速查詢。

4.MySQL的創(chuàng)建用戶與授權(quán)

??本來以為這部分不重要,不,應(yīng)該說不會是自己去操作MySQL的DCL,因為公司都有自己的數(shù)據(jù)庫管理員,咱們使用MySQL都會有特殊的權(quán)限限制,能通過特定的用戶,但是經(jīng)過幾次的安裝集群后發(fā)現(xiàn),最初hadoop平臺搭建的時候,這個MySQL的授權(quán)操作還得自己來,每次都會因為hive初始化元數(shù)據(jù)庫、Azkaban組件安裝糾結(jié)半天。得嘞,自己總結(jié)下吧,以免下次在糾結(jié)。

(1)MySQL創(chuàng)建&&刪除用戶

語法:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • username:你將創(chuàng)建的用戶名
  • host:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%
  • password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器
CREATE USER 'hadoop'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'hive'@'192.168.1.101' IDENDIFIED BY '123456';
CREATE USER 'hadoop'@'%' IDENTIFIED BY '123456';
CREATE USER 'hive'@'%' IDENTIFIED BY '';
CREATE USER 'azkaban'@'%';

創(chuàng)建用戶成功后,就可以通過這個用戶登錄:

$mysql -hmysql_host -uhadoop -p123456

刪除用戶:

    DROP USER 'username'@'host';

(2)MySQL授權(quán)

? 只有擁有特定權(quán)限的用戶才能執(zhí)行特定的操作。
語法:

GRANT privileges ON dbname.tableanme TO 'username'@'host';
  • privileges:用戶的操作權(quán)限,如SELECT,INSERT,UPDATE等,如果要授予所的權(quán)限則使用ALL
  • databasename:數(shù)據(jù)庫名
  • tablename:表名,如果要授予該用戶對所有數(shù)據(jù)庫和表的相應(yīng)操作權(quán)限則可用*表示,如 *.*
    例:
GRANT SELECT, INSERT ON test.user TO 'hadoop'@'%';
GRANT ALL ON *.* TO 'hadoop'@'%';
GRANT ALL ON maindataplus.* TO 'hadoop'@'%';

授權(quán)之后一般都會刷新該操作:

mysql>flush privileges;

撤銷授權(quán)

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

其中的內(nèi)容與授權(quán)操作類似。

(3)設(shè)置和修改MySQL用戶密碼

命令:

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果修改當(dāng)前用戶的密碼則:

SET PASSWORD = PASSWORD("newpassword");

舉例:

SET PASSWORD FOR 'hadoop'@'%' = PASSWORD("123456");

網(wǎng)站欄目:MySQL的進階部分
網(wǎng)站網(wǎng)址:http://muchs.cn/article18/gppdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、動態(tài)網(wǎng)站商城網(wǎng)站、品牌網(wǎng)站建設(shè)軟件開發(fā)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)