1. 程式人生 > >資料庫部分(MySql)_4

資料庫部分(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 別名;