約束
約束:給表的字段名添加限制條件;
非空約束(not null):添加非空約束后,字段值不能為null;
唯一約束(unique):添加唯一約束后,字段值不能重復;
主鍵約束(primary key):添加了主鍵約束,主鍵值不能為null并且不能重復;
自增:當自增字段名賦值為null時,字段值會自動增長;刪除數(shù)據(jù)庫數(shù)值不會減,數(shù)值會從曾經(jīng)的最大值基礎上 1;可以使用truncate使自增數(shù)值清零;
默認約束(default):給字段添加默認約束,當不對此字段賦值時,默認值生成;
CREATE TABLE student (id int,age default 10);
檢查約束(check):在MySQL中,check約束后,語法支持,但是不生效;
外鍵約束:指用來建立兩張表之間關(guān)系的字段,值指向另外一張表的主鍵,一張表主鍵只能有一個,但是外鍵可以有多個;添加外鍵約束后,外鍵的值可以為null、可以重復,但是不能使用關(guān)聯(lián)表中不存在的數(shù)據(jù),被關(guān)聯(lián)的表和數(shù)據(jù)不能直接刪除,需要去掉約束或先刪除關(guān)聯(lián)數(shù)據(jù);
CREATE TABLE emp (id int,age int ,deptid int ‘主鍵id’, CONSTRAINT 外鍵約束用別名區(qū)分 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 //刪除主鍵數(shù)據(jù):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開發(fā)中,除非特定情況,一般不使用外鍵約束,應為會給測試帶來不便;
索引
索引是數(shù)據(jù)庫中用來提高查詢效率的技術(shù),類似于字典中的目錄;
為什么使用索引:如果不使用索引,數(shù)據(jù)會零散的保存在磁盤塊中,查詢數(shù)據(jù)需要挨個遍歷每一個磁盤塊,直到找到為止,使用索引后,磁盤塊會以樹狀結(jié)構(gòu)對數(shù)據(jù)進行保存,查詢數(shù)據(jù)時會大大降低磁盤塊的訪問數(shù)量,從而提高查詢效率;
索引是否越多越好?
不是,因為索引會占用磁盤空間,對常用的數(shù)據(jù)、寫在查詢條件后面的字段創(chuàng)建索引;
有索引一定好么?
不是,如果數(shù)據(jù)量小,添加索引有可能會降低查詢效率;
索引的分類
聚集索引(聚簇索引):一個表只有一個索引,通過主鍵創(chuàng)建的索引稱為聚集索引;數(shù)據(jù)庫會自動為添加了主鍵約束的表增加聚集索引,在聚集索引中保存著查詢依據(jù)和數(shù)據(jù);
非聚集索引:通過非字段創(chuàng)建的索引稱為非聚集索引,在非聚集索引中保存著查詢依據(jù)和地址(沒有數(shù)據(jù));
如何創(chuàng)建索引
格式:CREATE INDEX 索引名 ON 表名 (字段名(長度));
CREATE INDEX index_item_title ON item(title);
如何查看索引
SHOW INDEX FROM item;
刪除索引
DROP INDEX index_item_title ON item;
復合索引
通過多個字段創(chuàng)建的索引
應用場景:頻繁使用多個字段作為查詢條件的時候,可以為這幾個字段創(chuàng)建復合索引;
格式:CREATE INDEX index_item_title ON item(title,price);
索引總結(jié)
1、索引是用來提高查詢效率的技術(shù),類似于目錄;
2、因為索引會占磁盤空間,所以并非越多越好;
3、如果數(shù)據(jù)量小添加索引反而會降低查詢效率;
4、索引分為聚集索引(如果添加主鍵自動添加聚集索引、保存數(shù)據(jù)、一個表只有一個)和非聚集索引(有多個、不保存數(shù)據(jù)、保存地址);
5、如果表中數(shù)據(jù)頻繁修改盡量不要使用索引;
事務
數(shù)據(jù)庫中執(zhí)行SQL語句的最小工作單元,不能拆分,可以保證事務中的多條SQL語句全部成功或全部失??;
事務的ACID特性
Atomicity 原子性:最小,不可拆分,保證全部成功或全部失??;
Consistency 一致性:從一個一致狀態(tài)到另一個一致狀態(tài);
Isolation 隔離性:多個事務之間互不影響;
Durability 持久性:事務提交后數(shù)據(jù)持久保存到數(shù)據(jù)庫中;
事務相關(guān)指令
查看自動提交狀態(tài)
SHOW VARIABLES LIKE '%autocommit%';
修改自動提交狀態(tài)
SET AUTOCOMMIt=0/1;
提交
COMMIT;
回滾
ROLLBACK
設置回滾點
SAVEPOINT 別名;
回滾到指定回滾點
ROLLBACK 別名;
?
來源:http://www.icode9.com/content-2-62651.html聯(lián)系客服