0
点赞
收藏
分享

微信扫一扫

8-MySQL(库操作、表操作、CRUD操作)

zhongjh 2022-04-19 阅读 51
sqlmysql

SQL

SQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。
SQL主要可以划分为以下 3 个类别:

  • DDL(Data Definition Languages)语句
    数据定义语言,这些语句定义了不同的数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
  • DML(Data Manipulation Language)语句
    数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字,主要包括 insert、delete、update 和select 等。
  • DCL(Data Control Language)语句
    数据控制语句,用于控制不同的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。
    管理方式:
    在这里插入图片描述

1、库操作

查询数据库

show databases;

创建数据库

create database ChatDB;

删除数据库

drop database ChatDB;

选择数据库

use ChatDB;

演示:
在这里插入图片描述
前面四个是默认的数据库;
先选择数据库,再执行对这个库的操作;
在这里插入图片描述
在这里插入图片描述
创建数据库school;
在这里插入图片描述

2、表操作

查看表

show tables;

创建表

create table user(
 id int unsigned primary key not null auto_increment,
 name varchar(50) unique not null,
 age tinyint not null,
 sex enum('M', 'W') not null
)engine = INNODB default charset = utf8;

存储引擎,字符编码。

查看表结构

desc user;

查看建表sql

show create table user\G

删除表

drop table user;

演示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表在磁盘上存储有3个东西:

  • 表的结构
  • 表的数据
  • 表创建的索引

3、CRUD操作

3.1、insert增加

# 单独写
insert into user(name, age, sex)values('zhangsan', 20, 'M');
insert into user(name, age, sex)values('gaoyang', 22, 'W');
insert into user(name, age, sex)values('chenwei', 20, 'M');
insert into user(name, age, sex)values('zhangfan', 21, 'W');
insert into user(name, age, sex)values('zhanglan', 22, 'W');
# 一起写
insert into user(name, age, sex)values('zhangsan', 20, 'M'), ('gaoyang', 22, 'W'), ('chenwei', 20, 'M'), ('zhangfan', 21, 'W'), ('zhanglan', 22, 'W');

如果书写插入的语句没有写字段名,values的参数就要按表的字段的顺序书写。建议书写插入的语句中书写字段名。
在这里插入图片描述
问题:上面insert单独写和一起写的区别是什么?
在这里插入图片描述
SQL语句执行过程:

  • 首先,client和server进行3次握手,握手成功,建立通信链路,然后交互完成,释放通信链路;
  • client发送SQL到server上,接收并返回处理结果,最后server和client断开连接,tcp四次挥手。
    在这里插入图片描述
    如果我们是执行第一种方法,分别发送5句插入语句,就是做了5次上面的操作。
    如果我们是执行第二种方法,只发送1条SQL,就做了1次上面的操作(省了tcp协商和交互的次数,就是减少了tcp的握手和挥手)。

3.2、update修改

update user set age=23 where name='zhang san'; 
update user set age=age+1 where id=3;

3.3、delete删除

delete from user where age=23; 
delete from user where age between 20 and 22; 
delete from user;//表中数据全部删除

问题:我们删除zhangsan后,如果我们再插入zhangsan,那么它的id( id为主键)是补上原来的1还是6呢?
删除前:
在这里插入图片描述
删除zhangsan,再将zhangsan插入:
在这里插入图片描述
是6。
所以说,id的自增减开弓没有回头箭,一直往后跑,复用不了,总有上限,达到上限后,再插入,就插入失败,id是主键,不可能有相同的id,我们定义成BIGINT,就是8个字节,能表示的范围就非常非常大了。

3.3、select

select * from user;

在这里插入图片描述
*是通配符。但是后面表的结构一改,选择出来的数据可能和预期的不一样。
建议加上字段名。
在这里插入图片描述
回表: SQL语句和索引相关的,和性能息息相关。看索引怎么设计,不回表最好。select后面的列名我们是要负责的。
在这里插入图片描述
逻辑与是条件都要满足,逻辑或是满足其中一个条件。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
between and 是包含了起始和末尾边界
在这里插入图片描述
在这里插入图片描述
通配符:

  • 使用like,不能用=
  • _匹配单个字符
  • % 匹配任意个字符,包括零个字符
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.4、去重distinct

select distinct name from user;

去掉重复的,只显示1个
在这里插入图片描述

4、空值查询

is [not] null

select name, age, sex from user where name is null;
select name, age, sex from user where name is not null;

在这里插入图片描述

5、union合并查询

注意:union默认去重,不用修饰distinctall表示显示所有重复值
select name, age, sex from user where age >= 21 union all select name, age, sex from user where sex = 'M';

在这里插入图片描述
在这里插入图片描述
相当于就是把两个select的结果合并起来。

6、带in子查询

[NOT] IN(元素1,元素2,…,元素3)
在这里插入图片描述
在这里插入图片描述

补充

逻辑或or是不会用到索引的,这是错误的理解。
单单看逻辑或,是不会用到索引,但是MySQL server对SQL是有优化的,or就是要么满足这个条件要么满足那个条件,MySQL server在合适的条件下会把这个逻辑或or转化成合并查询!这样的SQL没有出现or,就是完全可以用到索引了。in或者not in其实都会用到索引,针对MySQLserver 的优化。

举报

相关推荐

0 条评论