MySQL數據庫基礎(外鍵約束、添加索引)

一、外鍵約束

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數據庫的索引類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章