• 【MySQL】insert相关SQL语句


    插入数据

    insert [into] table_name [属性] values (数据)

    --建立一个学生表
    mysql> create table student(
    	->id int unsigned primary key auto_increment,
    	->sn int not null unique comment '学号',
    	->name varchar(20) not null comment '姓名',
    	->qq varchar(20)
    	->);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    单行数据+全列插入

    //数据的数量和数据类型必须和插入表的列的数量和顺序一致
    mysql> insert into student values (100,10000,'唐三藏',NULL); 
    
    mysql> insert into student values (101,10001,'孙悟空','111111');
    
    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 100 | 10000 | 唐三藏    | NULL   |
    | 101 | 10001 | 孙悟空    | 111111 |
    +-----+-------+-----------+--------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    多行数据+指定列插入

    mysql> insert into student (id,sn,name) values (102,20001,'曹孟德'),(103,20002,'孙仲谋');
    
    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 100 | 10000 | 唐三藏    | NULL   |
    | 101 | 10001 | 孙悟空    | 111111 |
    | 102 | 20001 | 曹孟德    | NULL   |
    | 103 | 20002 | 孙仲谋    | NULL   |
    +-----+-------+-----------+--------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    插入否则更新

    插入的数据可能由于主键或者唯一键的唯一性冲突,导致数据插入失败
    可以选择性的进行同步更新操作语法:

    insert ... on duplicate key update 属性=数据...

    //原先数据
    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 100 | 10000 | 唐三藏    | NULL   |
    | 101 | 10001 | 孙悟空    | 111111 |
    | 102 | 20001 | 曹孟德    | NULL   |
    | 103 | 20002 | 孙仲谋    | NULL   |
    +-----+-------+-----------+--------+
    
    mysql> insert into student (id,sn,name) values (100,10003,'刘玄德') on duplicate key update id=104,sn=10003,name='刘玄德';
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 101 | 10001 | 孙悟空    | 111111 |
    | 102 | 20001 | 曹孟德    | NULL   |
    | 103 | 20002 | 孙仲谋    | NULL   |
    | 104 | 10003 | 刘玄德    | NULL   |
    +-----+-------+-----------+--------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    原先插入的数据,id是冲突的,如果出现冲突,那么就按照update后的数据修改表原先数据

    update后MySQL返回的结果也有不同的表示

    0 row affected:表中有冲突数据,但update后的数据任然有冲突,无法插入
    1 row affected:表中没有冲突,数据被插入
    2 row affected:表中有冲突数据,并且数据已经被更新

    可以通过MySQL函数获取受影响的数据行数

    mysql> select row_count();
    +-------------+
    | row_count() |
    +-------------+
    |           2 |
    +-------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    替换

    主键 或者 唯一键 没有冲突,直接插入
    主键 或者 唯一键 有冲突,删除原先数据再插入

    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 101 | 10001 | 孙悟空    | 111111 |
    | 102 | 20001 | 曹孟德    | NULL   |
    | 103 | 20002 | 孙仲谋    | NULL   |
    | 104 | 10003 | 刘玄德    | NULL   |
    +-----+-------+-----------+--------+
    
    mysql> replace into student (sn,name) values (20002,'赵子龙');
    
    mysql> select * from student;
    +-----+-------+-----------+--------+
    | id  | sn    | name      | qq     |
    +-----+-------+-----------+--------+
    | 101 | 10001 | 孙悟空    | 111111 |
    | 102 | 20001 | 曹孟德    | NULL   |
    | 104 | 10003 | 刘玄德    | NULL   |
    | 105 | 20002 | 赵子龙    | NULL   |
    +-----+-------+-----------+--------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1 row affected:表中没有冲突数据,数据被插入
    2 row affected:表中有冲突数据,删除后重新插入

    update和replace就在于,update是修改表数据,没有改变自增长的值
    而replace是删除原先数据,再插入新数据,所以自增长的值会改变

  • 相关阅读:
    Flutter正在被悄悄放弃?浅析Flutter的未来
    Linux下NFS共享存储安装详细步骤
    关于运行franka_ros包中的franka_gazebo报错VMware: vmw_ioctl_command error 无效的参数.
    京东搜索EE链路演进 | 京东云技术团队
    ceph存储系统
    【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码
    数据异常值检测
    云务器迁移(腾讯云>华为云)
    jenkins+github构建部署项目实践
    el-date-picker的使用,及解决切换type时面板样式错乱问题
  • 原文地址:https://blog.csdn.net/m0_72563041/article/details/133606335