回顾
字段类型(列类型): 数值型, 时间日期型和字符串类型
数值型: 整型和小数型(浮点型和定点型)
时间日期型: datetime, date,time,timestamp, year
字符串类型: 定长, 变长, 文件字符串(text 和 blob), 枚举和集合
Mysql 记录长度: 65535 个字节, varchar 达不到理论长度, NULL 占用一个字节, text 文本不占用记录长度(但是本身占据十个字节)
字段属性: 空属性, 列描述, 默认值
字段属性
主键, 唯一键和自增长.
主键
主键: primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键.
一张表只能有最多一个主键.
增加主键
SQL 操作中有多种方式可以给表增加主键: 大体分为三种.
方案 1: 在创建表的时候,直接在字段之后,跟 primary key 关键字(主键本身不允许为空)
![5d720df1db82bbd9bb6faf51ef076efd.png](https://img-blog.csdnimg.cn/img_convert/5d720df1db82bbd9bb6faf51ef076efd.png)
优点: 非常直接; 缺点: 只能使用一个字段作为主键
方案 2: 在创建表的时候, 在所有的字段之后, 使用 primary key(主键字段列表)来创建主键
(如果有多个字段作为主键,可以是复合主键)
![39bd7c182cc457d3d34f5788122de668.png](https://img-blog.csdnimg.cn/img_convert/39bd7c182cc457d3d34f5788122de668.png)
方案 3: 当表已经创建好之后, 额外追加主键: 可以通过修改表字段属性, 也可以直接追加.
Alter table 表名 add primary key(字段列表);
![bf10d2168636de1eec87dc87ead08f60.png](https://img-blog.csdnimg.cn/img_convert/bf10d2168636de1eec87dc87ead08f60.png)
前提: 表中字段对应的数据本身是独立的(不重复)
主键约束
主键对应的字段中的数据不允许重复: 一旦重复,数据操作失败(增和改)
![95e14c555e4f76a67626ae8309237e26.png](https://img-blog.csdnimg.cn/img_convert/95e14c555e4f76a67626ae8309237e26.png)
更新主键 & 删除主键
没有办法更新主键: 主键必须先删除,才能增加.
Alter table 表名 drop primary key;
![f0c8c05a60bed910a0ed61b0bdc20469.png](https://img-blog.csdnimg.cn/img_convert/f0c8c05a60bed910a0ed61b0bdc20469.png)
主键分类
在实际创建表的过程中, 很少使用真实业务数据作为主键字段(业务主键,如学号,课程号);
大部分的时候是使用逻辑性的字段(字段没有业务含义,值是什么都没有关系), 将这种字段
主键称之为逻辑主键.
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 一栏有值)
![81e04ead722731723aed24ce4a3da369.png](https://img-blog.csdnimg.cn/img_convert/81e04ead722731723aed24ce4a3da369.png)
2. 自增长字段必须是数字(整型)
![135d640a02638c11b91b6d099614c603.png](https://img-blog.csdnimg.cn/img_convert/135d640a02638c11b91b6d099614c603.png)
3. 一张表最多只能有一个自增长
![b1ec0db1f17b5e3939678244d7de321f.png](https://img-blog.csdnimg.cn/img_convert/b1ec0db1f17b5e3939678244d7de321f.png)
自增长使用
当自增长被给定的值为 NULL 或者默认值的时候会触发自动增长.
![f194c33eb20e719e299b22f0736f427d.png](https://img-blog.csdnimg.cn/img_convert/f194c33eb20e719e299b22f0736f427d.png)
自增长如果对应的字段输入了值,那么自增长失效: 但是下一次还是能够正确的自增长(从最
大值+1)
![383d8ca62fcfbbc7aaf9ccc313234727.png](https://img-blog.csdnimg.cn/img_convert/383d8ca62fcfbbc7aaf9ccc313234727.png)
如何确定下一次是什么自增长呢? 可以通过查看表创建语句看到.
![a790f5c6ba218e954f332d23ac86c855.png](https://img-blog.csdnimg.cn/img_convert/a790f5c6ba218e954f332d23ac86c855.png)
修改自增长
自增长如果是涉及到字段改变: 必须先删除自增长,后增加(一张表只能有一个自增长)
修改当前自增长已经存在的值: 修改只能比当前已有的自增长的最大值大,不能小(小不生效)
Alter table 表名 auto_increment = 值;
![31c376aafa2dc17196999d416b9437d7.png](https://img-blog.csdnimg.cn/img_convert/31c376aafa2dc17196999d416b9437d7.png)
向上修改可以
![53c367c6b8f19dc9c7b3cc253a23a08d.png](https://img-blog.csdnimg.cn/img_convert/53c367c6b8f19dc9c7b3cc253a23a08d.png)
思考: 为什么自增长是从 1 开始?为什么每次都是自增 1 呢?
所有系统的变现(如字符集,校对集)都是由系统内部的变量进行控制的.
查看自增长对应的变量: show variables like 'auto_increment%';