SQL 约束&索引
记录常用的约束(主键,外键)和索引的用法。
1.标准SQL
1.1 Constraints 约束
Constraints
:约束用于限制加入表的数据的类型。
约束主要有:
- 1.NOT NULL
- 2.UNIQUE
- 3.PRIMARY KEY
- 4.FOREIGN KEY
- 5.CHECK
- 6.DEFAULT
经常混乱的:
UNIQUE
:约束唯一标识数据库表中的每条记录。
PRIMARY KEY
:主键必须包含唯一的值,主键不允许NULL值,自动定义成UNIQUE约束,每个表都应有且只有一个主键。
FOREIGN KEY
:一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY。
CHECK
:用于限制列中的值的范围。
1.2 Index 索引
INDEX
:在不读取整个表的情况下,使用索引可以更快地查找数据。
将每行数据中的某个(多个)字段提取出来跟这行数据形成映射关系,通过使用索引,不再匹配每行的所有字段,时间复杂度和磁盘IO大大降低,同时利用数据结构的特性达到快速定位某行数据的目的。
注意:
1.UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
2.每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
2.MySQL
- 1.数据库版本
MySQL:8.0.16 - 2.完整栗子
主表为t_student
,子表为t_score
CREATE TABLE `t_student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(255) DEFAULT '' COMMENT '姓名',
`age` int(11) DEFAULT '10' COMMENT '年龄',
`sex` varchar(255) DEFAULT 'Male' COMMENT '性别',
`hobbies` varchar(255) DEFAULT '' COMMENT '爱好',
`address` varchar(255) DEFAULT '' COMMENT '住址',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_student_name_address` (`name`,`address`) USING BTREE,
KEY `idx_age_sex` (`age`,`sex`)
) ENGINE=InnoDB AUTO_IN