11.2 MySQL:列属性:主键(一张表只能有最多一个主键)复合主键
11.2 MySQL:列属性:主键(一张表只能有最多一个主键)复合主键
主键: primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键.
一张表只能有最多一个主键.
增加主键
SQL操作中有多种方式可以给表增加主键: 大体分为三种.
方案1: 在创建表的时候,直接在字段之后,跟primary key关键字(主键本身不允许为空)
-- 增加主键
create table my_prim1(
name varchar(20) not null comment '姓名',
number char(10) primary key comment '学号: itcast + 0000, 不能重复'
)charset utf8;
优点: 非常直接; 缺点: 只能使用一个字段作为主键
复合主键
方案2: 在创建表的时候, 在所有的字段之后, 使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,可以是复合主键)
-- 复合主键
create table my_pri2(
number char(10) comment '学号: itcast + 0000',
course char(10) comment '课程代码: 3901 + 0000',
score tinyint unsigned default 60 comment '成绩',
-- 增加主键限制: 学号和课程号应该是对应的,具有唯一性
primary key(number,course)
)charset utf8;
方案3: 当表已经创建好之后, 额外追加主键: 可以通过修改表字段属性, 也可以直接追加。
alter table 表名 add primary key(字段列表);
前提: 表中字段对应的数据本身是独立的(不重复)
主键约束
主键对应的字段中的数据不允许重复: 一旦重复,数据操作失败(增和改)
更新主键 & 删除主键
没有办法更新主键: 主键必须先删除,才能增加.
Alter table 表名 drop primary key;
主键分类
在实际创建表的过程中, 很少使用真实业务数据作为主键字段(业务主键,如学号,课程号); 大部分的时候是使用逻辑性的字段(字段没有业务含义,值是什么都没有关系), 将这种字段主键称之为逻辑主键.
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一栏有值)
2.自增长字段必须是数字(整型)
3.一张表最多只能有一个自增长
自增长使用
当自增长被给定的值为NULL或者默认值的时候会触发自动增长.
自增长如果对应的字段输入了值,那么自增长失效: 但是下一次还是能够正确的自增长(从最大值+1)
如何确定下一次是什么自增长呢? 可以通过查看表创建语句看到.
如下图:AUTO_INCREMENT=8 即表示该自增长的下一个值为8
修改自增长
自增长如果是涉及到字段改变: 必须先删除自增长,后增加(一张表只能有一个自增长)
修改当前自增长已经存在的值: 修改只能比当前已有的自增长的最大值大,不能小(小不生效)
Alter table 表名 auto_increment = 值;
向上修改可以
思考: 为什么自增长是从1开始?为什么每次都是自增1呢?
所有系统的变量(如字符集,校对集)都是由系统内部的变量进行控制的.
查看自增长对应的变量: show variables like 'auto_increment%';
可以修改变量实现不同的效果: 修改是对整个数据修改,而不是单张表: (修改是会话级)
会话级:表示只对当前本次有效,关闭了数据库连接之后,就失效了
Set auto_increment_increment = 5; -- 一次自增5
测试效果: 自动使用自增长
删除自增长
自增长是字段的一个属性: 可以通过modify来进行修改(保证字段没有auto_increment即可)
Alter table 表名 modify 字段 类型;
MySQL(列表、list、全)mysqllist
http://www.zh-cjh.com/wenzhangguilei/2503.html
文章归类、所有文章列表、LISTLIST
http://www.zh-cjh.com/wangzhangonggao/2195.html
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。
转载请保留出处: www.zh-cjh.com珠海陈坚浩博客 » 11.2 MySQL:列属性:主键(一张表只能有最多一个主键)复合主键
作者: cjh
手机扫一扫,手机上查看此文章: |
一切源于价值!
其他 模板文件不存在: ./template/plugins/comment/pc/index.htm