【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)
	->);

单行数据+全列插入

//数据的数量和数据类型必须和插入表的列的数量和顺序一致
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 |
+-----+-------+-----------+--------+

多行数据+指定列插入

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   |
+-----+-------+-----------+--------+

插入否则更新

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

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   |
+-----+-------+-----------+--------+

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

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

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

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

mysql> select row_count();
+-------------+
| row_count() |
+-------------+
|           2 |
+-------------+

替换

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

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 row affected:表中没有冲突数据,数据被插入
2 row affected:表中有冲突数据,删除后重新插入

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

你可能感兴趣的:(MySQL,mysql,sql,android)