列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。
列属性有很多:NULL/NOT NULL, default, Primary key, unique key, auto_increment, comment
空属性
两个值:NULL(默认的)和NOT NULL(不为空)
实际开发时,尽可能的要保证所有的数据不应该为空,空数据没有意义,空数据没有办法参与运算。
例:
create table my_class(
name varchar(20) not null,
room varchar(20) null -- 允许为空,不写默认
)charset utf8;
主键
Primary key,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复
1.增加主键
- 方案1:在创建表的时候,直接在字段之后跟primary key关键字(主键本身不允许为空)
优点:非常直接;缺点:只能使用一个字段作为主键。 - 方案2:在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键(如果多个字段作为主键,可以是复合主键)。
--复合主键
create table my_pri(
number char(10) comment '学号:itcast + 0000',
course char(10) comment '课程编号',
score tinyint unsigned default 60 comment '成绩'
--添加主键限制:学号和课程应该是对应的,具有唯一性
primary key(number,course)
)charset utf8;
- 方案3:当表已经创建好之后,再次额外追加主键,可以修改表字段属性,也可以直接追加。
alter table 表名 modify 字段名 类型 属性
alter table 表名 add primary key(字段列表);
前提:作为主键,表中字段对应的数据本身是独立的(不重复)
2.主键约束
主键对应的字段中的数据不允许重复,一旦重复,数据操作失败(增和改)。
3.主键删除
alter table 表名 drop primary key;
默认值
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
默认关键字:default
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男', '女', '保密') default '男'
)charset utf8;
默认值生效:在数据进行插入的时候,不给该字段赋值。
想要使用默认值,可以不一定去指定列表,故意不使用字段列表,可以使用default关键字代替值。
列描述
列描述:comment,描述,没有实际含义:是专门用来描述字段,会根据表创建语句保存,用来给程序员(数据库管理员)来进行了解的。
create table my_teacher(
name varchar(20) not null comment ' 姓名',
money decimal(10, 2) not null comment '工资'
)charset utf8;
自增长
auto_increment
自增长通常和主键搭配
特点:
- 任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值)
- 自增长字段必须是数字(整型)
- 一张表最多只能由一个自增长
1.创建自增长
create table my_autoincrement(
id int primary key auto_increment comment '逻辑主键自增长',
name varchar(10) not null comment '姓名'
)charset utf8;
2.自增长的使用
当自增长被给定的值为NULL或者默认值的时候,就会触发自动增长。
自增长第一个元素默认是1,每次都是自增1。
自增长如果对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长(从最大值+1)
3.修改自增长
自增长如果是涉及到字段改变,必须先删除,后增加(一张表只能有一个自增长)
修改当前自增长已经存在的值:修改只能比当前已有的自增的最大值大,不能小(小不生效)
alter table 表名 auto_increment = 值;(表选项直接这么改)
查看自增长变量语句:
show variable like 'auto_increment%';
还可以修改自增长的初始值,以及步长(但没什么意义)
4.删除自增长
自增长是字段的一个属性,可以通过modify来进行修改(保证字段没有auto_increment即可)
alter table 表名 modify 字段 类型;
唯一键
一张表往往有很多字段具有唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质与主键差不多,唯一键默认的允许自动为空,而且可以多个为空(空字段不参与唯一性比较)
1.增加唯一键
- 方案1:创建表时,字段之后直接跟unique/unique key
- 方案2:在所有字段之后,增加unique key(字段列表),复合唯一键。
- 方案3:在创建表之后增加唯一键(方式和主键一样)。
2.唯一键约束
唯一键与主键本质相同,唯一的区别就是唯一键默认允许为空,而且是多个为空。
如果唯一键也设置成了not null,那么和主键的约束作用是一致的。
3.删除唯一键
唯一键可以有多个。
alter table 表名 drop index 索引名;
--唯一键默认的使用字段名作为索引名字。
索引
几乎所有的索引都是建立在字段之上。
索引:系统根据某种算法,将已有的数据(未来可能新增的数据),单独建立一个文件,文件能够实现快速的匹配数据,并且能够快速的找到对应表中的记录。
索引的意义:
1、提升查询数据的效率
2、约束数据的有效性(唯一性等)
增加索引的前提条件:索引本身会产生索引文件(有时候可能比数据文件还大),会非常耗费磁盘空间。
Mysql中提供了多种索引
- 主键索引:primary key
- 唯一索引:unique key
- 全文索引:fulltext index
- 普通索引:index
全文索引:针对文章内部的关键字进行索引