一、数据库分类
数据库通常分为层次式数据库、网络式数据库和关系式数据库。
现在最常用的两种数据库:关系型数据库、非关系型数据库。
关系型数据库:Oracle和MySql
非关系型数据库:
键值存储数据库:Redis
列存储数据库:HBase
面向文档数据库:MongoDB
图形数据库:Neo4J
- MySQL发展历程
- 1996年:MySQL 1.0版本正式发布;
- 1999-2000年:Monty团队成立MySQL AB公司,并将MySQL支持事务处理;
- 2001年:InnoDB存储引擎集成到MySQL中;
- 2004年:MySQL发布4.1版本,新增子查询;
- 2005年:MySQL发布5.0版本,增加存储过程、触发器、视图等功能;
- 2008年:1月份被Sun公司收购;
- 2009年:Oracle公司收购了Sun公司,MySQL转入Oracle旗下;
- 2010年:MySQL5.5版本发布;
- 2015年:MySQL5.7 GA版本发布;
- 2018年:MySQL8.0 GA版本发布;
- MySQL不同版本的重要改进
- 4.1:增加子查询的支持;字符集中增加了对UTF-8的支持;
- 5.0:增加了视图、过程、触发器的支持,增加了information_schema系统数据库;
- 5.1:增加了表分区的支持;支持基于行的复制(row-based-replication);
- 5.5:InnoDB成为默认存储引擎;支持半同步复制;引入performance_schema动态性能视图;
- 5.6:支持部分Online DDL操作;支持ICP/BKA/MRR等优化器改进;引入GTID;支持多库并行复制;
- 5.7:密码安全性提高;支持多线程并行复制、多源复制;支持JSON;引入sys系统库;引入MGR;
- 8.0:在线持久化全局参数;大幅提高数据字典性能;引入窗口函数、ROLE、直方图、降序索引、不可见索引;修复自增列重启BUG。
二、SQL简介
什么是SQL:
结构化查询语言
使我们有访问数据库的能力
是一种ANSI的标准计算机语言
SQL能做什么:
SQL面向数据库执行查询
SQL可在数据库中插入新的记录
SQL可更新数据库中的数据
SQL可从数据库删除记录
SQL可创建新数据库
SQL可在数据库中创建新表
SQL可在数据库中创建存储过程
SQL可在数据库中创建视图
SQL可以设置表、存储过程和视图的权限
SQL是一种标准,但是:
-
- SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQL语句用于查询和更新数据库中的数据。SQL可与数据库程序协同工作,比如MS-Access、DB2、MS SQL Server、Oracle、MySQL以及其他数据库系统。
- 不幸地是,存在着很多不同版本的SQL语言,但是为了与ANSI标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如SELECT、UPDATE、INSERT、DELETE、WHERE等)。
注释:除了SQL标准以外,大部分SQL数据库程序都拥有它们自己私有的扩展。
分类:
DDL(Data Definition Language):数据定义语言,定义了对不同数据段,数据库,列,表,索引,等数据库对象。常用关键词:creare、alter、drop。
DCL(Data Control Language):数据控制语言,用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。常用的关键字是:grant,revoke等。
DML(Data Manipulation Language):数据操作语言,用于增删改查数据库记录,并检查数据库完整性。常用的关键字是:insert、delete、update、select。
三、DDL
- 语法:
- CREATE DATABASE dbname
- 例:创建数据库test1,命令如下:
- create database test1;
- 执行结果如下图所示:
- Query OK, 1 row affected (0.24 sec) 可以分为3个部分
- Query OK:表示上面的命令执行成功
- 1 row affected:表示操作只影响了数据库中一行的记录
- 0.24 sec:记录了操作执行的时间
查看系统中有哪些数据库: show databases;
- information_schema:主要存储系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等。每个用户都可以查看这个数据库,但根据权限的不同看到的内容不同。
- performance_schema:MySQL5.5引入的系统库,用于存储系统性能相关的动态参数表。
- sys:MySQL5.7引入的系统库,本身不记录系统数据,基于information_schema和performance_schema之上,封装了一层更加易于调优和诊断的系统视图。
- mysql:存储系统的用户权限信息。
- sakila和world:两个为样例数据库。
选择数据库:use dbname;
查看数据库下的表:show tables;
删除数据库:drop dbname;
- 创建表
- 基本语法:
1 CREATE TABLE tablename( 2 column_name_1 column_type_1 constraints, 3 4 column_name_2 column_type_2 constraints, 5 6 ... ... 7 8 column_name_n column_type_n constraints); 9 ) 10 11 中文翻译: 12 13 create table +自己的表名( 14 15 字段名称 字段数据类型 约束, 16 17 字段名称 字段数据类型 约束, 18 19 字段名称 字段数据类型 约束 20 21 )
primary key :主键约束 不能为空并且唯一
not null :不能为空
varchar():可变的字符串
date :日期 年月日
decimal :数 (10,2) 保留几位小数点
int 整型
- 例:创建一个名称为emp的表。表中包括ename(姓名)、hiredate(雇用日期)、sal(薪水)和deptno(部门编号)4个字段,字段类型分别为varchar(10)、date、decimal(10,2)、int(2)。
查看表:desc tablename;
查看创建表的sql语句:show create tablename /G; (/G使得记录能够按照字段竖向排列)
删除表:drop table tablename;
修改表:alter table 表名 modify 字段名 数据类型;
增加表字段:alter table 表名 add 字段名 数据类型 约束;
删除表字段:alter table 表名 drop 字段名;
修改表中字段名:alter table 表名 change 旧字段名 新字段名 数据类型;
修改表中字段排列顺序:alter table 表名 add|modify 字段名 数据类型 after 已有字段名; (修改或添加字段到指定字段的下面位置)
修改表名:alter table tablename rename to 新表名;
四、DML
1.增(insert):
- 基本语法:insert into 表名(字段名1,字段名2,......) values(值1,值2) ;
- INSERT INTO tablename(field1,field2,...fieldn) VALUES(value1,value2,...,valuen);
注意事项:
可以不用指定列名,但是values后面应该和字段顺序一致。
含可空的字段,非空但含有默认值的字段以及自增字段,可以不在insert后的字段列表里出现,values后面对应字段的值。
2.改(update):
- 基本语法:update 表名 set 字段名1=值1,字段名2=值2 where条件
- UPDATE tablename SET field1=value1,field2=value2,...fieldn=valuen [WHERE CONDITION];
- 同时更新多个表中数据
- UPDATE t1,t2,...tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]
注意:多表更新的语法更多地用于根据一个表的字段来动态地更新另一个表的字段。
3.查(select):
- 基本语法:
- SELECT * FROM tablename [WHERE CONDITION];
- select 字段名,字段名.... from 表名 可以添加where+条件
- 其中”*“表示要将所有的记录都选也来,也可以用逗号分割所有字段来代替。
- 查询不重复的记录
- distinct关键字
- 条件查询
- where关键字
- =、>、<、<=、>=、!=
- and、or