Mysql数据库基础

Mysql数据库

数据库概述

概念

  1. 数据库(Database,简称DB) 是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件)
  2. 数据库管理系统(Database Management System,简称DBMS)
    ① 专门用于管理数据库的计算机系统软件;
    ② 能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并对数据完整性、安全性进行控制;
    ③ 我们一般说的数据库,就是指的DBMS,例如我们马上学习的MySQL就是其中之一;

常见的关系型数据库服务器(DBMS)

数据库公司特点
OracleOracle(甲骨文/神域)运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域 所需内存大
DB2IBM-收费速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。
SQL Servser微软全面,效率高,界面友好,操作容易,但是不跨平台。适用于于中小型企业领域。–有界面–中文
MysqlAB–>SUN–>Oracle开源,体积小,速度快。适用于于中小型企业领域。数据库集群

SQL概述:

SQL:结构化查询语言(Structured Query Language),是关系数据库的标准语言,它的特点是:简单、灵活、功能强大。

sql包括六个部分
  1. 数据查询语句(DQL)

其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

  1. 数据操作语句(DML)

其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。

  1. 事务处理语言(TPL)

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。

  1. 数据控制语言(DCL)

它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

  1. 数据定义语言(DDL)

其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。

  1. 指针控制语言

它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

SQL的书写的注意事项:–请遵循一个程序员的基本素养
  1. 在MySQL数据库中,SQL语句大小写不敏感
  2. SQL语句可单行或多行书写
  3. 在SQL语句中,关键字不能跨多行或缩写
  4. 为了提高可读性,一般关键字大写,其他小写
  5. 空格和缩进使程序易读

Mysql数据库操作

查看数据库:show databases;
使用数据库:use 数据库名;
创建数据库:create database 数据库名;
删除数据库:drop database;

存储引擎

  • MyISAM:拥有较高的插入,查询速度,但不支持事务,不支持外键。
  • InnoDB:支持事务,支持外键,支持行级锁定,性能较低。
  • 它提供了具有提交、回滚和崩溃恢复能力的事务安全。但对比MyISAM,处理效率差,且会占用更多 的磁盘空间以保留数据和索引

MySQL常用列类型

JAVAJava备注MYSQLMYSQL备注
Int短整型int短整型
long长整型bigint长整型
float单精度float单精度
double双精度double双精度
bigdecimal金融数据decimal金融数据
String字符串char
varchar
不可变字符串
可变字符串
Boolean布尔值Bit取值0和1

查看表结构和删除表

SHOW TABLES; 查看数据库中存在哪些表:
DESC table_name; 查看表结构:
SHOW CREATE TABLE table_name; 查看表的详细定义(定义表的SQL语句)
DROP TABLE table_name; 删除表:

表的约束

  1. 非空约束(NK):NOT NULL,不允许某列的内容为空。
  2. 设置列的默认值:DEFAULT。
  3. 唯一约束(UK):UNIQUE,在该表中,该列的内容必须唯一。
  4. 主键约束:PRIMARY KEY, 非空且唯一。
  5. 主键自增长:AUTO_INCREMENT,从1开始,步长为1。
  6. 外键约束:FOREIGN KEY,A表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)。

单表查询

简单查询

  • 语法:SELECT {*, column [alias],…}
    FROM table_name;

  • 运算:

    • 对NUMBER型数据可以使用+ - * /
    • 对DATE型数据可以使用+ -
消除结果中重复的数据

只对某一列有效
需求: 查询商品的分类编号。
语法: SELECT DISTINCT 列名,…

过滤查询

比较运算

= > < >= <= != <>

逻辑运算
  • AND{&&}
  • OR
  • (!)NOT

语法:WHERE 条件1 AND/OR 条件2;
注意:字符串和日期要用单引号扩起来.

优先级

比较运算符 > NOT > AND > OR (括号大于一切)

范围查询
  • BETWEEN AND
    语法:WHERE 列名 BETWEEN
    minvalue AND maxvalue:闭区间。
集合查询
  • IN
    WHERE 列名 IN (值1,值2…);
    使用IN运算符,判断列的值是否在指定的集合中。
