??所謂的數(shù)據(jù)的完整性就是,數(shù)據(jù)的準(zhǔn)確性和可靠性??梢酝ㄟ^(guò)添加完整性約束來(lái)提高數(shù)據(jù)的完整性:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),蔚縣企業(yè)網(wǎng)站建設(shè),蔚縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,蔚縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,蔚縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
主鍵約束
?要求:要求主鍵列數(shù)唯一,并且不能為空,主鍵可以包含表的一列或多列(可以是一個(gè)列成為主鍵,也可以是幾個(gè)列組合成為主鍵)。盡量不要選擇業(yè)務(wù)數(shù)據(jù)為主鍵。
? 作用:主鍵是唯一能確定一行數(shù)據(jù)的字段。
創(chuàng)建主鍵的三種方式:
#例1:
#創(chuàng)建字段的時(shí)候添加約束
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
刪除主鍵約束:
#刪除主鍵約束,首先要?jiǎng)h除他的主鍵自增,然后在刪除:
alter table stu modify id int //刪除主鍵自增
alter table stu drop primary key; //刪除主鍵約束
唯一約束
?要求:要求該列唯一,允許為一個(gè)空。
#例:
alter table stu add constraint unique(sname)
刪除唯一約束
#在刪除唯一約束時(shí),首先需要?jiǎng)h除索引,因?yàn)樵趧?chuàng)建唯一約束時(shí)默認(rèn)會(huì)創(chuàng)建一個(gè)索引
alter table stu drop index sname
alter table stu drop index 唯一約束名
非空約束
?要求:某類內(nèi)容不允許為空
?語(yǔ)法:name varchar(50) not null
默認(rèn)值
?要求:當(dāng)字段沒(méi)有給固定的值得時(shí)候,自動(dòng)賦初值。
?語(yǔ)法:name varchar(50) default ‘zs’;
外鍵約束
?要求:一個(gè)表中的某個(gè)字段必須與另一張表中的某個(gè)字段相等,如果不相等,或者另一張表沒(méi)有這個(gè)值,則存儲(chǔ)失敗。
?語(yǔ)法:foreign key(表的字段) references 外表名(字段)
#例:添加外鍵約束
alter table table1 add constraint foreign key(需要設(shè)為外鍵的字段) references table2(父表的關(guān)聯(lián)字段)
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`)
) ;
??描述:在數(shù)據(jù)庫(kù)中用來(lái)加速對(duì)表的查詢,通過(guò)使用快速路徑訪問(wèn)的方法,快速定位數(shù)據(jù),減少了磁盤(pán)的IO。
?類型:B-Tree索引、位圖索引、哈希索引。在不同的存儲(chǔ)引擎中對(duì)索引的存儲(chǔ)策略不同:
?? - Myisam引擎:葉子節(jié)點(diǎn)中保存記錄的地址
?? - Innodb引擎:葉子節(jié)點(diǎn)中直接保存相應(yīng)的數(shù)據(jù)。(B+樹(shù)索引)
? 索引的優(yōu)點(diǎn):建立索引可以加快查詢的速度,而降低增、刪、改的效率。
? 索引的創(chuàng)建:索引的創(chuàng)建分為兩種:自動(dòng)創(chuàng)建和手動(dòng)創(chuàng)建:
? ? - 自動(dòng)創(chuàng)建:當(dāng)在表中定義了一個(gè)主鍵,或者唯一約束時(shí),數(shù)據(jù)庫(kù)會(huì)自動(dòng)的創(chuàng)建一個(gè)對(duì)應(yīng)的唯一索引。
? ? - 手動(dò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)通過(guò)設(shè)置索引的字段作為過(guò)濾條件時(shí)查詢的語(yǔ)句,才會(huì)用到索引。
? 索引的效率:
在查詢時(shí)使用:explain select * from emp where ename='scott'; explain關(guān)鍵字用于查看索引的效率:
關(guān)于type的級(jí)別:
? 使用索引的注意點(diǎn):
?? - 索引與表是分開(kāi)保存的,會(huì)占用大量的磁盤(pán)空間
?? - 索引改善了檢索數(shù)據(jù)的性能,但是降低了增、刪、改數(shù)據(jù)的性能。
?? - 限制索引中索引數(shù)目。索引越多,數(shù)據(jù)庫(kù)的工作量越大
?? - 索引用于數(shù)據(jù)過(guò)濾和數(shù)據(jù)排序(表的數(shù)據(jù)量比較大,經(jīng)常使用某些字段做排序和查詢,建立索引)
?? 介紹:視圖是從若干個(gè)表和其他視圖中構(gòu)造出來(lái)的虛表,并非是以物理文件保存數(shù)據(jù),在執(zhí)行過(guò)程中動(dòng)態(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;
注意:視圖一般不建議進(jìn)行刪除、修改操作,因?yàn)樗麜?huì)影響到基表。以上的案例表示:如果修改了創(chuàng)建視圖的條件字段,但是視圖在查詢時(shí)還按照原有的條件查詢,會(huì)導(dǎo)致查詢的數(shù)據(jù)不準(zhǔn)確。
# 控制視圖 不能修改字段:
CREATE
OR REPLACE VIEW v_emp AS SELECT
*
FROM
emp
WHERE
deptno = 20 WITH CHECK OPTION;
注意:使用上面的方式,創(chuàng)建視圖,如果想對(duì)視圖的條件字段進(jìn)行修改,就會(huì)出現(xiàn):
1369 - CHECK OPTION failed 'db1807.v_emp',錯(cuò)誤。
?? 對(duì)視圖的操作
#查詢視圖
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)點(diǎn):
?? - 安全性:bao保密敏感字段
?? - 提高查詢效率
?? - 定制化SQL:可以將多張表中經(jīng)常被使用的數(shù)據(jù)放置在視圖中,快速查詢。
??本來(lái)以為這部分不重要,不,應(yīng)該說(shuō)不會(huì)是自己去操作MySQL的DCL,因?yàn)楣径加凶约旱臄?shù)據(jù)庫(kù)管理員,咱們使用MySQL都會(huì)有特殊的權(quán)限限制,能通過(guò)特定的用戶,但是經(jīng)過(guò)幾次的安裝集群后發(fā)現(xiàn),最初hadoop平臺(tái)搭建的時(shí)候,這個(gè)MySQL的授權(quán)操作還得自己來(lái),每次都會(huì)因?yàn)閔ive初始化元數(shù)據(jù)庫(kù)、Azkaban組件安裝糾結(jié)半天。得嘞,自己總結(jié)下吧,以免下次在糾結(jié)。
語(yǔ)法:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
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)建用戶成功后,就可以通過(guò)這個(gè)用戶登錄:
$mysql -hmysql_host -uhadoop -p123456
刪除用戶:
DROP USER 'username'@'host';
? 只有擁有特定權(quán)限的用戶才能執(zhí)行特定的操作。
語(yǔ)法:
GRANT privileges ON dbname.tableanme TO 'username'@'host';
GRANT SELECT, INSERT ON test.user TO 'hadoop'@'%';
GRANT ALL ON *.* TO 'hadoop'@'%';
GRANT ALL ON maindataplus.* TO 'hadoop'@'%';
授權(quán)之后一般都會(huì)刷新該操作:
mysql>flush privileges;
撤銷授權(quán):
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
其中的內(nèi)容與授權(quán)操作類似。
命令:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果修改當(dāng)前用戶的密碼則:
SET PASSWORD = PASSWORD("newpassword");
舉例:
SET PASSWORD FOR 'hadoop'@'%' = PASSWORD("123456");
網(wǎng)站欄目:MySQL的進(jìn)階部分
網(wǎng)站網(wǎng)址:http://chinadenli.net/article18/gppdgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)