基本概念

1.数据库DataBase简称:DB

2.什么数据库?——用于存储和管理数据的仓库。存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

3.数据库的特点:持久化存储数据。数据库就是一个文件夹系统

MySQL服务启动

1. 手动:管理——服务——手动关闭和开启。

2.cmd-->services.msc打开服务的窗口

3.使用管理员打开cmd

net start mysql:启动mysql的服务

net stop mysql:关闭mysql服务

MySQL登录

1.mysql-uroot-p密码

2.mysql-hip-uroot-p连接目标的密码

MySQL退出

1.exit(退出)

2.quit(辞职、退出)

索引的作用?它的优点缺点是什么?

索引在数据库的搜索时可以加速对数据的检索。类似与现实生活中书的目录,缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

在数据库中查询语句速度很慢,如何优化?

1.建索引2.减少表之间的关联 3.优化sql,尽量用PreparedStatement来查询,不要用Statement

索引类型有哪些?B-tree :b+树、b-树——叶子节点中的数据索引、二叉树,红黑树、Hash表

什么是事务?

事务就是被绑定在一起的SQL语句分组,有原子性,一致性,隔离性和持久性。

怎么验证MySQL的索引是否满足需求

explain语法:explain select*from table where type=1。

数据库的事务隔离

MySQL的事务隔离是在MySQL.ini配置文件最后添加:transaction-isolation=REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

Read-uncommitted:未提交读,最低隔离级别、事务未提交前,就可被其他事务 生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。

视图:是一种虚拟的表,具有和物理表相同的功能。优点:对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

Oracle和Mysql的区别?

1)库函数不同。

2)Oracle是用表空间来管理的,Mysql不是。

Oracle语句分三类:DDL、DML、DCL。DDL(Data Definition Language)数据定义语言,包括:Create语句:可以创建数据库和数据库的一些对象。Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。Alter语句:修改数据表定义及属性。Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。DML(Data Manipulation Language)数据操控语言,包括:Insert语句:向数据表张插入一条记录。Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。Update语句:用于修改已存在表中的记录的内容。DCL(Data Control Language)数据库控制语言,包括:Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。Revoke语句:可以废除某用户或某组或所有用户访问权限

数据库三范式是什么?

第一范式:列不可再分第二范式:行可以唯一区分,主键约束第三范式:三大范式是一级一级依赖的

什么是SQL?

Structured Query Language:结构化查询语言,定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。Mysql,oracle,SQLserver, DB2

都是关系型数据库。

SQL语句单行或多行书写,以分号结尾。MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。单行注释:--  注释内容或#注释内容(mysql特有)多行注释:/*注释*/

SQL分类

1) Data Definition Language (DDL 数据定义语言) 如:建库,建表 关键字:create,drop,alter等

2) Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改 关键字:insert,delete,update等

3) Data Query Language(DQL 数据查询语言),如:对表中的查询操作 关键字:select,where等

4) Data Control Language(DCL 数据控制语言),如:对用户权限的设置。关键字:GRANT,REVOKE等

DDL:操作数据库、表——CRUD

1.C(Create):创建

创建数据库:

create database数据库名称;

创建数据库,判断不存在,再创建:

create database if not exists数据库名称;

创建数据库,并指定字符集

create database数据库名称character set字符集名;

练习:创建db4数据库,判断是否存在,并制定字符集为gbk

create database if not exists db4 character set gbk;

2.R(Retrieve):查询

*查询所有数据库的名称:

show databases;

*查询某个数据库的字符集:查询某个数据库的创建语句

show create database数据库名称;

3.U(Update):修改

*修改数据库的字符集

alter database数据库名称character set字符集名称;

4.D(Delete):删除

删除数据库

drop database数据库名称;

判断数据库存在,存在再删除

drop database if exists数据库名称;

5.使用数据库

*查询当前正在使用的数据库名称

*select database();

*使用数据库

*use数据库名称;

2.DCL操作表

1.C(Create):创建

1.语法:

create table表名(

列名1数据类型1,

列名2数据类型2,

列名n数据类型n

);

*注意:最后一列,不需要加逗号(,)

*数据库类型:

1.int:整数类型

age int,

2.double:小数类型

score double(5,2)

3.date:日期,只包含年月日,yyyy-MM-dd

4.datetime:日期,包含年月日时分秒yyyy-MM-dd HH:mm:ss

5.timestamp:时间错类型包含年月日时分秒yyyy-MM-dd HH:mm:ss

如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

6.varchar:字符串

*name varchar(20):姓名最大20个字符

*zhangsan 8个字符张三2个字符

*创建表

create table student(

id int,

name varchar(32),

age int,

score double(4,1),

birthday date,

insert_time timestamp

);

*复制表:

*create table表名like被复制的表名;

2.R(Retrieve):查询

*查询某个数据库中所有的表名称

