PRI主键约束;
UNI唯一约束;
MUL可以重复。
主表中的外键是另一张表的主键。 候选键:除了主键以外的都是候选键。 要想能快速查找某一条你想要的数据,必须要要创建主键(一般在开始创建表的时候就会设置)。
根据企业需求选择了合适的索引之后,可使用 create index创建索引
create index加上各个索引关键字便可创建各个类型的索引
mysql> create index ttt on gousheng(name); '创建名为ttt的索引'
mysql> show index from gousheng \G;
*************************** 5. row ***************************
Table: gousheng
Non_unique: 1
Key_name: ttt
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
5 rows in set (0.00 sec)
ERROR:
No query specified
mysql> describe gousheng; ' 查看表组成架构'
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | char(3) | NO | PRI | NULL | |
| name | char(10) | NO | MUL | NULL | |
| score | int(3) | YES | | NULL | |
| address | varchar(50) | YES | | baomi | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
这里的唯一性 不是指一个字段只能建立一个索引 而是每一字段对应的必须是唯一的 可查找的 跟身份证一样的 唯一索引可以为空 且可以多个NULL空
mysql> create unique index hi on hello(name);
mysql> show index from hello\G;
*************************** 1. row ***************************
Table: hello
Non_unique: 0
Key_name: hi
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
ERROR:
No query specified
主键索引相当于unique+not null +自动增长auto_ increment primary 在一个表只能出现一次
复合主键 就是说单独的一个字段可以相同 但两个加一起不能相同 两个共同作为主键
表school.service
host_ ip 主机IP
service_ name 服务名
port 服务对应的端口
allow(Y,N) 服务是否允许访问
主键: host_ jip + port = primary key
mysql> create table service(
-> host ip varchar(15) not null,
-> service_ name varchar(10) not null,
-> port varchar(5) not null,
-> allow enum(Y,'N) default 'N',
-> primary key(host_ ip,port)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> alter table hello add primary key(id);
mysql> show index from hello\G;
*************************** 1. row ***************************
Table: hello
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: score
Collation: A
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
概念 通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。
你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。
语法:
create fulltext index <索引的名字> on tablename(列的列表);
例如:
create fulltext index full_index_addr on IT_salary(addr);
'//全文索引:往往用于字符串,而不适用于数值类型'
show index from tablename\G; 竖着去查看
show keys from tablename; 默认横着去查看
MySQL [company]> drop index namel on department2; 删除名为namel的索引