一. 数据库
- 数据库系统(Database System),是由数据库及其管理软件组成的系统,简称DBS。数据库用于存储数据,管理软件用于处理数据。
- 数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合,简称DB。它是一个按数据结构来存储和管理数据的计算机软件系统,即数据库包含两层含义:保管数据的“仓库”,以及数据管理的方法和技术。
- 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
- 关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。它广泛采用了选择、投影、连接、并、交、差、除、增删查改等基于数学运算的方法来实现对数据的存储和查询。用户可以用规范化的数据库操作语言在一个表及其多个表之间做非常复杂的数据查询。例如:mysql sqlserver DB2 oracle
- 非关系型数据库:主要是建立在基于键值对(Key-Value)的对应关系上的数据库,表和表之间是分离的,没有复杂的表和表之间的关系,处理数据时不需要经过SQL层的解析,性能高。例如:mongodb
- 非关系型数据库优点:适应海量数据的增加以及数据结构的变化,具有极高的并发读/写性能,在海量数据中能够实现快速查询。
- 数据库的概念,没有一个完全固定的定义,随着数据库历史的发展,定义的内容也在不断的变化,一种比较普遍的观点认为.
- 数据库的基本特点包括:实现数据共享,减少数据冗余;采用特定的数据类型:具有较高的数据独立性;具有统一的数据控制功能。
- 系统数据库是指随安装软件一起安装,用来协助mysql数据库系统实现数据管理与存储操作的数据库,这些数据库是整个mysql数据库运行所必需的重要基础。
二. mysql
-
mysql的特点:
运行速度快;开放源代码,提供免费版本;容易使用;能够工作Windows linux macOS 等众多系统上,易于移植,提供了多个语音的API;
-
MySQL:
是一个小型关系型数据库管理系统,开发者为瑞典MYSQL AB 公司。由于其体积小、速度快、总体成本低,尤其是开放源代码这一特点,被广泛应用在Internet上的中小型网站中。
-
数据库中的对象
(1)表(table):它是由行和列组成,列由同类信息组成,每列又称为一个字段,每列的标题称为字段名,行包括了若干个列信息项。一行数据称为一个或者一条记录。
(2)索引(index) 索引是数据表中根据指定的字段建立起来的顺序。提供了快速访问数据的途径。
(3)视图(view):视图是一个虚拟的表,视图是由查询数据库表产生,他可以用来控制用户对数据的访问,并能简化数据的显示,即通过只显示那些需要的数据信息。
-
标识符
MYSQL数据库中对象的标识符是指由用户自己定义的,可以用来唯一标志某个数据库对象的有意义的字符序列。
标识符的规则:
(1)不加引号的标识符,必须由系统字符集中的字母、数字 “_” $ 组成
(2)不加引号的标识符,不允许完全由数字字符组成;
(3)标识符中的第一字符可以是满足以上条件的任何一个字符(包括数字)
(4)标识符不允许使用mysql数据库中的关键字作为数据库名或表名
(5)标识符中不允许使用特殊字符如“" “/” ".”
(6)mysql关键字和函数名不区分大小写;
(7)数据库名、表名和视图名是否区分大小写取决于操作系统;
(8)windows上通常不区分大小写,linux主机上的mysql往往需要区分大小写
-
数据库权限
用来对连接到数据库的用户进行各种访问权限的验证,以此来判断用户是否属于合法的用户。
权限管理两个阶段认证:
(1) 先对用户进行身份验证,合法的用户通过认证,不合法的用户拒绝连接。
(2)对于通过验证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作。
-
字节是计算机存储容量的一种计量单位;
字符和字节不同,任何一个文字或符号都是一个字符,但所占字节数目是不固定的,不同的编码导致一个字符所占的内存不同。
-
mysql的校对规则,是指对某一字符集中字符串之间的比较、排序指定的规则。
-
mysql的校队规则一下特征:
(1) 两个不同的字符集不能有相同的校对规则。
(2) 每个字符集有一个默认的校对规则;
(3)存在校对规则命名约定:以其相关的字符集名开始,中间一般包括一个语言名,并以_ci _cs _bin 结束。
-
mysql 的字符集和校对规则有四个默认级别设置:服务器级、数据库级、表级、字段级。不同的地方设置,作用也不相同。
服务器级:字符集和校对规则,在mysql服务启动的时候确定,由mysql的配置文件中指定。默认使用Latin1 作用服务器字符集。
数据库级:字符集和校对规则在创建数据库的时候指定,也可以在创建完数据库后通过ALTER database 命令进行修改。
表级:字符集和校对规则在创建表的时候指定,也可以通过alter table 命令进行修改表的字段仍然使用表的字符集。
列级:字符串和校对规则的定义可以在创建表时指定,或者在修改表是调整,如果在创建表的时候没有特别指定字符集和校对规则,则默认使用表的字符表和校对规则。
-
mysql中的数据用各种不同技术存储在文件或内存中。这些技术中的每一种技术都使用不同的存储机制、索引技巧和数据锁定水平,并且提供不同烦人功能和特性。
-
通过在这些技术中进行选择,用户可以在数据访问的速度、数据安全性、功能丰富性进行选择和折中,从而改善数据库应用的整体性能。这些不同的技术以及配套的相关功能在MYSQL中被称作存储引擎。
-
存储引擎是MYSQL数据库最重要的特性之一,mysql默认支持多种存储引擎,以适应用户需要,通过选择不同的存储引擎可以提高应用的效率,提高灵活存储。
-
数据表是数据库中的最基本最重要的操作对象,是数据存储的基本单位,数据表是数据的载体。
-
数据表的特点:(1)数据表行和列组成,每一行代表一条完整的记录
(2) 每一行的值在同一个表中具有唯一性。
(3) 字段名的唯一性
(4) 行与列的无序性。可以任意排列,一般按照插入表的顺序进行排列。
-
系统变量(system variables)按作用域范围,分为会话系统变量和全局系统变量。
全局系统变量的特点在于,它是用于定义MySQL服务实例的属性、特点;
会话系统变量的特点在于,它仅仅用于定义当前会话的属性,会话期间对某个会话系统变量值的修改,不会影响到其他会话中同一个会话系统变量值;
-
MySQL数据库中的常量、变量和参数都有数据类型,它用来指定一定的存储格式、约束和有效范围。
-
MySQL数据库中也提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型,不同mysql版本支持的数据类型可能不同。
-
mysql日期类型中使用最频繁的是date、time和datetime三种类型。
-
MySQL数据库中支持两种符合类型:ENUM枚举类型和SET集合类型。
枚举类型:在创建表时通过枚举方式显示指定;只能选一个
SET集合类型:可以从预定义的集合中去的任意数量的值,可选多个
-
数据库要求数据完整性。数据完整性是指数据的准确性和一致性,它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作而提出的。
-
数据库表中的约束包括:主键约束、外键约束、唯一约束、检查约束、空值约束和默认值约束等。
主键约束:指在表中定义一个主键来唯一确定表中每一行数据的标识符。主键保证记录的唯一性,它唯一的标识了每一条数据。
-
select 子句用来指定查询结果中需要返回的值。
from子句用来指定从中查询的数据表或视图。
where子句用来指定查询的条件
group by子句用来指定查询结果的分组条件。
having子句用来指定分组或集合的查询条件。
ORDER BY 子句用来指定查询结果的排序方法。
limit子句用来指定限制查询结果返回的行。
union子句用来将多个select语句查询结果合并为一个结果集。
-
- 字符串是指用单引号或双引号括起来的字符序列。
- 数值常量可以分为整数常量和浮点数常量
整数常量是指不带小数点、是整数的十进制数
浮点数常量是指使用小数点的数值常量。
- 十六进制整型常量
- 日期常量用单引号将表示日期的字符串括起来构成,包括年月日数据类型为DATE
- 布尔值只包含两个值 TRUE和FALSE
- null值可使用各种列类型,通常用来表示没有值、无数据等意义。
-
索引的作用
- 加快查询速率
- 降低数据库的IO成本
- 加快表与表之间的连接
- 减少分组和排序时间
-
索引的分类
普通索引、唯一性索引、主键、全文索引、单列索引与多列索引。
-
事务是一种机制、一个操作序列,包含了一组数据库操作命令。事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。事务适用于多用户同时操作的数据库系统的场景,通过事务的完整性保证数据的一致性。
-
事务的ACID特点:原子性、一致性、隔离性、持久性
-
事务的控制方法:事务处理命令控制、使用set设置事务处理方式
-
事务处理命令控制事务:begin 开始一个事务 、commit 提交一个事务 rollback 回滚一个事务
-
三、数据库命令
SQL语言四部分:
数据定义语言(DDL):DROP(删除)、CREATE (创建)、ALTER(删除增加重命名)
数据定义语言(DML):INSERT(插入)、 UPDATE(更新、修改)、 DELETE(删除)
数据定义语言(DQL):SELECT (查询)
数据定义语言(DCL):GRANT(授权) REVOKE(回收权限) COMMIT(提交) ROLLBACK(回滚)
四. 数据库命令使用
-
创建数据库
create datebase test; #注释 test是数据库名称
-
更改字符集和校队规则
mysql> alter database test #test 数据库必须存在 -> DEFAULT CHARACTER SET gb2312 #字符集 -> DEFAULT COLLATE gb2312_chinese_ci; #校队规则
-
查看数据库
SHOW DATABASES; #查看数据库结构
-
进入数据库
use [数据库名]
-
查看当前正在使用的数据库
select database();
-
删除数据库
drop database chen; #chen为数据库名称 drop schema test; #test为数据库名称
-
刷新用户信息
flush privileges;
-
查看权限
SHOW GRANTS FOR root; #root是用户名
-
更改权限
grant all on *.* to 'root'@'%' IDENTIFIED BY '123456'; #mysql8的授权 use mysql; create user 'zxc'@'%' identified by '123456'; #创建用户设置密码 grant all privileges on *.* to 'root'@'%' with grant option; #授权 flush privileges; #刷新用户信息 exit
-
撤销权限
REVOKE 授权的权限 ON 数据库名.表名 FROM 用户名&来源地址;
在权限是ALL(所有权限时)可以撤销单个权限,但是在规定权限的时候,撤销权限只能撤销我们有的权限。
-
查看当前登录的mysql支持的字符集列表
show charset;
-
查看数据表结构
show tables; #在查看前确定是否进入表。
-
查看指定表结构相关的信息
desc 库名.表名; use 库名; desc 表名; describe 库名.表名;
-
创建数据表
create table 名称(列名1 类型((长度)not null,列名2 类型(长度) not null .....default'',primary key (主键名)); CREATE table 表名(字段1名称类型,字段2名称类型,···,PRIMARY KEY(主键名));
-
插入数据
insert into ti values(插入的数值1,插入的数值2......插入的数值*);
-
删除表中数据
DELETE FROM 库名.表名 WHERE '条件表达式'; #删除的数据 delete from 库名.表名; #删除表中数据 drop table 库名.表名 #删除表
-
查询表中数据
select * from 表名; select * from 库名.表名;
-
查看MySQL数据系统中所有的全局系统变量
show global variables;
-
查看MySQL数据局系统中所有的会话系统变量
show session variables;
-
修改系统变量
#方式一 set global[session] 系统变量名 = 值 ; #方式二set @@ global [session].系统变量名 = 值; #在set命令后面添加相应单词则会相应系统变量,不添加默认修改会话系统变量值。
-
插入当前时间代码
create table 库名.表名(字段名称 date,字段名称2 time,字段名称3 datetime); insert into 库名.表名 values(NOW(),NOW(),NOW());
-
添加、删除主键
alter table 表名 add primary key(字段1....字段*); #添加主键 alter table 表名 drop primary key; #删除主键
-
主键外键
create table 表名(字段 类型,字段 类型 ..... primary key(主键字段)); #创建表时添加主键 create table orders(字段 类型,字段 类型,... , primary key(主键字段),foreign key(字段) references Person(字段)); #创建表时添加主键外键;
-
修改字段从100开始添加
alter table 库名.表名 auto_increment=100;
-
往表里添加新字段
alter table 库名.表名 add 字段名称类型;
-
修改字段数据类型长度
alter table 库名.表名 modify 字段 类型;
-
删除字段
alter table库名.表名 drop column 字段名称;
-
修改主键从自增性修改为普通型主键字段
alter table 库名.表名 change 字段名称 字段名称 类型;
-
修改表名
alter table 原表名 rename 新表名;
-
插入多条数据
insert into 库名.表名 values ('数据1','数据2',...'数据N'), ('数据1','数据2',....'数据N');
-
更新update
update 表名 set 更新的信息 where 条件判断式;
-
linux执行SQL文件
mysql > source SQL路径
-
删除表中记录
truncate table 表名;
-
创建库设定类型
create database 库名 default charset 字符集;
-
创建普通索引
create index 索引名称 on 表名(字段名称);
-
查看索引
show index from 表名 \G; show keys from 表名 \G;
-
创建唯一索引
create unique index 唯一索引名称 on 表名(字段);
-
删除索引
DROP INDEX <索引的名称> ON 表名; ALTER TABLE 表名DROP INDEX <索引的名称>; ALTER TABLE 表名DROP PRIMARY KEY;
-
绑定引擎
create table 库名.表名(字段 类型......字段 类型,primary key(主键字段))engine=innodb
-
事务
begin; 事务开始 rollback; 回滚撤销
-
自动提交
chaknaset autocommit = 0 ; #禁止自动提交,默认值 set autocommit = 1 ; #开启自动提交。
-
查看系统支持的引擎;
show engines \G;
-
默认引擎
show engines;
-
查看表使用的存储引擎
SHOW TABLE STATUS FROM 库名 WHERE name = ‘表名’\G; SHOW CREATE TABLE 库名.表名 \G;
-
配置引擎
ALTER TABLE 表名 ENGINE=引擎;
-
linux启动关闭
systemctl start mysqld systemctl stop mysqld
-
windows启动关闭
net stop MySQL net start MySQL