*show tables;

*查询表结构

*desc表名;

3.U(Update):修改

1.修改表名

alter table表名rename to新的表名;

2.修改表的字符集

alter table表名character set字符集名称;

3.添加一列

alter table表名add列名数据类型;

4.修改列名称类型

alter table表名change列名新列别新数据类型;

alter table表名modify列名新数据类型;

5.删除列

alter table表名drop列名;

4.D(Delete):删除

*drop table表名;

*drop table if exists表名;

*客户端图形化工具:SQLYog

DML:增删改表中数据

1.添加数据:

*语法:

*insert into表名(列名1,列名2,...列名n)values(值1,值2,...值n);

*注意:

1.列名和值要一一对应。

2.如果表名后,不定义列名,则默认给所有列添加值

insert into表名values(值1,值2,...值n);

3.除了数字类型,其他类型需要使用引号(单双都可以)引起来

2.删除数据:

*语法:

*delete from表名[where条件]

*注意:

1.如果不加条件,则删除表中所有记录。

2.如果要删除所有记录

1.delete from表名;--不推荐使用。有多少条记录就会执行多少次删除操作

2.TRUNCATE TABLE表名;--推荐使用,效率更高先删除表,然后再创建一张一样的表。

3.修改数据:

*语法:

*update表名set列名1=值1,列名2=值2,...[where条件];

*注意:

1.如果不加任何条件,则会将表中所有记录全部修改。

##DQL:查询表中的记录

*select*from表名;

1.语法:

select

字段列表

from

表名列表

where

条件列表

group by

分组字段

having

分组之后的条件

order by

排序

limit

分页限定

2.基础查询

1.多个字段的查询

select字段名1,字段名2...from表名;

*注意:

*如果查询所有字段,则可以使用*来替代字段列表。

2.去除重复:

*distinct

3.计算列

*一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

*ifnull(表达式1,表达式2):null参与的运算,计算结果都为null

*表达式1:哪个字段需要判断是否为null

*如果该字段为null后的替换值。

4.起别名:

*as:as也可以省略

3.条件查询

1.where子句后跟条件

2.运算符

*>、=、=、<>

*BETWEEN...AND

*IN(集合)

*LIKE:模糊查询

*占位符:

*_:单个任意字符

*%:多个任意字符

*IS NULL

*and或&&

*or或||

*not或!

--查询年龄大于20岁

SELECT*FROM student WHERE age>20;

SELECT*FROM student WHERE age>=20;

--查询年龄等于20岁

SELECT*FROM student WHERE age=20;

--查询年龄不等于20岁

SELECT*FROM student WHERE age!=20;

SELECT*FROM student WHERE age<>20;

--查询年龄大于等于20小于等于30

SELECT*FROM student WHERE age>=20&&age<=30;

SELECT*FROM student WHERE age>=20 AND age<=30;

SELECT*FROM student WHERE age BETWEEN 20 AND 30;

--查询年龄22岁,18岁,25岁的信息

SELECT*FROM student WHERE age=22 OR age=18 OR age=25

SELECT*FROM student WHERE age IN(22,18,25);

--查询英语成绩为null

SELECT*FROM student WHERE english=NULL;--不对的。null值不能使用=(!=)判断

SELECT*FROM student WHERE english IS NULL;

--查询英语成绩不为null

SELECT*FROM student WHERE english IS NOT NULL;

--查询姓马的有哪些?like

SELECT*FROM student WHERE NAME LIKE'马%';

--查询姓名第二个字是化的人

SELECT*FROM student WHERE NAME LIKE"_化%";

--查询姓名是3个字的人

SELECT*FROM student WHERE NAME LIKE'___';

--查询姓名中包含德的人

SELECT*FROM student WHERE NAME LIKE'%德%';

查询缓存(了解):MySQL拿到一个查询请求后→会先到查询缓存看看之前是不是执行过这条语句→命中就返回缓存的value。【他跟Redis一样,只要是你之前执行过的语句,都会在内存里面用key-value形式存储着。缓存在MySQL8.0之后就取消了——查询的缓存容易被清空消失(原因)】

MySQL的内连接、左连接、右连接有什么区别?

内连接:inner join;左连接:left join;右连接:right join。

内连接是把匹配的关联数据显示出来;左连接是把表全部显示出来,右边的表显示出符合条件的数据

MySQL索引是怎么实现的?

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。不同的数据引擎实现有所不同。

MySQL中的索引是B+树实现的,B+树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。

MySQL常用的引擎?

InnoDB引擎:InnoDB引擎提供了对数据库acid事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL运行的时候,InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行select count(*)from table指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。

MyIASM引擎:MySQL的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和InnoDB不同的是,MyIASM引擎是保存了表的行数,于是当进行select count(*)from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将MyIASM作为数据库引擎的首选。

什么是锁

锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。

