真正约束字段的是数据类型,但数据类型的约束很单一,需要有一些额外的约束,来更加保证数据合法性,null/not null, default,primary key , unique key,auto_increment ,comment;
空属性null(默认的)和not null(不为空)
列描述comment,描述,是专门用来描述字段,会根据表创建语句保存;
create table my_teacher(
name varchar(20) not null comment '姓名',
money decimal(10,2) not null
)charset utf8;
默认值:某一种数据经常性出现某个具体的值,可以在一开始指定好;在需要真实数据的时候,用户可以经常性使用default
要想使用默认值,可以不一定去指定列表;可以使用default关键字来代替默认值
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女') default '男'
)charset utf8;
insert into my_default values('XXX',18,default);
主键primary key:一张表只能有最多一个主键
增加主键方法:1.创建表时字段后跟primary key,主键本身不允许为空;
2.创建表的时候在所有字段之后使用primary key(主键列表)创建主键,多个字段可以作为复合主键;
create table my_pri(
number char(10),course char(10),score tinyint
unsigned default 60,
primary key(number,course)
)charset utf8; -- 此时表有两个复合主键
3.表已经创建好之后,额外追加主键;可以修改表字段属性,也可以直接追加
alter table 表名 add primary key(字段列表)
追加主键前提:表中字段对应数据是本身独立的(不重复的);
更新主键:主键必须先删除才能增加;
alter table drop primary key;
create table my_student(
id int primary key auto_increment comment '逻辑主键:自增长',
number char(10) not null comment '学号',
name varchar(10) not null
);
自增长:当对应字段不给值或给默认值或给NULL的时候,会被系统自动触发,系统从当前字段中已有最大值在进行+1操作,得到一个新的不同的字段;
auto_increment自增长特点:1.任何一个字段要做自增长的前提是本身是一个索引(key一栏有值);2.自增长字段必须是数字(整型);3.一张表最多只能有一个自增长;
自增长使用:当自增长被给定的值为null或者默认值的时候,会触发自增长;第一个元素默认为1;
自增长如果对应字段输入了值,那么自增长失效;但是下一次还是能够正确的自增长(从最大值+1);
如何查看下一次自增长是多少呢?可以通过查看表创建语句查看到 show create table 表名;
自增长如果涉及到字段改变,必须先删除自增长后增加(一个表只能有一个自增长);
修改当前自增长已经存在的值,修改只能比当前已有的自增长的最大值大,不能小(小了不能生效);alter table 表名 auto_increment=值;
查看自增长变量:show variables like 'auto_increment%';
auto_increment_increment 1 步长
auto_increment_offsset 1 起始值
set auto_increment_increment =5; //注意:此处会在上次的auto_increment基础上加1,然后才生效
删除自增长:自增长是字段的一个属性,可以通过modify来修改(保证字段没有auto_increment即可);
alter table 表名 modify 字段 类型;
注意:有主键的时候千万不要有主键:alter table my_student modify id int;
唯一键unique key 可以解决表中多个字段需要唯一性约束问题;
区别:唯一键默认的允许为空,而且可以允许多个为空;空字段不参与唯一性比较;
增加唯一键方案:1.创建表的时候,字段后直接跟unique/unique key;2.所有字段之后增加unique key(字段列表) -- 符合唯一键 ;3.创建表之后增加唯一键;
唯一键与主键本质相同,唯一区别就是唯一键默认允许为空,而且多个为空;如果唯一键也不允许为空,与主键的约束作用是一致的;
更新唯一键:先删除后新增,唯一键可以有多个,可以不删除;
删除唯一键:alter table 表名 drop index 索引名;--- 唯一键默认使用字段名作为索引名字
索引:几乎所有索引建立在字段之上;系统根据某种算法,将已有的数据(未来可能新增的数据)单独建立一个文件;文件能实现快速的匹配数据,并且能够快速找到对应表中记录;
索引的意义:提升查询数据的效率,约束数据的有效性;
增加索引的前提:索引本身会产生索引文件,会非常耗费磁盘空间;
如果某个字段需要作为查询的条件经常使用或者需要进行数据的有效性约束,那么可以使用索引;
MYSQL提供了多种索引:1.主键索引 primary key 2.唯一索引unique key 3.全文索引 fulltext index 4.普通索引 index;
全文索引:针对文章内部的关键字进行索引;