首页
学习
活动
专区
圈层
工具
发布

mysql插入语句插入主键

基础概念

MySQL中的主键(Primary Key)是一种约束,用于唯一标识表中的每一行数据。主键必须满足以下条件:

  1. 唯一性:主键的值在表中必须是唯一的。
  2. 非空性:主键的值不能为空。
  3. 唯一性约束:主键列上不能有重复的值。

相关优势

  1. 唯一标识:主键可以唯一标识表中的每一行数据,便于数据的查找和更新。
  2. 数据完整性:通过主键约束,可以确保数据的唯一性和完整性。
  3. 索引优化:主键默认会创建一个唯一索引,可以提高查询效率。

类型

MySQL中的主键类型主要有以下几种:

  1. 单字段主键:使用单个字段作为主键。
  2. 复合主键:使用多个字段组合成一个主键。
  3. 自增主键:使用自增字段作为主键,通常用于自动编号的场景。

应用场景

主键广泛应用于各种数据库表中,特别是在需要唯一标识每一行数据的场景中,例如:

  • 用户表:每个用户有一个唯一的用户ID。
  • 订单表:每个订单有一个唯一的订单ID。
  • 商品表:每个商品有一个唯一的商品ID。

插入语句示例

单字段主键

假设我们有一个用户表 users,其中 id 是主键,并且是自增字段:

代码语言:txt
复制
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(50) UNIQUE
);

插入数据:

代码语言:txt
复制
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

复合主键

假设我们有一个订单明细表 order_details,其中 order_idproduct_id 组成复合主键:

代码语言:txt
复制
CREATE TABLE order_details (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

插入数据:

代码语言:txt
复制
INSERT INTO order_details (order_id, product_id, quantity) VALUES (1, 101, 5);

常见问题及解决方法

问题:插入数据时主键冲突

原因:插入的数据与表中已有的主键值重复。

解决方法

  1. 检查数据:确保插入的数据在主键列上是唯一的。
  2. 使用 INSERT IGNORE:忽略主键冲突的插入操作。
代码语言:txt
复制
INSERT IGNORE INTO users (name, email) VALUES ('Alice', 'alice@example.com');
  1. 使用 ON DUPLICATE KEY UPDATE:在主键冲突时更新已有记录。
代码语言:txt
复制
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')
ON DUPLICATE KEY UPDATE name = 'Alice';

问题:自增主键不递增

原因:可能是由于删除了表中的某些行,导致自增主键的值不连续。

解决方法

  1. 手动设置自增值:可以使用 ALTER TABLE 语句手动设置自增值。
代码语言:txt
复制
ALTER TABLE users AUTO_INCREMENT = 100;
  1. 忽略自增主键:如果不需要自增主键,可以不设置 AUTO_INCREMENT 属性。
代码语言:txt
复制
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(50) UNIQUE
);

参考链接

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【MySQL】主键优化原理篇——【数据组织方式&主键顺序插入&主键乱序插入&页分裂&页分裂】

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎!...本章主要内容面向接触过C++ Linux的老铁 主要内容含: 一.主键优化 1.主键设计原则 满足业务需求的情况下, 尽量降低主键的长度。...插入数据时,尽量选择 顺序插入 ,选择使用AUTOINCREMENT自增主 顺序插入可以减少 页分裂 (可以了解下按下面的数据组织方式) 2.数据组织方式 【1】主键顺序插入 在大多数数据库系统中,如表数据是使用...主键顺序插入 第一个页满了,插入第二个页,一页16k,以此类推 【2】页分裂(主键乱序插入) 下面演示页分裂: 此时两页都满了, 我们要插入id为50的数据 ,他会开辟一个新的数据页,但并不是直接插入到第三个数据页当中...找到第一个 数据页百分之50的位置 ,大于百分之50的部分移动的新开辟的数据页当中 之后插入id为50的数据 插入要进入的50数据时,此时就应该改动链表指针 【3】页合并(主键乱序删除) 当删除一行记录时

