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