mysql初级入门

mysql常用命令:

show databases ;#展示数据库列表

use +数据库名字 打开数据库

show tables from +数据库名字 (展示数据库表)

记得在每句话加;

select database()得到数据库的名字

crate table +表名 () :创建

desc+表名 展示表的结构,包括,字段 类型

select version();查看数据库版本(在登陆后的情况下)

mysql --version查看数据库版本

DQL语言的学习

data query language 数据查询语言

DML语言:数据操作语言(增删改)

DDL:数据定义语言

TCL:事务控制语言

Transation control language

select 100:查询常量值

select ‘john’;

sellect 100*98;

查询函数

select +函数()

起别名:As 便于理解

如果要查询的字段出现重名,通过起别名可以避免。

select name ‘姓名’,age(别名,通过空格也可以实现)

去重:select DISTINACT department_id from 表名

+号的作用:类似于 字符串拼接

select ‘123’ + 90会试着将123转换成数值型,如果转换成功,则进行加法运算,

如果出现下面这种情况,则会转换不成功,将字符串类型转换为0,然后又进行+

select ‘job’ + 10

select null +任何东西,只要任何一个为null ,然后结果必定为null

CONCAT(‘a’,‘b’,‘c’)将abc连接一块变成abc

select IFNULL(,)判断字段是否为空,第一个参数为字段名,第二个参数为如果为空则设置的默认值。

条件运算符:< ,>,!=,<>,>=,<=

逻辑运算符:and ,和Java的&&一样,||(Java) 和 or(MySQL),!和not(MySQL)

%包含任意多个字符,_任意一个字符,类似于一个占位符

当查询第二个字符为_的情况,通过__%肯定不行,需要使用转义字符,如 _ _%.,两个 _ 中间是一个转义字符\

还可以通过 _KaTeX parse error: Expected group after '_' at position 1: _̲% escape ''进行转义,和\效果一样。

net start mysql

net stop mysql

Is NULL 用于判断空值,=和<>不能用来判定空值 ,IS NOT NULL

<=>:安全等于,既可以判断null值,又可以判断普通的数值,可读性较低。

select * 
from user
where
-- `name` like '%%'
create_time like '%%' OR create_time Is  NUll
#在条件查询时,会自动过滤掉所查询字段为null的数据,但是要记住,空字符串不会被过滤,只有字段显示为null的才会被过滤。

order by

order by 根据某个字段进行排序 desc 是降序,默认是升序,asc

后面可以跟一个字段,多个字段,表达式,以及函数和别名

select id,name,age as number,email,create_time,update_time 
from user
where
deleted =0
ORDER BY
number DESC,
id DESC
# 先根据age的别名number进行降序排序,然后在age相同时,再根据id降序排序
ORDER BY
number DESC,
LENGTH(email) DESC
#后根据email邮件的长度进行降序排序)

length是一个函数 length(Email)根据字段

常用函数

upper/lower:将字符串变成大写/小写

substr/substring:截取字符串

instr(‘str1’,‘str2’)第一个字符串是需要在此字符串查找的,第二哥字符串是你想要查这个字符串是否包含在第一个字符串中

trim(str) 去掉字符串前后的空格

DATE_FORMAT函数:将日期格式转换成字符串

SELECT 
  DATE_FORMAT(NOW(), '%y年%m月%d日') AS output ;
SELECT 
 name, age,
  CASE
    WHEN age > 80
    THEN '老不死' 
    WHEN age > 18
    THEN '成年人了,可以坐牢了' 
    WHEN age > 0
    THEN '出生了' 
    ELSE 'D' 
  END AS 年龄级别
FROM
  user ;

上面是case的用法

count函数的介绍

效率

  • MYISAM存储引擎下,count(*)的效率高
  • INNODB存储引擎下,count(*)和count(1)效率差不多,比count(字段)要高一些
  • count(*),count(1)所得到的结果是一样的,还有count(字段),区别在于在不同存储引擎下,效率不同

​ 使用count(*) 统计一共有多少行

SELECT COUNT(salary) FROM employees;#只有字段不为0才可以进行计数,
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;

分组函数 (又叫聚合函数,统计函数,组函数)

sum、avg一般用于处理数值型数据

max、min、count可以处理任何类型数据

在进行条件查询时,所查询的条件会自动过滤这个条件的字段为空的数据,就像like%%也会自动过滤数据为空的数据。

注意:count函数的返回类型为long

经典sql语句

SELECT 
  COUNT(*) AS 员工个数,
  department_id 
FROM
  employees 
GROUP BY department_id 
HAVING 员工个数 > 2 ;

mysql的执行顺序

1、from
2、join
3、on
4、where
5、group by
6、avg,sum…
7、having
8、select
9、distinct
10、order by
11、limit

连接查询

交叉连接,内连接,外连接

记录数 = 第一张表记录数 * 第二张表记录数;字段数 = 第一张表字段数 + 第二张表字段数(笛卡尔积)

