mysql数据库
先看与数据库有关的几个名词:
DB:database,数据库,里边保存了有组织的规范的数据。
DBMS:database management system ,数据库管理系统,简称数据库软件,数据库产品,数据库是通过DBMS创建和操作的容器。
SQL:翻译叫结构化查询语言(Structure Query Language),专门用来与数据库通信的语言。
常见的数据库:MySql , Oracle , DB2 , SqlServer等
SQL的有点:
1.不是特定的数据库供应商专有的语言,几乎所有DBMS都支持。
2.简单易学。
3.简单,但实际是可以进行非常复杂和高级的数据库操作。
前面讲了,数据库是有组织的,规范的把数据保存起来的。
怎么个组织的,规范的?
数据库的特点:
1. 将数据放到数据表格(二维表)中,在将表格放到库中。
2.一个数据库中可以有多张表,每个表都有一个名字,用来标识自己。表名必须唯一。
3.表具有一些特性,这些特性规范了数据在表中的存储格式,形式,类似java中的“类”的设计。以后的开发中你会发现,表和类是可以一一对应起来的。
4.表由列构成,每列我们叫一个字段。所有表都是由一个多个字段(列)构成,这里表的每个字段对应到java中类的“属性”。比如学生信息表(学号,姓名,年龄,身高),对应java中Student类里有属性:学号,姓名,年龄,身高
5.表中数据是按照行来存储的,这里表有那些字段,就是表的结构对应java中一个Class类有那些属性;表里具体的每一行数据,对应java中new出类的实例。
MySql数据库原本是瑞典的公司叫MySqlAB公司,后被Oracle收购。
https://news.cnblogs.com/n/577472(Mysql的开发者,也是一个传奇)
优点:
-成本低:开源代码,一般可以免费试用
-性能高:执行很快
-简单:很容易安装和使用
DBMS分为两类:
-基于共享文件系统的DBMS(Access)
-基于客户机-服务器架构的DBMS(MySql,Oracle,SqlServer)
安装myslq一般是说的安装服务端。
Mysql提供两个版本:
-社区版(免费)
-企业版(收费)
下载:
-目前可以下载的版本:5.5,5.6,5.7,8.0(测试)
https://dev.mysql.com/downloads/mysql/
http://mirrors.sohu.com/mysql/MySQL-5.5/
mysql ZIP Archive:压缩版本,需要自己配置
mysql MSI Installer:安装版本,安装过程中自动配置
卸载:
-程序卸载这是第一步
-安装目录残余删除
-C盘下的隐藏文件夹ProgramData下的mysql残余删除,才算真正基本卸载干净。
安装演示!
Mysql数据库的安装目录下my.ini简单介绍!
启动和停止:
1、任务管理器或者计算机-->管理--->服务
2、命令行:net stop mysql net start mysql
MySql自带的客户端登陆和退出(exit,ctrl+c);
cmd的dos命令端(必须是管理员的):mysql -h localhost -P 3306 -u root -p
-h:主机
-P:端口
-u:用户名
-p:密码(这里可以写,也可回车后再写,写了密码,密码和-p不能有空格,前面的可以有空格)
本机的话,也可以简写:mysql -u root -p
show databases; 查看数据库系统里有那些数据库。
use test;打开一个数据库。
show tables;查看刚刚打开的数据库里有些什么表;
show tables from mysql;查看非所在库的表信息,用from关键字指定目标库。
select database(); 查看目前在那个库里。
演示一下SQL常用增、删、改、查,让大家有个感性的了解,后面要详细的讲!
create table student(id int , name varchar(4)); 创建一张表
desc student;查看表结构。
select * from student; 查看表里的记录。
insert into student(id,name) values (1,'小白'); 向表里插入一条记录值。
在Sql当中用select version();查看mysql的版本信息。
在Dos当中mysql --version 也是查看mysql版本信息。
查看数据库的编码:show variables like '%char%';
命令行中查询表的默认字符集:show create table 表名称;
修改表的默认字符集:ALTER TABLE 表名称 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
1、mysql的命令不区分大小写,但建议关键字大写,表名、列名小写;
2、每条命令用“;”结尾。
3、每条命令根据需要,可以进行缩进和换行,建议关键字在一行。
4、注释:
单行注释:#文字文字
单行注释2: -- 文字文字(主要 -- 后有空格)
多行注释: /* 文字文字 */
安装SQLyog!
对SQLyog的图形界面简单介绍一下!
SQL语言:
1、DQL语言(Data QueryLanguage) 数据查询语言.
2、DML语言(Data Manipulation Language)数据操纵语言,适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.
3、DDL语言(Data Definition Language)数据定义语言,适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.
4、TCL语言,事务控制语言(TCL).
导入雇员数据库,介绍一下数据库结构和字段含义!
#1、语法:
select 要查询的信息 from 表名;
#2、要查询你的信息可以是什么:
表中的一个字段或很多字段(中间用“,”分开)
常量值
表达式
函数
#演示单个字段查询:
SELECT first_name FROM employees;
#演示查询多个字段:
SELECT first_name,last_name,....... FROM employees;
#演示查询表中的所有字段:
SELECT first_name,last_name,....把所有字段写完 FROM employees;
SELECT * FROM employees; //*:通配符,表示所有字段
#另外补充:
SELECT
`department_id`,
`department_name`,
`manager_id`
FROM
departments ;
` 符号:不是单引号,是着重号!用于区别关键字和字段名的,可以省略。
#演示查询常量
select 100;
select 'john';
#演示查询表达式
select 100%98;
#演示查询函数
select version();
select ifnull(参数1,参数2); //参数1真的上null,就返回参数2,参数1不上null,就返回参数1自己.
#3、查询到的结果:是一个虚拟的表格。
#4、给字段起别名
方法一:用as关键字,如select 100%98 as 余数结果
好处:一个容易理解,语义化,另一个在后面的多表查询时候区分不同表里的同名字段。
方法二:as关键字可以换成空格
#案列:查询salary,并起别名为 out put,别名里有特殊符号空格,这时要加单引号。
select salary as ‘out put’ from employment;
#5、去重复
#查询员工表中的所有部门的编号
select distinct department_id from employment;
#6、+号的作用
#查询员工的名和姓,并并姓名链接起来显示
select last_name+first_name as 姓名 from employment;
// java中加号的作用:运算符,链接符(其中有字符型时)
// mysql中只有一个功能:运算符
select 100+90;
select ‘123’ + 90;当有字符型的时候,它会试图将字符型转换成数值型,然后再计算。
select ‘abc’ + 90;如果字符型不能转换,它就会自动将字符型转换为0,然后再计算。
select null + 任何东西;结果的null。
怎么实现这个例子呢?可以使用mysql你的一个拼接函数:
select concat(last_name,first_name) as 姓名 fromemployment;
#条件查询
语法
select
查询列表
from
表名称
where
筛选条件
1. 按照条件表达式来筛选:
条件运算符: > , < , = , != / <>(MYSQL特有的不等号) , >= , <=
2.按照逻辑表达式筛选
逻辑运算符:支持java的写法(&& , || , ! ), 但推荐使用mysql自己的(and , not , or)
3.模糊查询:
like , between...and , in , is null
4.看条件表达式:
案例:查询员工工资大于1200的员工有哪些;
select * from employees where salary > 12000;
案例:查询部门编号不等于90号的员工名和部门编号:
select concat(last_name,first_name) as 姓名 , department_id
from employees where department_id <> 90;
5.逻辑表达式:
逻辑运算符主要作用:链接表达式
&&和and : 全式true结果才式true;
||和or: 只要有一个true结构就式true;
!和not: 取反;
案例:工资在10000到20000之间到员工名,工资和奖金
select last_name,salary,commission_pct
from employees where salary>=10000 and salary<=20000;
案例:查询部门标号不式在90到110之间到,或者工资高于15000点员工信息
select * from employees where (department_id<90 and department_id>110) or salary>15000;
select * from employees where not(department_id>=90 and department_id<=110) or salary>15000;
模糊查询:
like
between and
in
is null | is not null
like:
案例:查询员工名中包含了"a"字符的所有员工的信息
select * from employees where last_name like '%a%'; // %:通配符,表示任意多个字符,也可表示0个字符, _:任意一个字符;
案例:查询第三个字符为n或第五个字符为l的员工信息
select * from employees where last_name like '__n_l%';
案例:查询员工信息表中员工名第二个字符是"_"的员工信息
select * form employees where last_name like '_\_%';//支持java的转义字符
select * from employees where last_name like '_&_' escape '&'; // escape '&':说明&这个符号是转义字符,mysql推荐这样写;
注意:一般情况下,like都是通配符连在一起使用的.
between and:
案例:查询员工工资中10000到20000之间到员工信息
select * from employees where salary>=10000 and salary<=20000;
select * from employees where salary between 10000 and 20000;
注意:使用between and
1.可以简洁sql语句
2.并且包含临界值
3.连个临界值不能调换位置,小的在左边,大的值在右边.
in:
案例:查询员工的工种编号是 it_prog,ad_vp,ad_pres中任意一个的员工信息
select * from employee where job_id='it_prog' or job_id='ad_vp' or job_id='ad_pres';
select * from employees where job_id in('it_prog','ad_vp','ad_pres')
in:判断某个字段的值是否属于in列表中的某一项
1.使用in比使用or后sql语句更简单
2.in的值必须是同一种数据类型或者兼容
is null | is no null:
案例:查询没有奖金率的员工信息
select * from employees commission_pct is null; 注意:commission_pct=null这个写法不能判断null值
查询奖金率的就取反:
select * from employees commission_pct is not null; 注意:当然这里is not也不能换成<>不等号.
补充一个东西:
安全等于号:<=> , 这个符号可以判断null值,也可以判断普通数值;
is null:只能判断null值,不能判断普通数值
=:只能判断普通数值,不能判断null值