MySQL表的增删查改

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1、表的插入

<1> 全列插入

<2> 指定列插入

<3> 插入否则更新

<4> 替换

2、表的查找

<1>全列查询

<2>指定列查询

<3> where条件

<4> 筛选分页结果

3、表的修改

4、表的数据删除

5、查看表结构

6、插入查询结果


1、表的插入

INSERT [ INTO ] table_name [( column [, column ] ...)] VALUES (value_list ) [, ( value _list)] ...
value_list: value , [, value ] ...

创建一个学生表

create table if not exists student(
id int primary key comment '学号',
name varchar(10) not null,
number varchar(11) not null comment '手机号'
);

<1> 全列插入

insert into student values(10, '张三', '1111223');
insert into student values(11, '李四', '1122223');

 说明

  • 全列插入可以不指定列名称不过数量必须和定义表的列的数量及顺序一致

<2> 指定列插入

insert into student(id, name, number) values(12, '王五', '2222222'),(13, '赵六', '2222223');

 说明

  • 指定列插入可以一次插入多组数据也可以单组数据插入

<3> 插入否则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败可以选择性的进行同步更新操作。
INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value ] ...

insert into student(id, name, number) values(13, '赵六', '2222224') on duplicate key update name='赵六', number=2222224;
Query OK, 2 rows affected (0.04 sec)

-- 0 row affected: 表中有冲突数据但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据数据被插入
-- 2 row affected: 表中有冲突数据并且数据已经被更新

<4> 替换

-- 主键 或者 唯一键 没有冲突则直接插入
-- 主键 或者 唯一键 如果冲突则删除后再插入
replace into student(id, name, number) values(13, '赵六', 2222224);

2、表的查找

SELECT [DISTINCT] {* | {column [, column] ...} [FROM table_name] [WHERE ...] [ORDER BY column [ASC | DESC], ...]
LIMIT ...

<1> 全列查询

 

通常情况下不建议使用 * 进行全列查询
  • 查询的列越多意味着需要传输的数据量越大
  • 可能会影响到索引的使用。

<2> 指定列查询

 查询字段为表达式

 

 为查询结果指定别名

 查询结果去重

 

<3> where条件

比较运算符

运算符说明
>, >=, <, <=
大于大于等于小于小于等于
=
等于NULL 不安全例如 NULL = NULL 的结果是 NULL
<=>
等于NULL 安全例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>
不等于
BETWEEN a0 AND a1
范围匹配[a0, a1]如果 a0 <= value <= a1返回 TRUE(1)
IN (option, ...)
如果是 option 中的任意一个返回 TRUE(1)
IS NULL
是 NULL
IS NOT NULL
不是 NULL
LIKE
模糊匹配。% 表示任意多个包括 0 个任意字符_ 表示任意一个字符

逻辑运算符

运算符说明
AND
多个条件必须都为 TRUE(1) 结果才是 TRUE(1)
OR
任意一个条件为 TRUE(1), 结果为 TRUE(1
NOT
条件为 TRUE(1) 结果为 FALSE(0)

实例

语文成绩在 [80, 90] 分的同学及语文成绩
select name, chinese from student where chinese between 80 and 90;
select name, chinese from student where chinese >= 80 and chinese <=90;

姓李的同学及李某同学

select name from student where name like '李%';

select name from student where name like '李_';   _ 匹配严格的一个任意字符

总分在 230 分以下且不性李的同学

 select name, chinese+math+english 总分 from student where chinese+math+english<230 and name not like '李%';

 说明

  • 这里where条件筛选的时候不能用别名来进行筛选,因为where条件会先执行在此之前还没有进行起别名。

结果排序

查询同学各门成绩依次按数学降序英语升序语文升序的方式显示
select name, chinese, math, english from student order by math desc, english asc, chinese asc;

 我们看到好像只有数学成绩是按照我们设定的顺序来排的是因为多字段排序排序优先级随书写顺序

查询同学及总分由高到低
select name, chinese+math+english 总分 from student order by 总分 desc;
说明
  • ORDER BY 中可以使用表达式也可以可以使用列别名

<4> 筛选分页结果

-- 起始下标为 0
-- 0 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- s 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- s 开始筛选 n 条结果比第二种用法更明确建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
对未知表进行查询时最好加一条 LIMIT 1 避免因为表中数据过大查询全表数据导致数据库卡死。

3、表的修改

UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

实例

将李四的数学成绩改为85分

update student set math=85 where name='李四';

4、表的数据删除

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

实例

删除李四的数据

delete from student where name='李四';

 删除整张表的数据

DELETE FROM test(表名);
注意删除整表操作要慎用

5、查看表结构

SHOW CREATE TABLE 表名\G

6、插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...

实例

将test1表中的数据进行去重

思路先将test1表中的数据去重插入到test2表中在将test2的表名改为test1

create table test1 (id int, name varchar(20));

insert into test1 values(100, 'aaa'),(100, 'aaa'),(200, 'bbb'),(200, 'bbb'),(200, 'bbb'),(300, 'ccc');
create table test2 like test1;

insert into test2 select distinct * from test1;

rename table test1 to old_test1, test2 to test1;

select * from test1;

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql

“MySQL表的增删查改” 的相关文章