列属性:数据类型的约束很单一,需要一些额外的约束,来保证数据的合法性
:NULL/NOT NULL ,default,primary key ,unique key,auto_increment,comment
空属性:
两个值:NULL和NOT NULL
列描述:comment,描述,没有实际含义,是专门用来描述字段,会根据表创建语句保存:
来给数据管理员进行了解
默认值:可以由用户选择性的使用默认值
默认值关键词:default
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女','保密') default '男'
)charset utf8;
字段属性:
主键,唯一键和自增长
主键 :primary key ,主要的键,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复
一张表只能有最多一个主键
增加主键:
1,在创建表的时候,直接在字段之后,跟primary key 关键字,主键不允许为空
优点:非常直接;;缺点:只能使用一个字段作为主键
2,在创建表的时候,在所以的字段之后,使用primary key(主键字列表)来创建主键 (如果有多个字段作为主键,可以是复合主键)
3,当表已经创建好之后,再次额外追加主键:可以通过修改表字段属性,也可以直接追加
alter table 表名 add primary (字段列表)
alter table 表名 modify 字段 primary key;
主键对应的字段中的数据不允许重复:一旦重复,数据操作失败
更新主键&删除主键:主键必须先删除,才能更新
alter table 表名 drop primary key;
主键分类:
在实际创建表的过程中,很少使用真实业务数据作为主键字段(业务主键,如雪花,课程号),
大部分的时候是使用逻辑性的字段(字段没有业务含义,值是什么都没有关系),这种字段主键称之为逻辑主键
自动增长:当对应的字段,不给值,或者是NULL时,系统会从当前字段中已有的最大值在进行+1操作,得到一个新的字段
自增长通常是跟主键搭配
查看自增长对应的变量:show variables like 'auto_incremrnt%';
特点:auto_increment
1,任何一个字段要做自增长必须其本身是一个索引(key一栏有值)
2,自增长字段必须是数字(整型)
3,一张表最多只能有一个自增长
create table my_auto(
id int primary key auto_increment comment '自增长',
name varchar(10)
)charset utf8;
自增长使用:自增长默认第一个为1,每次加1,如果对应字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长(即输入值+1)
修改自增长:
如果涉及到字段改变,必须先删除自增长,后增加
修改当前自增长已经存在的值:修改只能比当前已有的自增长的最大值,不能小
alter table 表名 auto_increment = 值;
删除自增长:
alter table 表名 modify 字段 类型;
唯一键:一张表中有许多字段需要唯一性,数据不能重复,但是一张表只能有一个主键,
唯一键(unique key)可以解决
增加唯一键:
1,在创建表的时候,字段之后直接跟unique,
2,在所有字段后增加unique key(字段列表) -- 复合唯一键
3,在表创建之后增加唯一键
删除唯一键:
alter table 表名 drop index 索引名字;---唯一键默认以字段名为索引
唯一键约束:与主键相同,唯一区别为唯一键允许为空,而且是多个为空
-- 创建表
create table my_teacher(
name varchar(20) not null comment '姓名',
money decimal(10,2) not null comment '工资'
)charset utf8;
-- 默认值
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女','保密') default '男'
)charset utf8;
--插入数据
insert into my_default (name) values ('Marr');
insert into my_default values ('Arry',default,default);
-- 增加主键
create table my_pril(
name varchar(20) not null comment '姓名',
number char(10) primary key comment '学号:0000,不能重复'
)charset utf8;
-- 复合主键
create table my_pri2(
number char(10) comment '学号',
course char(10) comment '课程代码',
score tinyint unsigned default 60 comment '成绩',
-- 增加主键限制:学号和课程号应该对应,具有唯一性
primary key (number,course)
)charset utf8;
-- 追加主键
create table my_pri3(
course char(10) not null comment '课程编号',
name varchar(10) not null comment '课程名字'
)charset utf8;
alter table my_pri3 modify course char(10) primary key;
alter table my_pri3 add primary key(course) ;
-- 删除主键
alter table my_pri3 drop primary key;
-- 自增长
create table my_auto(
id int primary key auto_increment comment '自增长',
name varchar(10)
)charset utf8;
-- 触发自增长
insert into my_auto(name) values('Han');
insert into my_auto values(null,'Mary');
insert into my_auto values(default,'Grr');
insert into my_auto values(6,'Sarry');
insert into my_auto values(null,'Kaat');
-- 修改自增长
alter table my_auto auto_increment = 8;
-- 查看自增长变量
show variables like 'auto_increment%';
-- 删除自增长
alter table my_auto modify id int;
-- 唯一键
create table my_unique1(
number char(10) unique comment '学会:唯一键',
name varchar(20) not null
)charset utf8;
------------
create table my_unique2(
number char(10) unique comment '学会:唯一键',
name varchar(20) not null,
unique key(number)
)charset utf8;
------------ 追加唯一键
create table my_unique3(
id int primary key auto_increment,
number char(10) not null,
name varchar(20) not null
)charset utf8;
alter table my_unique3 add unique key (number);
-- 删除唯一键
alter table my_unique3 drop index number;