primary key(`id`)

primary key(`id`)

createtableuser_logs(

idint(11)notnullauto_increment,

operationvarchar(20)notnullcomment'操作类型, insert/update/delete',

operate_timedatetimenotnullcomment'操作时间',

operate_idint(11)notnullcomment'操作的ID',

operate_paramsvarchar(500) comment'操作参数',

primarykey(`id`)

)engine=innodbdefaultcharset=utf8;

一、primary key(id)直白解释

PRIMARY KEY(id)= 把id字段设为这张表的主键 **。**


二、主键(PRIMARY KEY)作用

  1. 唯一标识每一行数据id每条记录值绝对不重复、不为空,用来区分日志表里每一条操作记录。
  2. 自带非空 + 唯一约束你代码里id int(11) not null其实可以省略,因为主键默认就NOT NULL + UNIQUE
  3. 配合auto_increment自增你的id加了auto_increment:新增数据时,数据库会自动给 id 赋值(1、2、3… 依次递增),不用手动填。

三、结合这张表举例

  • 第一条日志:id = 1
  • 第二条日志:id = 2永远不会重复,靠id就能精准定位某一条操作日志。

四、补充小知识点

  1. 一张表只能有一个主键
  2. 主键一般都选自增整数 id,查询、关联效率最高。
  3. 写法等价:

    sql

    -- 写在字段后面(简写) id int(11) primary key auto_increment -- 写在最后(你当前写法,适合联合主键) primary key(`id`)

五.其他等价写法

写法 1:主键写在字段后(最常用、简洁) create table user_logs( id int(11) primary key auto_increment, operation varchar(20) not null comment '操作类型, insert/update/delete', operate_time datetime not null comment '操作时间', operate_id int(11) not null comment '操作的ID', operate_params varchar(500) comment '操作参数' )engine=innodb default charset=utf8; 写法 2:单独声明主键(你原来的标准写法) create table user_logs( id int(11) not null auto_increment, operation varchar(20) not null comment '操作类型, insert/update/delete', operate_time datetime not null comment '操作时间', operate_id int(11) not null comment '操作的ID', operate_params varchar(500) comment '操作参数', primary key(id) )engine=innodb default charset=utf8; 反引号 ` 可省略,primary key('id') 和 primary key(id) 效果一样。 写法 3:先建表,后追加主键(事后修改表) -- 先建表(无主键) create table user_logs( id int(11) auto_increment, operation varchar(20) not null comment '操作类型, insert/update/delete', operate_time datetime not null comment '操作时间', operate_id int(11) not null comment '操作的ID', operate_params varchar(500) comment '操作参数' )engine=innodb default charset=utf8; -- 追加主键 alter table user_logs add primary key(id);