空值查询
  • IS NULL
    WHERE 列名 IS NULL;
    判断列的值是否为空。
模糊查询
  • LIKE
    使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字
    %:通配符:可表示零或多个任意的字符
    _:通配符:可表示任意的一个字符
    通配符:用来实现匹配部分值得特殊字符

结果排序

  • ORDER BY
    ASC:升序 默认值
    DESC:降序
    ORDER BY 语句出现在查询语句的最后
    WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC];
    注意:别名不能使用引号括起来 否则不能排序

分页查询

SELECT*FROM table_name LIMIT beginIndex,pageSize;
beginIndex = (currentPage-1)*pageSize;
currentPage:需要查询的页数

聚集函数

  • COUNT:统计结果个数 值为NULL的不会统计在内
  • MAX:统计计算最大值
  • MIN:统计计算最小值
  • SUM:统计计算求和
  • AVG:统计计算平均值 值为NULL的不会统计在内

分组查询

  • GROUP BY
    可以使用GROUP BY 子句将表中的数据分成若干组,再对分组之后的数据做统计计算
    一般使用聚集函数才使用GROUP BY.
SELECT  聚集函数或者分组的列 FROM table_name  
WHERE 条件  GROUP BY 列名 HAVING 分组之后的条件;

GROUP BY 后面的列名的值要有重复性分组才有意义
使用HAVING字句,对分组之后的结果作筛选
不能在 WHERE 子句中使用组函数
可以在 HAVING 子句中使用组函数

多表查询

迪卡尔积

  • 没有连接条件的表关系返回的结果
  • 多表查询会产生笛卡尔积
  • 怎么去避免笛卡尔集?
    • 在WHERE加入有效的连接条件 等值连接

内连接

隐式内连接

SELECT * FROM product ,productdir WHERE product.dir_id=productdir.id

显式内连接

SELECT * FROM product (INNER) JOIN productdir ON product.dir_id=productdir.id

外连接

左外连接

查询出JOIN左边表的全部数据查询出来,JOIN右边的表不匹配的数据使用NULL来填充数据
SELECT * FROM product p LEFT JOIN productdir pd ON p.dir_id = pd.id

右外连接

查询出JOIN右边表的全部数据查询出来,JOIN左边的表不匹配的数据使用NULL来填充数据.
SELECT * FROM product p RIGHT JOIN productdir pd ON p.dir_id = pd.id

自连接查询

把一张表看成两张来做查询.一定要取别名!!!!

隐式内连接

SELECT sub.dirName,super.dirName FROM productdir super,productdir sub WHERE sub.parent_id = super.id

显示内连接

SELECT sub.dirName,super.dirName FROM productdir super JOIN productdir sub ON sub.parent_id = super.id

子查询(嵌套查询)

一个查询语句嵌套在另一个查询语句中,内层查询的结果可以作为外层查询条件

UNION

把多张表的查询结果进行纵向连接
特点:

  1. UNION联合查询的内容,列的类型可以不一致
  2. UNION联合查询的内容列数必须一致
  3. UNION有去重效果 UNION ALL没有去重效果
  4. 判断去重的标准,查询的所有列必须全部一致
(SELECT ID,NAME FROM order2018)

UNION

(SELECT ID,NAME FROM order2019)

UNION查询结果

数据操作(DML)

插入数据

INSERT INTO 表(column1,column2,column3...) values(value1,value2,value3...)

插入查询结果
 INSERT INTO	table_name (column1,column2,column3...)
     SELECT (column1,column2,column3...)
     FROM table_name 

 INSERT INTO productdir (dirName,parent_id)
   SELECT dirName,parent_id FROM productdir

修改数据

UPDATE 表 SET column=value WHERE condition
如果省略了where子句,则全表的数据都会被修改。注意:没有FROM

删除数据

DELETE FROM 表 WHERE condition

  • 如果省略了where子句,则全表的数据都会被删除

函数

CONCAT函数

字符串拼接
SELECT CONCAT
(productName,‘的商品的零售价为:’,salePrice)
FROM product;

IFNULL

MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数
IFNULL(expression_1,expression_2);
如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值