MySQL入门

注:以下所有内容供本人学习使用,请理智看待,欢迎评论

1.什么是数据库(DataBase : DB):

  • 数据库是按照数据结构来组织、存储和管理数据的仓库
  • 说白了数据库还是一些文件,只是这些文件采用了一些数据结构来组织数据

2.为什么使用数据库:

  • 首先,在我们学习数据库之前,我们已知的存储数据的方式有哪些? 变量、数组、集合?这些数据存储在内存里,然后是文本文件?xml文件 这些文件存在磁盘里,那么我们此处需要的一定是将数据存在磁盘里,因为数据在磁盘里可以永久保存。其次,我们需要对数据进行操作,这意味着我们需要追求效率,java提供了对文件的操作,可以通过I/O读取文件的数据,但这样效率太低了,假设有一百万条数据,我们都将其存在文件里,我们要查找一条数据就需要线性查找一条一条去找,很慢。而使用MySQL就能很好解决这个问题,MySQL对数据做了很多的优化,毕竟人家是专业的。

3.数据库技术的发展历程:

  • 1.层次数据库和网状数据库阶段:使用指针来表示数据之间的联系
  • 2.关系数据库技术阶段(数据之间使用表结构组织起来):代表:Oracle、DB2、MySQL、SQL Server等
  • 3.非关系型数据库阶段:解决关系型数据库在数据模型、性能、拓展伸缩性上面的缺点,所以非关系型数据库现在及其热门(Redis(键值存储数据库)、MongoDB(图形数据库))

4.SQL语句-如何操作数据库呢:

  • SQL是操作数据库的一种语言,包含六个部分,只需了解三个DQL、DML、DDL
    • 1.数据查询语言(DQL)
    • 2.数据操作语言(DML)
    • 3.事务处理语言(TPL)
    • 4.数据控制语言(DCL)
    • 5.数据定义语言(DDL)
    • 6.指针控制语言(CCL)

5.表(table)概述:

  • MySQL是关系型数据库,而关系型数据库就是通过表结构来组织数据的,类似:

id

name

age

10

张三

20

10

李四

22

  • 上图就是一个表,每一列表示属性(即字段Filed),每一行就是一条记录
  • ORM思想(对象表的映射):即与java的对应关系, 一个数据库对应一个项目、一行对应java一个对象、一张表对应java一个类(做java开发的时候,类名和表名一致)

6.数据库的操作以及存储引擎:

  • (1):数据库操作

      • a:SHOW DATABASES:查看数据库服务器里有哪些数据库
      • b:USE database_name:使用指定的数据库
      • c:SHOW TABLES:查看指定数据库里有哪些表
      • d:CREATE DATABASE database_name:创建指定名称的数据库
      • e:DROP DATABASE database_name:删除指定的数据库
  • (2):MySQL常见的存储引擎:

      • MyISAM:插入、查询速度快,但不支持事务、不支持外键
      • InnoDB:支持事务、外键、支持行级锁定、但性能低
      • 性能和安全总需要舍弃一个,只能选择折中取最优解,事务常用在涉及经济的领域

7.MySQL的数据类型(与java的对比):

备注

MySQL

JAVA

int可以不指定位宽,一般也不指定位宽

INT

int

BIGINT

long

处理小数时精度高(钱相关)

DECIMAL

bigDecimal

相当于java中date、Calendar

DATE/DATETIME

date

变长字符(可不指定长度)

VARCHAR

String

定长字符

CHAR

变长字符:存储大量字符串(文本类型)

TEXT

FLOAT

float

score double(5,2) 一共5位,小数占两位

DOUBLE

double

存储0 或 1 也可以存储M位二进制位

BIT(M)

boolean

8.对表的操作的语句:

  • 1.创建表:

-- 最后一个字段不用加逗号
CREATE TABLE student(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
age INT
)
-- 若表名使用MySQL关键字,需加上反引号
-- PRIMARY KEY表示主键,自增且不为空
-- AUTO_INCREMENT表示自增
-- UNIQUE表示唯一
-- NOT NULL表示不为空
-- DEFAULT 18  默认值为18 
  • 2.删除表:

DROP TABLE IF EXISTS `student`;

DROP TABLE `student`;

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

-- 删除表
DROP TABLE `order`
-- 插入数据
INSERT INTO student(id,name,age) VALUES(1,'kai',20)
-- 简写
INSERT INTO student VALUES(2,'kk',22)
-- mysql特有
INSERT INTO student(name,age) VALUES('q',22),('w',22),('r',33)

-- 修改
UPDATE student SET name='cc' WHERE id=1

UPDATE student SET name='王麻子' WHERE name='cc'
-- 删除
DELETE FROM student WHERE id = 1

DELETE FROM student WHERE name='r'
-- SQL里关键字最好大写(增强可读性),虽然SQL不区分大小写

10:DQL查询操作:

  • (1):语法

-- 语法 SELECT * FROM 表名 [WHERE]... -- * 可以替换为自定义列名,想查询多少列的数据就填几列 SELECT 列1,列2,列3... FROM 表名 [WHERE] ...

  • (2):查询操作:emp表

    • a:消除重复数据查询:

-- 语法 SELECT DISTINCT 列名1,列名2... FROM 表名... SELECT DISTINCT JOB FROM emp

    • b:算数运算符:

      • 在SQL中,summer型数据可使用+-*/创建表达式,对于date型数据可以使用+-操作
      • 运算符优先级跟java一致并可以使用括号去强制改变优先级运算顺序

-- 需求:查询emp表里的员工姓名,工资,并将翻倍 SELECT ENAME,SAL * 2 FROM emp

    • c:设置别名:

-- 语法 ... AS 别名 ... 
SELECT ENAME,SAL * 2 AS TOTALSAL FROM emp 
-- 别名可以省略AS 
SELECT ENAME,SAL * 2 TOTALSAL FROM emp 
-- 别名命名不规范虚加反引号,但加上引号会影响后面排序功能,需避命名不规范免 
SELECT ENAME,SAL * 2 AS `TOTAL SAL` FROM emp
    • d:按格式输出:

      • 查询到的数据进行字符串拼接,使用CONCAT(字符串1,字符串2,...)

-- 需求:查询mp表里员工的姓名和工资,输出格式为某某工资为多少 SELECT

CONCAT(ENAME,'工资是',SAL) AS S FROM emp
    • e:过滤查询:

      • 使用WHERE限定查询条件:
-- 语法 SELECT 列名1,列名2,... FROM 表名 WHERE 条件
    • f:比较运算符:

      • =,>,=.
-- 查询基本工资高于2000的全部雇员信息。 
SELECT * FROM emp WHERE SAL > 2000 
-- 查询出smith的信息。 
SELECT * FROM emp WHERE ENAME = 'smith'
    • g:逻辑运算符:

      • AND OR NOT
-- 07.查询出所有销售人员(SALESMAN)的基本信息,并且要求销售人员的工资高于1300。 
SELECT * FROM emp WHERE JOB = 'SALESMAN' AND SAL > 1300 
-- 09.查询出所有经理或者是销售人员的信息,并且要求这些人的基本工资高于1500。 
SELECT * FROM emp WHERE JOB = 'MANAGER' OR JOB = 'SALESMAN' AND SAL > 1500
    • h:范围运算符:

      • IN(值1,值2,...)
      • BETWEEN 小值 AND 大值
-- 08.查询出工资范围在1500~3000之间的全部雇员信息(包含1500和3000)。 
SELECT * FROM emp WHERE SAL BETWEEN 1500 AND 3000 
-- 12.查询出雇员编号是7369、7566、9999的雇员信息。 
SELECT * FROM emp WHERE EMPNO IN (7369,7566,9999)
    • i:判空

      • IS NULL
-- 10.查询所有领取奖金的雇员信息(comm不为空)。 
SELECT * FROM emp WHERE COMM IS NOT NULL AND COMM != 0
    • j:模糊匹配查询

      • LIKE
-- 13.查询出所有雇员姓名是以A开头的全部雇员信息。 
SELECT * FROM emp WHERE ENAME LIKE 'A%' 
-- 14.查询出雇员姓名第二个字母是M的全部雇员信息。 
SELECT * FROM emp WHERE ENAME LIKE '_A%' 
-- 15.查询出雇员姓名任意位置上包含字母A的全部雇员信息。 SELECT EMPNO,ENAME,JOB,MGR,SAL,HIREDATE,COMM,DEPTNO FROM emp WHERE ENAME LIKE '%A%'
    • k:结果排序:

      • DESC降序
      • ASC升序,不写默认升序
      • 多个排序条件通过逗号隔开
    • l:分页查询

      • LIMIT 起始索引,查多少条数据
      • 起始索引从0开始
SELECT * FROM emp LIMIT 0,3 
-- 开发时用curretPage表示当前页,pageSize表示当前页最大条数, 
SELECT * FROM emp LIMIT (curretPage - 1) * pageSize,pageSize

-- 16.查询出所有雇员的信息,要求按照工资排序。

SELECT EMPNO,ENAME,JOB,MGR,SAL,HIREDATE,COMM,DEPTNO FROM emp ORDER BY SAL DESC 
-- 17.要求查询所有雇员的信息,按照雇佣日期由先后排序。 
SELECT EMPNO,ENAME,JOB,MGR,SAL,HIREDATE,COMM,DEPTNO FROM emp ORDER BY HIREDATE ASC
-- 18.查询全部雇员信息,按照工资由高到低排序,如果工资相同,则按照雇佣日期由先后排序。 
SELECT EMPNO,ENAME,JOB,MGR,SAL,HIREDATE,COMM,DEPTNO FROM emp ORDER BY SAL DESC , HIREDATE ASC

注意事项:1。SQL执行顺序:FROM子句 -> WHERE子句 -> SELECT子句

    • m:统计函数:

      • COUNT(*):统计表中各有多少记录
      • SUM(列):汇总列的总和
      • MAX(列):获取某一列最大值
      • MIN(列):获取某一列最小值
      • AVG(列):获取列的平均值
SELECT COUNT(*) FROM emp SELECT SUM(SAL) FROM emp
SELECT MAX(SAL) FROM emp SELECT MIN(SAL) FROM emp SELECT AVG(SAL) FROM emp

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值