MySQL学习笔记

131 阅读4分钟

课程引入

为什么要学数据库

常见的数据库管理系统有MySQL、Oracle、DB2、SqlServer。程序员在客户端程序,通过数据库管理系统,对数据进行增删改查。其中,MySQL由于开源、免费等因素,是当前最受欢迎的数据库管理系统。淘宝、网易、百度、Facebook等众多互联网公司都在使用MySQL,学精了MySQL,就业市场广阔。

将数据存放在内存中不能持久化存储,存放在普通文件中不方便管理。
数据库管理系统的好处:

  • 实现数据持久化
  • 使用完整的管理系统统一管理,易于查询

数据库相关概念

DB:数据库(database),存储数据的“仓库”,他保存了一系列有组织的数据。

DBMS:数据库管理系统(database management system),数据库是通过DBMS进行管理的。

SQL:结构化查询语言(structure query language)。

SQL的优点

  • 几乎所有的DBMS都支持SQL
  • 简单易学
  • 虽然简单,但是功能强大,灵活使用可以完成诸多复杂、高级的功能。

数据库是如何存储数据的

  1. 将数据放在表上,再将表放进库中。
  2. 一个数据库可以有多个表,每个表名称具有唯一性。
  3. 表有自己的特性,表示表中数据的属性,一张表就类似于C++中的一个类。
  4. 表由列组成,列也称为字段。每一个列就类似于C++中类的一个属性。
  5. 表中数据按行存储,每一行类似于C++中的一个对象。

MySQL服务的登陆和退出

# MySQL服务的启动
net start 服务名
# MySQL服务的停止
net stop 服务名
# 连接本机
mysql -u root -p
# 退出
exit

MySQL常见命令

# 查看当前所有数据库
show databases;
# 打开指定的库
use 库名;
# 查看库中的表
show tables from 库名;
# 创建表
creat table 表名(
    列名 列类型,
    列名 列类型,
    列名 列类型,
    ...  ...
);
# 查看表结构
desc 表名;

MySQL语法规范

  • 不区分大小写,但是建议关键字大写,其他小写
  • 每条命令用分号结尾
  • 命令可以缩进和换行
  • 单行注释
# 单行注释
-- 单行注释(--后有空格)
  • 多行注释
/*
多行注释
*/

SQL语言的细分

  • DQL语言(Data Query Language):查询功能
  • DML语言(Data Manipulation Language):增删改功能
    tips:也有书籍将上面两种语言统称为DML,也即合并了增删改查四个功能。
  • DDL语言(Data Define Language):数据定义语言
  • TCL语言(Transaction Control Language):事务控制语言

查询

基础查询

# 语法
select 查询列表 from 表名;
# 查询单个字段
select first_name from employees;
# 查询多个字段 逗号隔开
select first_name,last_name from employees;
# 查询所有字段
select * from employees;
# 起别名 AS关键字 (空格也行)
select first_name AS 名,last_name 姓 from employees
# 去重 Distinct关键字
select distinct last_name 姓 from employees

条件查询

# 语法
select 
    查询列表 
from 
    表名
where 
    筛选条件;
# 条件运算符
> 
<
<=
>=
<>!=
# 逻辑运算符
and&&
or|| 
not!
# 按条件运算符查询
select 
	* 
from 
	employees 
where 
	salary>12000;
#  逻辑运算符连接条件运算符查询

select 
	* 
from 
	employees 
where 
	salary>12000 
and
	salary<180000;
#  模糊查询

like 
between and
in
is null
/*
like 关键字 查询字符串
需要使用通配符
% 可以匹配若干个字符(包含0)
_ 可以匹配一个字符
*/
select 
	last_name
from 
	employees
WHERE
	last_name like '_r%'
/*
结果
Ernst
Greenberg
Urman
... ...
*/
# 转义字符:反斜杠 或 escape关键字

select 
	last_name
from 
	employees
WHERE
	last_name like '\_%'#查询以下划线开头的字符串
  	last_name like 'a_%' escape 'a' #与上面语句等价
# between and 查找区间范围内的数字

select 
	last_name,salary
from 
	employees
WHERE
	salary between 10000 and 15000
# in 判断字段值是否属于列表中的某一项

select 
	last_name,salary
from 
	employees
WHERE
	salary in (12000,13000)
# is null 判断字段值是否为null
# =!=不能判断null

select 
	last_name,salary
from 
	employees
WHERE
	commission_pct is null;
#	commission_pct is not null;

排序查询

# order by 排序列表(asc升序,desc降序)
# 注意先筛选(where)后排序

SELECT
	employee_id,salary,manager_id
From 
	employees
where 
	salary BETWEEN 10000 and 20000
order by 
	salary desc;

# 多关键字排序

SELECT
	employee_id,salary,manager_id
From 
	employees
where 
	salary BETWEEN 10000 and 20000
order by 
	manager_id asc,salary desc;
# 从前往后排序,先按manager_id升序,再按salary降序。

函数

# 调用
select 函数名(实参列表)

常见的字符函数

注意,SQL语言中的索引都从1开始。

# 获取字符串长度(字节)
select length("abc123");

# 字符串拼接
select concat(first_name,' ',last_name) '姓名'
from employees;

# 将last_name中第一个字母大写,其余小写
select concat(upper(substr(first_name,1,1)),lower(substr(first_name,3))) '姓名'
from employees;

常见的数学函数

# round 四舍五入
select round(1.456,2);

# ceil 向上取整
select ceil(1.1);

# floor 向下取整
select floor(1.9);

SQL中的+号

SQL中的+号只能用于数字间的运算,如果一方为非数字,会尝试将其转换为数字进行运算。如果其中一方为NULL,那么结果必然为NULL。

未完待续... ...