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数据库的索引类型

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页