文章目录
一、外键约束1、外键概念2、关联约束3、添加与删除外键4、集联删除二、MySQL索引1、创建唯一索引(三种方法)2、索引查询3、全文索引4、联合索引5、删除索引一、外键约束
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 aaaFOREIGN 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_indexon fulltext_test(content,tag);
2)
alter table fulltext_testadd 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数据库的索引类型