列属性
使用show create table 表名字和desc 表名字来查看表的属性
空属性
create table my_class(
student_name varchar(20) not null,
student_id int(1) not null
)charset utf8;
空属性有两个值:null和not null。虽然默认数据库的字段基本都为空,但是实际上在真正开发的时候,要尽可能的保证数据不为空,因为空数据没有意义,也没办法参与运算。
列描述
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) comment '学号'
)charset utf8;
列描述:comment,表示描述,没有实际含义,是专门用来描述字段的,其会随着表创建语句自动保存,用来给程序员(数据库管理员)了解数据库使用。
默认值
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) comment '学号',
student_age int(1) default 20,
student_gender enum('男','女') default '男'
)charset utf8;
默认值:default,某一数据会经常性出现某个具体的值,因此可以在开始的时候就指定好,而在需要真实数据的时候,用户可以选择性的使用默认值。
insert into my_class values('Li',311800,default,default);
可以不给设置默认值的字段赋值或者使用default代替相应的字段值进行赋值。
主键
--增加主键
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) primary key comment '学号',
)charset utf8;
--复合主键:保证每一列数据各行之间不冲突即可
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) comment '学号',
student_age int(1) default 20,
primary key(student_name,student_id)
)charset utf8;
--追加主键(前提:表中对应字段的数据具有唯一性)
alter table my_class add primary key(age);
--删除主键
alter table my_class drop primary key;
主键作用:使得主键对应的字符中的数据不允许重复,如果重复,则数据操作(主要是增和改)失败,另外主键不允许为空值。
执行insert into my_class values ('PM3527','B315');将发生主键冲突解决方法:
-
-- 当主键冲突的时候,进行更新操作insert into my_class values ('PM3527','B315')-- 冲突处理on duplicate key update-- 更新主键值room = 'B315'; -
-- 当主键冲突的时候,进行替换操作replace into my_class values ('PM3528','B215');
自动增长
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) primary key auto_increment comment '学号',
student_age int(1) default 20,
)charset utf8;
自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值。特点:
- 任何字段要做自增长,前提其本身必须是一个索引,即
primary key栏有值; - 自增长字段必须是数字(整型);
- 每张表最多有一个自增长字段。
修改自增长值
可以使用show create table my_class查看下一次自增长的数值
可以使用alter table my_class auto_increment=2;修改下一次自增长的数值,另外如果修改当前自增长字段已经存在的值,则只能修改比当前已有自增长字段中的最大值更大,不能更小,因为更小不生效。
查看自增长属性
通过show variables like 'auto_increment%'来查看自增长的相关变量,其中auto_increment_increment表示步长,auto_increment_offset表示初始值。
因此,咱们可以通过set auto_increment_increment = 值;修改上面的两个变量实现不同的效果,但是需要注意的是:修改是会话级别,并且修改的是整个数据库,而不是单张表。
删除自增长
由于自增长和主键绑定在一起所以直接调用alter table my_class modify student_id int primary key;会被系统误认为定义多个主键。
解决方法:alter table my_class modify student_id int;即可直接删除auto_increment同时保留primary key
唯一键
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) unique comment '学号',
student_age int(1) default 20,
)charset utf8;
或者
create table my_class(
student_name varchar(20) comment '姓名',
student_id int(1) comment '学号',
student_age int(1) default 20,
unique key(student_id)
)charset utf8;
唯一键:和主键的功能一样,但是一张表只能由一个主键,但可以由多个唯一键,而且唯一键允许字段值为空,并且允许多个空值存在。
-- 删除唯一键
alter table my_class drop index student_age;