MySQL的行锁和表锁乐观锁和悲观锁

MyISAM只支持表锁,InnoDB支持表锁和行锁,默认为行锁。

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。

悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

数据库的乐观锁需要自己实现,在表里面添加一个version字段,每次修改成功值加1,这样每次修改的时候先对比一下,自己拥有的version和数据库现在的version是否一致,如果不一致就不修改,这样就实现了乐观锁。

MySQL问题排查都有哪些手段

使用show processlist命令查看当前所有连接信息。

使用explain命令查询SQL语句执行计划

开启慢查询日志,查看慢查询的SQL。

groovy怎样从sql语句中截取表名_Mysql和SQL相关推荐

  1. groovy怎样从sql语句中截取表名_《SQL基础教程》学习笔记

    第1章 数据库和SQL 1-3 SQL概要 SQL语句及其种类 DDL-CREATE,DROP,ALTER DML-SELECT,INSERT,UPDATE,DELETE DCL-COMMIT,ROL ...

  2. groovy怎样从sql语句中截取表名_sql注入mysql篇

    SQL注入 __0x01 ♛Sql注入原理 Sql注入顾名思义是没有对用户输入的参数进行过滤导致测试者可以将一段非正常语句插入到查询语句中,由web应用带入到数据库中执行,从而读取数据库中的数据. _ ...

  3. groovy怎样从sql语句中截取表名_SQL基础教程学习笔记

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 1.数据库和SQL RDBMS:关系数据库管理系统 比较代表性的有:Oracle(甲骨 ...

  4. groovy怎样从sql语句中截取表名_SQL常用的基础查询语句

    数据分析过程中,我们经常可以看到提数的SQL语句,了解SQL常用的基础查询语句,是检验提数逻辑是否正确的途径之一,并且也能更方便使用SMART BI数据分析工具.今天就让小编带大家走进SQL基础查询的 ...

  5. groovy怎样从sql语句中截取表名_SQl-查询篇

    一.基本的查询语句---以student为例 (一)语法 Select 列名1,列名2,-.. From 表名 (二)实练 1.查询单个/几个列 2.查询全部列 PS:符号"*"表 ...

  6. python解析sql语句表名_python正则表达式匹配sql语句中的表名

    [ string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg ...

  7. java得到sql语句表名_使用fdb-sql-parser替换SQL语句中的表名

    导语 因为项目中要做跨数据源的数据分析功能,所以使用Presto这个开源框架.但是使用Presto的时候需要指定当前表所在的数据库类型和数据库名,所以需要对SQL语句中的表名进行捕获和替换. 一.探索 ...

  8. java正则获取sql表名_如何提取SQL语句中的表名

    如果不带别名的话,可以就正则实现. 不过java的正则有些限制,所以对于from中多于10张表的就有问题了,不多可以自己在添加,考虑不是很完善 Stringstr="INSERTINTOA\ ...

  9. oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?

    sql语句中修改表结构的命令是:"ALTER TABLE"命令. ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中 ...

最新文章

  1. H3C V7平台下的IRF堆叠
  2. WebLogic Server的Identity Assertion--转载
  3. Border-radius属性--设置圆角边框
  4. 关于继承方式和访问权限
  5. 开单大师(开源可定制的房产管理系统) v3.6.9学习版
  6. python坐标系转换库_转载:python库Pyproj进行坐标转换
  7. Oracle10gR5GridControl InstallOnLinux
  8. linux命令--ldconfig和ldd用法
  9. python Udp与Tcp
  10. SQLserver如何创建一个表
  11. C语言程序设计:图书管理系统(超详细有登录系统,附代码和实验报告)
  12. Facebook正式改名Meta,一个元宇宙新纪元由此开始
  13. IT程序员常去的论坛、社区、网站有哪些?
  14. 如何正确地准备KODI媒体文件
  15. 英寸、磅等单位的换算
  16. java arraylis 删除_Java ArrayList批量删除算法分析
  17. 情人节用python实现 跳动爱心代码 ,表白神器
  18. ‘数据分析实战’——战略分析案例(某购物商城分析案例)
  19. 2019第二届中国天津国际智慧消防高峰论坛
  20. python 遍历文件夹下所有图片

热门文章

  1. 凯撒密码c语言小写字母,凯撒密码c(c语言编程凯撒密码)
  2. android 手机工具箱,Android工具箱下载
  3. k均值例子 数据挖掘_数据挖掘的技术有很多种,常用的数据挖掘技术就这13种...
  4. 有多个python版本_python 多版本共存
  5. 小程序确定取消弹窗_小程序开发之弹出框
  6. @vue/cli 3 运行支持报错 socket
  7. 【...】小程序扩展运算符 ... 说明
  8. vue koa2即时聊天,实时推送比特币价格,爬取电影网站
  9. z-index失效的情况
  10. c语言 static的用法