Msyql索引
索引:相当于“书的目录”
索引的优点和缺点
优点:加快查询的速度
缺点:占用物理存储空间,减慢写的速度
使用索引index:(在表中的字段上创建索引)
使用规则
查看索引:desc 表名:key---->MUL
show index from 表名;
Index_type:BTREE (B+TREE Hash)
创建index索引:
创建表时 指定索引字段
在已有表里指定索引字段
create index 索引名 on 表名(字段名);
删除索引
drop index 索引名 on 表名;
主键的使用primary key
使用规则
查看desc 表名:key---->PRI
show index from 表名;
创建时查查创建;
create tabke t1(
stu_id char(9),
name char(10),
sex enmu(‘boy’,’girl’),
age tinyint(2) unsigned,
primary key(字段名)
);
建表时创建
Alter table 表名 add primary key(字段名);
主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:
ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
删除主键:alter table 表名 drop primary key;
复合主键的使用(表中多个字段一起做主键,复合主键字段的值不允许同时重复,要一起创建)
创建:> create table db.q1(
-> name char(10),
-> class char(7),
-> pay enum('yes','no') default 'no',
-> primary key(name,class) //需要一起创建
-> );
验证:insert into db.q1 values('jim','a11','no');
insert into db.q1 values('jim','b11','no');
删除:alter table 表名 drop primary key;
primary key 与auto_increment 连用
字段的值自动增长i++ i=$+1
数值类型 primary key
create table db.q2(
-> id int(2) zerofill primary key auto_increment,
-> name char(7),
-> age tinyint(2) unsigned,
-> sex enum('boy','girl','gav')
-> );
insert into q2(name,age,sex) values('tom',22,'gav');
insert into q2(name,age,sex) values('tom',22,'gav');
select * from q2;
唯一索引unique
使用规则
一个表中可以有多个UNIQUE字段
对应的字段值不允许有重复
查看:desc 表名:key---->UNI
创建
建表时创建
Create unique index 索引名 on 表名(字段名);
create table asd.q1(
name char(7),
hz_id char(5),
jsz_id char(5),
unique(hz_id),
unique(jsz_id)
);
已有表创建
删除:drop index 索引名 on 表名; //索引名默认和字段名同名
外键的使用
-让当前表字段的值在另外一个表中字段值的范围内选择
-表的存储引擎必须是innodb
-字段类型要一致
-被参照字段必须要是
创建外键:
References //参考
on update cascade //同步更新
on delete cascade //同步删除
foreign key(字段名) references 表名(字段名) on update cascade on delete cascade
创建两个表
create table qq.bjb(
-> bjb_id int(2) unsigned primary key auto_increment,
-> name char(10),
-> pay float(7,2)
-> );
create table qq.jf(
-> bjb_id int(2) unsigned primary key auto_increment,
-> name char(10),
-> pay float(7,2)
-> );
在已有表创建外键
alter table bjb add foreign key(bjb_id) references jfb(jfb_id) on update cascade on delete cascade;
update 表名 set 字段名=值 where 条件; //更新数据
delete from 表名 where 条件;
删除外键:alter table 表名 drop foreign key 外键;
show create table 表名; //查看外键名
bjb | CREATE TABLE `bjb` (
`bjb_id` int(2) unsigned NOT NULL AUTO_INCREMENT,
`name` char(10) DEFAULT NULL,
`pay` float(7,2) DEFAULT NULL,
PRIMARY KEY (`bjb_id`)
) ENGINE=InnoDB(默认存储引擎) DEFAULT CHARSET=latin1 |