MYSQL
一、为什么要学数据库
保存数据的容器:
数组 (存到内存中)
集合 (存到内存中)
文件(存没问题,但是不太适合查询)
故需要一套管理系统去管理里边的数据
数据库的好处:
- 实现数据持久化
- 使用完整的管理系统统一管理,易于查询
数据库的相关概念:
DB: database 存储数据的仓库,保存了一系列有组织的数据(Mysql,Oracle贵,DB2,SQLServer(只能在windows下))
DBMS:Database management system 数据库管理系统,用于管理db中的数据,数据库是通过dbms创建和操作的容器
多台客户端—》数据库管理系统----》多个数据库
SQL:结构化查询语言,专门用来与数据库通讯的语言,几乎所有DBMS都支持SQL,简单易学,灵活使用可以进行非常复杂和高级的数据库操作。
DBMS分为两类:
- 基于共享文件系统的DBMS(access)
- 基于CS架构(客户端服务端)的DBMS(mysql,Oracle,SqlServer)
[mysqld] 服务端配置
port=3306
basedir = ‘…’ 表示安装目录
datadir = ‘…’ 表示文件目录
character-set-server = utf8 字符集
default-storage-engine=INNODB 数据库引擎
max_connetions = 100 最大连接数
修改完配置后需要重启
mysql服务的启动和停止
windows
停止服务 net stop mysql
启动服务 net start mysql
linux
停止服务 service mysqld stop
启动服务 service mysqld start
mysql -h localhost -P 3306 -u root -pmysql 这里输入密码是不可以有空格,其他参数有无都行
exit 退出
mysql常见命令
show databases; 查看数据库
information_schema 保持元数据信息
performance_schema 性能信息
test 测试数据库
mysql 保存用户信息
use test 进入库
source sql文件路径;导入目标数据库,路径可以直接拖拽sql文件到黑窗口获得。
show tables 查看库下表
show tables from mysql 查看所写库下表
select database() 查看当前所在库
create table student(id int,name varchar(20)); 创建表
desc student 查看表结构
select * from student 查看表中数据
insert into student (id,name) values(2,‘mingzhe’); 向表中插入数据
update student set name=‘lilei’ where id = 1 修改数据
delete from student where id = 2;删除数据
select version() 查看数据库版本
在命令行界面中 mysql --version 查看版本
在命令行界面中 mysql --V 查看版本
mysql语法规范
- 不区分大小写,建议关键字大写,表面列明小写
- 每条命令用;结尾
- 每条命令根据需求可以进行缩进,换行,建议关键字单独一行。
- 注释,用于解释说明
- 单行注释 # 注释文字
- 单行注释 – 注释文字 注意有空格
- 多行注释 /* 注释文字 */
DQL语言学习
data query languge数据查询语言 查
基础查询
查询表中单个字段
select 查询列表 from 表名
查询列表可以是:表中字段,常亮,表达式,函数
查询结果是一个虚拟的表格
select id from apple;
查询表中多个字段
select 字段一,字段二,… from 表名
查询字段顺序和个数都可以和原表不一致,个数和顺序按需求
select id,name from apple;
查询表中所有字段
select * from 表名
* 代表的是所有的字段,顺序和源试表一样。
若想通读写更好,更加灵活,则拼写全字段查询。
select * from apple;
查询时细节补充
1.查询时要打开指定的库
2.当字段被当成关键字时,使用 ‘’ 着重符来增加可读性
3.Navicat选中所选语句,可以部分执行
查询常量值
select 常量值:
常量值不来自于某表故不用from
显示字段名为其本身
select 100;
select ‘john’;
select 表达式:
select 100*98;
select 函数:
select varsion();
为字段起别名
select 字段 as 别名 from 表名:
方便理解,增加可读性
若查询字段有重名情况,则起别名可以区分开来
select id as 序号,name as 姓名 from apple
select 字段 别名 from 表名:
as 可以省略
若别名有特殊符号空格 #等,则需给别名加上双引号
select id 序号,name 姓名 from apple
字段去重
select distinct 字段 from 表名:
select distinct name from apple;
+号的作用
select 值一+值二 ;
mysql的+号只有一个功能,就是运算符
select 100 + 90; 若俩操作值都为数值型,则做加法运算
select ‘123’ +90;若一方为字符型,试图转换为数值型,成功则运算
selecr ‘abc’ + 90; 失败则字符串为0,在运算
select null + 90; 只要一方为null,则结果为null
select 'null' + 90 ; 结果为90
CONCAT实现拼接
select concat(‘字符一’,‘字符二’,‘字符三’) as 结果:
select concat(‘id’,‘name’) as ‘信息’ from apple;结果全为 idname
select concat(id,name) as ‘信息’ from apple; 结果为两字段拼接
IFNUll判断是否为空
select IFNULL(字段,为空所设值) 新字段名;
为空监测,为空了则替换为其所设值
select IFNULL(name,‘default’) as new_name from apple;
条件查询
WHERE语法
select 查询列表 from 表名 where 筛选条件;
执行顺序:from先查看有无表名,在where进行筛选,select在选择字段
条件表达式筛选
条件运算符 < > = != <> >= <=
<> 和 != 都为不等于,最好按<>使用
查询id>1的人: select * from apple where id >1;
逻辑表达式筛选
逻辑运算符 && || ! and or not
主要作用就是为了连接条件表达式
&&和and :俩都满足则满足
||和or:一个满足则满足
!和not:取反情况
case1:查询id在1到3之间的人:select id,name from apple where id >=1 and id <= 3;
case2:查询id不是在90到100之间的,或者工资高于15000的员工:
select last_namr from employees where id<=90 or id >= 100 or salary >= 15000;
select last_namr from employees where not(id>=90 and id <= 100) or salary >= 15000;
模糊查询
like
一般和通配符搭配使用
%表示任意多个字符,包含零个字符
_表示任意单个字符
\转义符当通配符出现在查询条件中使用
escape 指定转移字符
case1:查询名字包含a的:
select name from apple where name like ‘%a%’;
case2:查询二字符为a,五字符为b的:
select name from apple where name like “_a__b”
case3:查询一字符为_的:
select name from apple where name like “\_*”
select name from apple where name like “_a%” escape ‘a’;
between and
包含临界值
前后临界值大小顺序不能变,调换后不报错,但没数据。
提高语句简洁度
case1:查询id在3-5之间的
select name from apple where id between 3 and 5;
in
用于判断某值是否属于列表中某一项
in列表的值类型必须一致或兼容(“123”可以转为整性,与数值性兼容)
不可以使用通配符,in等价于 =号,而不是like
case1 :查询员工的工种编号是 IT_PROG,AD_VP,AD_PERS中的一个员工名和工种编号
select * from emploees where job_id in(‘IT_PROG’,‘AD_VP’,‘AD_PERS’)
is (not) null
=不可以判断null值
case1:没有奖金的员工
select * from employees where commission_pct is null;
case2:有奖金的员工
select * from employees where commission_pct is not null;
安全等于
<=> 可以判断普通类型的值, 也可以去判断null值
代表的是判断是否等于,但是可读性比较差。
作业
case1:工资大于12000的姓名和工资
SECELT name,salary FROM employees WHERE salary >= 12000;
case2:员工号为176的员工的姓名和部门号和年薪
SELECT name,depatment_id,(salary +IFNULL(goal,0) )*12 as money from employees WHERE id = 176;
case3:选择工资不在5000-12000的姓名和工资
SELECT name,salary FROM employees WHERE salary not between 5000 and 12000;
case4:选择20或50号部门工作的员工姓名和部门号
SELECT name,depatment_id FROM depatment_id in(20,50);
case5:选择公司中没有管理者的员工姓名和部门号
SELECT name,depatment_id FROM manage IS NULL;
case6:选择公司中有奖金的员工姓名,工资和奖金级别
SELECT name,salary,rank FR