交叉连接产生的结果是笛卡尔积,没有实际应用。 表1 cross join 表2;

内连接 使用Inner join on

外连接 分为left join 和right join 使用on 。左连接,右连接的区别在于一个是以左表为主表,一个是以右表为主表,所匹配的字段也是以你选择的那个主表为选择。

还可以使用having,前提是两个表中的字段名字保持一致,一样,如果不一致的话则需要使用on:having(字段,字段)

sql语法

select 查询列表

from 表1 别名 【连接类型】

join 表2 别名

on 连接条件

【where 筛选条件】

【group by 分组】

【having 筛选条件】

【order by 排序列表】

having只能对group by的结果进行操作 ,having不可以单独使用,必须配合group by使用

联合查询

使用UNION关键字

实际上是一条sql语句写两遍,然后将两个语句合起来,类似于or的使用

要求多条查询语句的查询列数是一致的,也就是字段一致。,要求顺序最好是一致的,

数据库操作语言DML

包括 insert,update,delete

添加语句

要求:列数和值的个数必须保持一致,如

INSERT INTO beauty(NAME, sex, id, phone) -- 这种不支持多条数据的插入
VALUES('蒋欣', '女', 16, '110');

2:可以省略列名,默认插入所有列(这种支持多条数据的插入)

修改语句

修改单表

update 表名
set=新值,列=新值…
where 筛选条件;

也可以修改多表

删除语句

单表删除:delete from 表名 where 筛选条件

truncate table 表名; 直接删除表 不能加where条件

DDL数据库定义语言

数据库创建 :create

数据库修改:alter

删除:drop

创建

create

database [if not exists] 库名

[character set 字符集名];

修改

修改数据库的字符集:ALTER DATABASE books CHARACTER SET gbk;

删除

DROP DATABASE IF EXISTS books; 数据库的删除

表的管理

表的修改

添加列:alter table 表名 add column 列名 类型 ;

修改列的类型或约束:alter table 表名 modify column 列名 新类型 ;

修改列名:alter table 表名 change column 旧列名 新列名 类型;

删除列:alter table 表名 drop column 列名;

修改表名:alter table 表名 rename to 新表名;
表的复制
-- 仅仅复制表的结构
CREATE TABLE copy LIKE book_author ;
-- 复制表的结构和数据
CREATE TABLE 表名 
SELECT 
  * 
FROM
  `user`
-- 只复制部分数据
CREATE TABLE copy3 
SELECT 
  id,
  au_name 
FROM
  book_author 
WHERE nation = '中国' ;

TCL事务控制语言

事务又分为显示事务和隐式事务

隐式事务:事务没有明显的开始和结束的标记,如insert,update,delete语句

显式事务:事务具有明显的开始和结束的标记。显式事务的前提是必须设置自动提交为禁止,步骤:

1:开启事务

2:编写事务中sql语句,只有增删改查,也就是数据库查询语言和数据库操作语言,不包括DDL数据库定义语言。

3:结束事务 commit :提交事务

rollback:回滚事务

delete和truncate在事务使用时的区别

delete在事务操作失败时会发生回滚

而truncate在事务操作失败时不会发生回滚。

还有区别就是在进行删除操作时,delete可以进行条件删除,而turncate只能进行整张表数据的删除。

数据库的隔离级别

在学习数据库的隔离级别之前,我们需要学习,一些数据库事务操作可能出现的数据问题如脏读,幻读,不可重复读。

脏读:一个事务读取到了其他事务还没有提交的数据,主要出现在更新操作中

幻读:一个事务两次读取一个范围的记录,但得到的结果不同,幻读的重点在于增加和删除。

不可重复读:同样的条件你读取出来的数据却不一样。

隔离级别:

已提交读:允许事务读取被其他事务提交的数据,可以避免脏读,但是不可避免不可重复读和幻读的问题

未提交读:允许事务读取其他事务未提交的数据,会造成脏读,幻读,不可重复读。

可重复读:确保事务可以多次从一个字段中读出相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但是幻读的问题还是不能避免。

串行化:确保这个事务可以从表中读取相同的行,但是在这个事务持续时间,禁止其他事务对其进行插入,删除,更新操作,所有并发问题都可以避免,但是效率十分低下。

mysql和oracle事务隔离级别支持的对比

Oracle支持2种事务隔离级别:(提交读)READ COMMITED,(串行化)SERIALIZABLE。

Oracle默认的事务隔离级别是:READ COMMITED。

Mysql支持4种事务隔离级别。Mysql默认的事务隔离级别为:REPEATABLE READ(可重复读)。

视图

语法: create view 视图名 as 查询语句;

视图的好处:
  • 重用sql语句
  • 简化复杂的sql操作,不必知道它的查询细节
  • 保护数据,提高安全性
视图的修改

1:create or replace view 视图名 as 查询语句

alter view 视图名 as 查询语句

删除视图

使用drop

查看视图

show create view 视图名

desc 视图名

猜你喜欢

转载自blog.csdn.net/qq_44794782/article/details/120552802