小白入门必掌握的数据库基本操作和一些常见问题 大神勿进~
首先先带大家了解一下什么是数据库
数据库就是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
创建数据库
- 使用create命令创建数据库 语法:CREATE DATABASE 数据库名
mysql> CREATE DATABASE ceshi;
删除数据库
- 语法: drop database 数据库名
示例删除名为测试的数据库
mysql> drop database ceshi;
选择数据库
- 语法: use ceshi
这样你就选择到了ceshi这个数据库,后续操作都在这个数据库中执行
mysql> use ceshi;
Database changed
创建数据表
- 语法: CREATE TABLE 数据表名字 (表字段名1,表字段名2)
mysql> use practice;
Database changed
mysql> CREATE TABLE ceshi (
-> num int,
-> age int,
-> name varchar(15)
-> );
Query OK, 0 rows affected
mysql>
删除数据表
- 语法: DROP TABLE 数据表名
mysql> DROP TABLE ceshi;
Query OK, 0 rows affected
mysql>
插入数据
- 语法: INSERT INTO 数据表名 (表字段名1,表字段名2 ··· 表字段名n)
VALUES
(数据1,数据2 ··· 数据n);
mysql> use practice;
Database changed
mysql> INSERT INTO user
-> (name,password,phone)
-> VALUES
-> ('JAMES','242424','16623246623');
Query OK, 1 row affected
mysql>
插入演示.png
查询数据
- 语法:select * from 数据表名
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用>- WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
更新数据
- 语法: update 表名 set 字段1='value' where id=’1‘
释意:把数据表中id为1的字段1的值修改
删除数据
语法:delete from 表名 where
把数据表id等于3的那条数据删掉示例:
delete from 表名 where id=3
mysql索引 加速查询
普通索引
即不应用任何限制条件的索引,该索引可以在任何数据类型中创建。字段本身的约束条件可以判断其值是否为空或唯一。唯一索引
使用UNIQUE参数可以设置唯一索引。创建该索引时,索引的值必须唯一。主键是一种特殊唯一索引。全文索引
使用FULLTEXT参数可以设置全文索引。全文索引只能创建在CHAR、VARCHAR、TEXT类型的字段上。查询数据量较大的字符串类型字段时,使用全文索引可以提高查询速度。注意:全文索引在默认情况下是对大小写字母不敏感的,可以通过使用二进制对索引的列进行排序以执行大小写敏感的全文索引。MySQL中只有MyISAM存储引擎支持全文索引联合索引
命名规则:表名_字段名1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
mysql查全部的总数、去重
- 用count(*)在里面写下查询的字段名
- 示例:查询ceshi里面的name的总数
mysql> select count(name) from ceshi;
示例.png
- distinct去重 写法 select distinct 字段名 from 表名
select distinct name from ceshi;
示例.png
left join 左连接 right join 右连接 inner join 内部连接
- 左连接 A B 两个表 返回A表所有的行 B有的就返回 B有但A没有的则不显示 B没有的显示null
右连接 相反
内部连接 只展示两者都有的
什么是mysql explain
- mysql explain就是用来查看一个SQL语句的执行计划,查看该SQL语句有没有使用索引,有没有做全表扫描
常见函数
- count(*)返回被选行数 max 返回某列最高值 min最低值 avg平均值 distinct去重 等
mysql处理死锁
- 首先什么叫死锁
两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。
- 处理方式
等待,直到超时(innodb_lock_wait_timeout=50s)。
发起死锁检测,主动回滚一条事务,让其他事务继续执行(innodb_deadlock_detect=on)。
由于性能原因,一般都是使用死锁检测来进行处理死锁。
mysql慢查询如何排查
- 1.查看数据库状态
- 2.查找日志文件中是否有sql相关打印---java日志中
- 3.执行show processlist; 查看mysql正在运行的sql线程,可看到sql语句执行时间
- 4.查看mysql慢查询日志(默认情况下,mysql不开启慢查询日志)
可通过命令:show variables like '%slow_query_log%'; 查看mysql是否开启了慢查询,以及慢查询日志在哪?ON表示已开启,时间阈值是10s。- 5.可以通过explain分析sql语句
mysql分页查询
语法: select * from 表名 limit n
查询这张表的第一页的前4条:
select * from 表名 limit 0,4
select * from ceshi limit 0,4;
查询结果.png
mysql where语句 like模糊查询
where条件语句 在查询后面加where 查询条件
like 模糊查询 “java%” 查询以java字段开头的信息 “%java%” 查询包含java字段的信息 “%java”查询以java字段结尾的信息示例:我要查ceshi表中name字段里以y结尾的所有记录
select * from ceshi where name like '%y'
mysql union 、union all操作符
- 都是可以用于合并两个或者多个select语句的结果集
不同点:如果select结果集的数据是一样的 则前者只会显示一条 而后者不管结果集是否一样 都会全部查出来
什么是mysql注入
- 就是一种网络攻击方式 通过sql语句来注入攻击
什么是sql注入呢 sql注入是比较常见的网络攻击方式之一,他不是利用操作系统的bug来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。
它会寻找到SQL注入的位置,判断服务器类型和后台数据库类型,针对不同的服务器和数据库特点进行SQL注入攻击
数据库权限怎么去做
- 数据库权限可以给他建一个最大管理员 然后在管理员下面还可以建用户 都可以设置他的权限 查询、删除等权限
mysql事务
- 执行的一些sql语句 要么全部成功 要么全部失败 不会出现部分成功部分失败
MySQL 事务主要用于处理操作量大,复杂度高的数据。多个操作构成一个事务
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
原子性 一致性 隔离性 持久性
mysql参数调优有哪些
- 最大连接数,连接时间超时等
mysql数据备份有哪些
- dump、 binlog
- dump 全量 数据备份dump 数据备份的好处是防止意外情况导致数据损坏或者数据丢失的情况下,可以通过备份去找回那份数据
- binlog 增量 二进制日志 binlog 可以调取通过日志记录的sql语句再次执行 找回丢失且没备份的那段数据
什么是mysql集群
- 集群就是用来解决单点故障的
- 多个mysql形成一个集群 统一对外提供服务 避免单击故障 数据的不一致则通过相互传导备份去做 主从读写分离
- mysql集群的典型部署是在某个网络中的不同机器上面安装集群的各个组建,因此mysql集群有称之为 网络数据库
什么是docker?
- docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。
- 核心
docker有3大核心:镜像、容器、仓库。
一些常用的linux命令
引用地址:linux常用命令
持续更新中......
网友评论