資料庫部分(MySql)_4
約束
約束:給表的欄位名新增限制條件;
非空約束(not null):新增非空約束後,欄位值不能為null;
唯一約束(unique):新增唯一約束後,欄位值不能重複;
主鍵約束(primary key):添加了主鍵約束,主鍵值不能為null並且不能重複;
自增:當自增欄位名賦值為null時,欄位值會自動增長;刪除資料庫數值不會減,數值會從曾經的最大值基礎上+1;可以使用truncate使自增數值清零;
預設約束(default):給欄位新增預設約束,當不對此欄位賦值時,預設值生成;
CREATE TABLE student (id int,age default 10);
檢查約束(check):在MySQL中,check約束後,語法支援,但是不生效;
外來鍵約束:指用來建立兩張表之間關係的欄位,值指向另外一張表的主鍵,一張表主鍵只能有一個,但是外來鍵可以有多個;新增外來鍵約束後,外來鍵的值可以為null、可以重複,但是不能使用關聯表中不存在的資料,被關聯的表和資料不能直接刪除,需要去掉約束或先刪除關聯資料;
CREATE TABLE emp (id int,age int ,deptid int ‘主鍵id’, CONSTRAINT 外來鍵約束用別名區分 FOREIGN KRY (外來鍵對應的主鍵id) REFERENCES 主鍵名(欄位名));
1 //建庫:
2 create database db4;
3 use db4;
4 //建表:
5 //部門表
6 create table dept (id int primary key auto_increment,name varchar(10));
7
8 //員工表
9 create table emp (id int primary key auto_increment,name varchar(10),deptid int,constraint fk_dept foreign key(deptid) references dept(id));
10 //錄入值:
11 insert into dept values (null,'神仙部'),(null,'妖怪部'); //成功
12 insert into emp values (null,'孫悟空',1),(null,'白骨精',2); //成功
13 insert into emp values (null,'尼古拉斯·趙四',3); //失敗
14 insert into emp values (null,'尼古拉斯·趙四',3); //成功
15 //刪除主鍵資料:
16 delete from dept where id=1; //失敗
17
18 //刪除主鍵表:
19 drop table dept; //失敗
20 //通過 show create table 表名; 檢視約束資訊
21 //刪除外來鍵約束
22 //格式:alter table emp drop foreign key 外來鍵約束名;
23 alter table emp drop foreign key fk_dept;
myisam引擎不支援外來鍵約束,要求兩張表都是innodb引擎才能使用外來鍵約束;
在JAVA開發中,除非特定情況,一般不使用外來鍵約束,應為會給測試帶來不便;
索引
索引是資料庫中用來提高查詢效率的技術,類似於字典中的目錄;
為什麼使用索引:如果不使用索引,資料會零散的儲存在磁碟塊中,查詢資料需要挨個遍歷每一個磁碟塊,直到找到為止,使用索引後,磁碟塊會以樹狀結構對資料進行儲存,查詢資料時會大大降低磁碟塊的訪問數量,從而提高查詢效率;
索引是否越多越好?
不是,因為索引會佔用磁碟空間,對常用的資料、寫在查詢條件後面的欄位建立索引;
有索引一定好麼?
不是,如果資料量小,新增索引有可能會降低查詢效率;
索引的分類
聚集索引(聚簇索引):一個表只有一個索引,通過主鍵建立的索引稱為聚集索引;資料庫會自動為添加了主鍵約束的表增加聚集索引,在聚集索引中儲存著查詢依據和資料;
非聚集索引:通過非欄位建立的索引稱為非聚集索引,在非聚集索引中儲存著查詢依據和地址(沒有資料);
如何建立索引
格式:CREATE INDEX 索引名 ON 表名 (欄位名(長度));
CREATE INDEX index_item_title ON item(title);
如何檢視索引
SHOW INDEX FROM item;
刪除索引
DROP INDEX index_item_title ON item;
複合索引
通過多個欄位建立的索引
應用場景:頻繁使用多個欄位作為查詢條件的時候,可以為這幾個欄位建立複合索引;
格式:CREATE INDEX index_item_title ON item(title,price);
索引總結
1、索引是用來提高查詢效率的技術,類似於目錄;
2、因為索引會佔磁碟空間,所以並非越多越好;
3、如果資料量小新增索引反而會降低查詢效率;
4、索引分為聚集索引(如果新增主鍵自動新增聚集索引、儲存資料、一個表只有一個)和非聚集索引(有多個、不儲存資料、儲存地址);
5、如果表中資料頻繁修改儘量不要使用索引;
事務
資料庫中執行SQL語句的最小工作單元,不能拆分,可以保證事務中的多條SQL語句全部成功或全部失敗;
事務的ACID特性
Atomicity 原子性:最小,不可拆分,保證全部成功或全部失敗;
Consistency 一致性:從一個一致狀態到另一個一致狀態;
Isolation 隔離性:多個事務之間互不影響;
Durability 永續性:事務提交後資料持久儲存到資料庫中;
事務相關指令
檢視自動提交狀態
SHOW VARIABLES LIKE '%autocommit%';
修改自動提交狀態
SET AUTOCOMMIt=0/1;
提交
COMMIT;
回滾
ROLLBACK
設定回滾點
SAVEPOINT 別名;
回滾到指定回滾點
ROLLBACK 別名;