一、外鍵約束
1、外鍵概念
外鍵:給關聯字段創建關聯就是添加外鍵,簡單來說外鍵就是被約束條件
切記:作爲外鍵一定要和關聯主鍵的數據類型保持一致
--記錄老師的數據表
CREATE TABLE Teachers(
id TINYINT PRIMARY KEY auto_increment,
name VARCHAR (20),
age INT,
gender boolean
);
--給老師添加數據
INSERT INTO Teachers (name,age,gender) VALUES ("Lily",12,0),
("Linta",14,0),
("Zahi",22,0),
("Paul",20,1),
("Jeans",21,1);
--創建學生的表
CREATE TABLE Students(
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
Teacher_id TINYINT,
FOREIGN KEY (Teacher_id) REFERENCES Teachers(id)
)ENGINE=INNODB;
--給學生添加數據
INSERT INTO Students (name,Teacher_id) VALUES ("ViewIn1",2),
("ViewIn2",4),
("ViewIn3",1),
("ViewIn4",3),
("ViewIn5",2),
("ViewIn6",3),
("ViewIn7",2),
("ViewIn8",4);
例如,以上就是給Students的Teacher_id綁定外鍵爲Teachers的id,這樣就能將每一個學生與老師對應起來
2、關聯約束
其中,Teacher是母表,Students是子表,無法單獨刪除母表中的字段,因爲被子表約束了
要刪除母表中的字段,必須將該字段的約束解除,即子表的外鍵不再對應該字段
因此可以選擇修改作爲外鍵的數據,來刪除母表的某字段
比如要刪除字段1,將Students中id=4和id=6(原本對應母表id=3)的Teacher_id值設置爲4
—>這樣子表中就沒有與母表id=3的字段有關聯了
update Students set Teacher_id=4 where id=4 or id=6;
—>之後再刪除母表id=3的字段就不受影響了
delete from Teachers where id=3;
—>此時插入一個學生,綁定外鍵爲3就會報錯
INSERT INTO Students (name,Teacher_id) values ("ZaHuw",3);
3、添加與刪除外鍵
1)給現成的表加外鍵
例:給Students創建一個外鍵,取名爲aaa,外鍵字段爲Teacher_id,將該外鍵關聯到表Teachers的id字段
ALTER TABLE Students ADD CONSTRAINT aaa
FOREIGN KEY(Teacher_id)
REFERENCES Teachers(id);
2)刪除已有的外鍵
ALTER TABLE Students drop foreign key aaa;
4、集聯刪除
設置集聯刪除:這樣就不會被限制刪除了;
如果刪除了外鍵的字段,那它對應的外鍵也會跟着被刪除;
如果刪除了母表的字段,它對應的子表字段也會跟着被刪除。
CREATE TABLE Students3(
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
Teacher_id TINYINT,
FOREIGN KEY (Teacher_id) REFERENCES Teachers(id) on DELETE CASCADE
)ENGINE=INNODB;
二、MySQL索引
1、創建唯一索引(三種方法)
1)index 索引名 (字段名)
--創建表
CREATE table test1(
id INT PRIMARY KEY AUTO_INCREMENT,
index index_name (name),
salary INT DEFAULT 2000
);
--插入數據
INSERT INTO test1(name,salary) values("1111",1000),("2222",2000),("3333",3000),("4444",4000);
2)KEY 索引名 (字段名)
--創建表
CREATE table test1(
id INT PRIMARY KEY AUTO_INCREMENT,
KEY index_name (name),
salary INT DEFAULT 2000
);
--插入數據
INSERT INTO test1(name,salary) values("1111",1000),("2222",2000),("3333",3000),("4444",4000);
3)unique索引
將已經創建的表test1裏的varchar作爲唯一(unique)索引
alter table test1 modify name varchar (20) UNIQUE ;
2、索引查詢
通過索引來查詢:主鍵本身就是一個索引
SELECT * from test1 where id=3;
SELECT * from test1 where name="3333";
3、全文索引
例:給表fulltext_test的content和tag創建索引名爲test_index的索引
1)
create fulltext index test_index
on fulltext_test(content,tag);
2)
alter table fulltext_test
add fulltext index test_index(content,tag);
4、聯合索引
指多個字段上創建的索引,只有在查詢條件中使用了創建索引時的第一個字段,索引纔會被使用
例:給表test1的name和age添加名爲name_age的聯合索引
alter table test1 add unique index name_age(name,age);
5、刪除索引
1)直接用drop刪除
例:刪除test1裏索引名爲index_name的索引
DROP index index_name on test1;
2)修改結束分割符(默認是;分號,用delimiter可以修改)
例:將結束分割符號改爲##
delimiter ##
關於索引更詳細的介紹可以查看文章:mysql數據庫的索引類型