MySQL数据库基础(外键约束、添加索引)

网友投稿 679 2022-11-11

MySQL数据库基础(外键约束、添加索引)

MySQL数据库基础(外键约束、添加索引)

文章目录

​​一、外键约束​​

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:B/S与C/S架构的区别介绍
下一篇:解决引用slf4j中Logger.info只打印出文字没有数据的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~