86310
  • 【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)

    主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A、B中插入数据(A的主键是B的外键),向A表中插入数据之后,向B表中插入数据时需要用到A的主键。...id }   这里总结一下mybatis插入数据时返回主键的4种情况:mysql环境下主键自增、mysql环境下主键为uuid、mysql环境下主键自增、mysql环境下主键为uuid。   ...数据库为mysql ---- 主键为自增时(主键为数值类型且自增)   利用mysql的LAST_INSERT_ID()方法获取插入记录的主键,select LAST_INSERT_ID()可以在插入数据后...,查询并返回刚插入数据的主键(但是单独执行这条语句只会返回0)。...主键为UUID时(主键必须为字符类型)   使用mysql的方法UUID()方法获取随机的UUID作为主键,select UUID()可以在插入数据前,生成随机的UUID并通过keyProperty赋值给将要插入记录的主键

    3.1K20

    MySQL常用SQL语句:插入更新删除查询

    整理一些MySQL常用SQL语句:插入、更新、删除、查询、根据指定的列对结果集进行排序等。...关于联合主键:联合主键就是用2个或2个以上的字段组成主键。用这个主键组合包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 1....插入 (1) 不指定列名 insert into student values (218004, '龙猫', '男', '23') 注意:如果不指定插入的列名,则value中的值要对应表中的每一列,若少列...形式的SQL语句称为查询块。当一个查询块的SELECT子句或者WHERE子句中嵌套了另一个查询块的查询语句就称为嵌套查询。最外层的查询称为外层查询或父查询,最内层的查询称为内层查询或子查询。...最后,MySQL不支持INTERSECT和EXCEPT。

    9K30

    【MySQL】详解MySQL中表的基本插入、删除、查询、修改语句

    UNIQUE COMMENT '学号', name VARCHAR(20) NOT NULL, qq VARCHAR(20) ); 由于 主键 或者 唯一键 对应的值已经存在而导致插入失败的时候,如果我们想说我们要插入的这条记录无论主键或者是唯一键冲突都帮我完成插入...采用替换语句时如果主键或者唯一键没有冲突,则直接插入; 如果主键或者唯一键如果冲突,则删除后再插入。...select语句的执行顺序为from,where,select,order by,limit。重命名伴随着select。...2.3、分页筛选结果 -- MySQL数据库起始下标为 0 -- 从 0 开始,筛选 n 条结果 SELECT ......如果不带where子句,下面这条sql语句则是删除表中所有的数据,要慎用!!!

    2.1K10

    MySQL 插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。...---- 通过命令提示窗口插入数据 以下我们将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据 实例 以下实例中我们将向 runoob_tbl 表插入三条数据...接下来我们可以通过以下语句查看数据表数据: 读取数据表: select * from runoob_tbl; 输出结果: mysql6.jpg 使用PHP脚本插入数据 你可以使用PHP 的 mysqli_query...> 对于含有中文的数据插入,需要添加 mysqli_query($conn , "set names utf8"); 语句。...接下来我们可以通过以下语句查看数据表数据: 读取数据表: select * from runoob_tbl; 输出结果: mysql7.jpg

    8.8K10

    MySQL 插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。...语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...fieldN )...---- 通过命令提示窗口插入数据 以下我们将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据 实例 以下实例中我们将向 runoob_tbl 表插入三条数据...> 注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。...接下来我们可以通过以下语句查看数据表数据: 读取数据表: select * from runoob_tbl; 输出结果: ---- 使用PHP脚本插入数据 你可以使用PHP 的 mysqli_query

    8.5K20

    MySQL进阶学习之SQL优化【插入,主键,排序,分组,分页,计数】

    主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 ​ 主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 大批量插入数据 如果一次性需要插入大批量数据...(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。...注:在load时,主键顺序插入性能高于乱序插入 2、主键优化 2.1 数据组织方式 在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized...1、主键顺序插入效果 从磁盘中申请页,主键顺序插入,当第一页数据写满之后,再写入第二个页,页和页之间通过指针连接,第二页写满之后,再往第三页写入,以此类推。...2.4 主键设计原则 满足业务需求的情况下,尽量降低主键的长度。 插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。

    3.1K30

    MySQL 插入数据

    MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。...---- 通过命令提示窗口插入数据 以下我们将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据 实例 以下实例中我们将向 runoob_tbl 表插入三条数据...> 注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。...接下来我们可以通过以下语句查看数据表数据: 读取数据表: select * from runoob_tbl; ---- 使用PHP脚本插入数据 你可以使用PHP 的 mysqli_query() 函数来执行...> 对于含有中文的数据插入,需要添加 mysqli_query($conn , "set names utf8"); 语句。

    7K20
    领券