MySQL基础学习笔记
1. 数据库相关概念
数据库是持久化数据的一种介质,可以理解成存储和管理数据的仓库。这里的持久化(persistence)指的是把数据保存到可掉电式存储设备中以供之后使用。
使用文件存储数据,查找不够方便;使用数据库管理数据可以:
- 可将数据持久化到硬盘
- 可存储大量数据
- 方便检索
- 保证数据的一致性和完整性
- 安全,可共享(三层验证)
- 通过组合分析,可以产生新数据。
常见的数据库产品有:Oracle、DB2、SQL Server、MySQL。
数据库中的相关概念有:
- DB(数据库,database):存储数据的“仓库”。保存了一系列有组织的数据。(格式统一的数据)
- DBMS(数据库管理系统),DB是由DBMS创建和操作的容器。
- SQL(结构化查询语言),与数据库通信的语言。
数据库存储数据的特点:
- 将数据放到表中,将表再放在库中,每个数据库有多个表,表名具有唯一性。
- 表由列组成,称为字段,相当于“属性”;表中的数据是按行存储的,相当于==“对象”==
MySQL是一种开放源代码的关系型数据库管理系统。它的优点在于:
- 成本低:开放源代码,一般可以免费试用
- 性能高:执行快
- 简单:容易安装使用
DBMS分为两类:
- 一是基于共享文件系统的DBMS(Access)
- 二是基于客户机——服务器的DBMS C/S(client/server),(MySQL、Oracle、SQL Server),要装服务端和客户端。
2. MySQL的使用
使用管理员权限的命令行启动/停止MySQL服务:
net start MySQL5.5
net stop MySQL5.5
使用命令行进行MySQL客户端登录:
mysql -h 主机名 -P 端口号 -u 用户名 -p密码
# 主机名 本地的话为localhost,端口号3306,用户名root,
# 连本地可以简略写为:
mysql -u root -p ...
MySQL命令要以;结尾。
MySQL常用命令
show databases; # 展示现有数据库
use xx; # 使用xx数据库
show tables; //展示该数据库的表
show tables from xxx; # 展示xxx数据库的表,此时的位置还是xx数据库
select database(); # 查看当前所在的数据库
create table stuinfo(
stuid int,
stuname varchar(20),
gender char,
borndata datetime); # 创建一个新的表,结构如上。
desc stuinfo; # 描述这个表stuinfo的结构。
select * from xx; # 从xx表中查询数据
insert into xx values(xxxxx); # 向xx中插入数据
update stuinfo set borndate='xxx' where stuid
= 2; # 对于表stuinfo中,stuid = 2的数据,修改它的borndata字段为xxx
delete from stuinfo where stuid = 1; # 删除表中stuid为1的一行数据
drop table xx; # 删除xx表
SQL语法注意事项:
- SQL语句中不区分大小写,建议库名,表名,字段名大写
- 注释写法,单行注释#和-- ,多行注释/* */
3. DQL语句
SQL有几种:
- DDL(数据定义语言,定义数据库对象:库、表、列等)、create/drop/alter
- DML(数据操作语言,定义数据库记录,即数据)、insert/update/delete
- DCL(数据控制语言,定义访问权限和安全级别)、
- DQL(数据查询语言,用来查询数据记录)、select
3.1 基础查询
select 查询列表 from 表名;
查询到的结果集是一个虚拟表,不是真实存在的一个表。**select后面的查询列表,可以由多个部分组成,中间用逗号隔开。**比如:
select 字段1,字段2,表达式 from 表名;
select first_name from employees; # 先进行from,看看是否能找到这个表,然后再找first_name
select 100; #查询常量
select 100%3; #查询表达式
select first_name,last_name from employees; #查询多个字段
select * from employees; #查询所有字段
select database();
select version(); #查询函数(调用函数,获取返回值)
select user() as xxx; #对user起别名为xxx,xxx可以用引号引起来
# 上面的as可以换成空格。
select first_name + last_name as "姓 名" from employees;
/*
mysql中的加号+只有加法作用:
1.两个操作数为数值型,正常加
2.当其中一个为字符型的时候,会强制转换为数值型,如果无法转换,则直接当做0
3.其中一个操作数为null,结果为null
因此上面的操作无法进行,将两个字段的数据组合,使用拼接函数concat
需要注意,concat的时候,如果其中一个为null,那么最后的结果也会变成null
需要使用ifnull函数判断
*/
select concat(first_name,last_name) as "姓 名" from employees;
# distinct 的使用
select distinct department_id from employees;
# 加上distinct关键字,查询的是去重之后的数据
# desc查看表的结构
desc employees;
# 也可以使用
show columns from employees;
#ifnull函数,a可以是字段、表达式......
ifnull(a,xx) #如果a是null,返回xx,否则正常返回a
查询的列表可以是:字段、表达式、常量、函数等。
当命令特别长的时候,使用F12可以自动换行对齐。
3.2 条件查询
根据条件过滤来查询语句。
语法:
select xxx from xxxx where 条件;
SELECT * FROM employees WHERE salary >= 12000;
执行顺序是,先查询from,找到表,然后对虚拟的结果表进行where筛选,最后进行select。
在where语句中,有如下关系运算符及关键字:
- >、<、>=、<=、=(只需要一个)、<>(不等于,写!=也行)。
- AND、OR、NOT。
- BETWEEN…AND、IN、LIKE、IS NULL。(模糊查询)
# 1. 关系运算
SELECT * FROM employees WHERE department_id <> 100;
SELECT first_name,last_name FROM employees WHERE salary < 15000;
# 2. 逻辑运算
SELECT
first_name,
last_name,
department_id,
email
FROM
employees
WHERE NOT (
department_id >= 50
AND department