Day2-索引
约束条件:限制如何给赋值,创建表时若不设置,就使用mysql建表的是否允许为空(NULL)在不设置时默认允许字段值为空(no null)
默认值 当向表中插入新的记录时,若不给字段赋值,就使用默认值给字段赋值,建表时,没有设置的默认值,mysql把字段的默认值设置为空
修改表结构 受表中已存储数据的限制
Alter table 表名 修改动作;
Add 添加新字段 新添加的字段默认追加在已有字段的下方
Add 字段名(宽度) 约束条件,add 字段名(宽度) 约束条件
默认不指定添加字段在最后追加可以使用 afrer 指定字段名
添加字段首位时可以用 first
Drop 删除已有字段——删除时字段没了,值也会没有
Drop 字段名
Modify 修改已有字段类型
Modiy 字段名 新类型(宽度) 约束条件;
Change 修改字段名
Change 源字段名 新字段名 类型(宽度) 约束条件
修改表名
Alter table 源表名 rename [to] 新表名; to可省略
复制表 ——源表,表结构中的key列的值,不会被复制给新表
Create table 新表名 SQL查询;
只复制源表的表结构
Create table 新表名 SQL查询 where 条件;
Key 键值
索引——相当于书的目录
索引的优 和缺点
加快查询速度
占有磁盘空间——删除或更新一条,需重新排序
查看指定表的索引信息 Show index from 表名;
Index_type:BTREE 索引算法 二叉树
Column_name:User 索引字段
Key_name:PRIMARY KEY的类型
二叉树 例:将一本书,无限分一半。
index普通索引 *
通常表,表中最为查询条件的字段设置为索引字段
使用规则
字段值可以重复、一个表中可以有多个Index字段、字段的值可以为空
把表中已有字段设置为index字段
标志 MUL
建表时,创建index字段
删除字段的index属性
Create index 索引名 on 表名(字段名)
drop index 索引名 on 表名
unique唯一索引
使用规则 标志是UNI
字段的值不允许重复,字段值可以为空;一个表中可以有多个unique字段
当把字段设置为不允许为空时,约束方式和主键一样
Create unique index 索引名 on 表名(字段)
primary主 键 *
字段值不允许重复且不允许字段值为空,且一个表中只能有一个主键字段。通常和auto_increment属性一起使用
注:auto_increment设置必须是主键,主键不一样需要设置auto_increment
让字段的值自动增长,每添加一条新记录时,字段的值就自动加1
标志为PRI
通常把表中能够唯一定位到一条记录的字段设置为主键字段。比如记录的编号字段
创建主键
alter table 表名 add primary key(字段名)
删除主键
alter table 表名 drop primary key
若有auto_increment请先删除该字段的属性,然后在删除主键
Alter table 表名 modify 字段 字段类型 not null
复合主键 表中的多个字段同时做主键字段,必须在建表时创建
复合主键字段的值不同时重复就可以
创建表时可以有两个主键——需在建表时指定Primary key(字段1,字段2)
foreigen key 外键 *
让当前表中外键字段的值,只能在指定的另一个表中的某个字段值的范围内选择
外键的使用规则
1表的存储引擎必须是innodb
2字段的类型要匹配
3被参考字段必须是KEY中的一种(通常设置为主键)
内容有中文可加编码DEFAULT CHARSET=utf8
>engine=innodb DEFAULT CHARSET=utf8;
FOREIGN KEY(表A的字段名) References 表B(字段名) ON UPDATE CASCADE ON DELETE CASCADE
同步更新和同步删除。
alter table 表名 drop foreign key 外键名;
外键名查看方式 show create table 表名;
一个子表只能参考一个父表
一个父表可被多个子表参考
fulltext全文索引