MySQL数据库知识概览

数据库知识大纲

MySQL数据库知识概览_第1张图片

一、数据库基础知识

MySQL数据库知识概览_第2张图片
D:数据
DB:数据库 一批数据构成的有序集合
DBMS:数据库管理系统
RDBMS:关系数据库管理系统

二、数据库的安装

windows命令行

登录 :mysql  -u用户名  -p密码    或 mysql  -u用户名  -p回车,不显示密码
登出:exit或quit
登录其他账号 :mysql  -u用户名  -p密码  -h机器  -P端口号

右键,命令行界面 分号结束 回车执行。只有退出和登录的时候不用加分号

show databases;  查看当前数据库

字符集 charset=utf8 注意没有 -

show variables like'char%';查看字符集  show variables; 查看配置变量

修改字符集:核心配置文件 my.ini (2个)编码:ANSI
自动创建在系统目录 位置C:\ProgramData\MySQL\MySQL Server 5.6
mysql的安装目录 位置C:\Program Files\MySQL\MySQL Server 5.6 自己新建一个my.ini文件。内容: [client]
default-character-set=utf8
.ini 文件 可以用记事本打开 #是注释
[mysql] 和 [mysqld] 模块下面的 default-character-set=utf8 取消注释

配置文件修改后应该重启服务restart

三、数据库的基本操作

– 单行注释 /* */ 多行注释

information_schema系统数据库中 schemata 表中 存储了所有数据库的基本信息

use information_schema;  --选中当前数据库才能查看
SELECT * FROM SCHEMATA; -- 查看数据库基本信息
character set utf8 –设置字符集为utf8

collate 数据库字符集的比较方式:

  • utf8_bin 区分大小写; utf8_general_cs 区分大小写;
  • utf8_general_ci 不区分大小写;
修改数据库字符集:alter database 数据库名 character set utf8;

修改完数据库字符集,需要重启mysql数据库。

数据库操作
- 显示数据库:show databases;
- 显示数据库创建语句:show create database db_name;
- 查看当前数据库 :select database();
- 切换当前数据库 :use db_name;
- 删除数据库:drop database db_name;
- 修改数据库:alter database db_name;
备份恢复

备份数据表中的数据(在windows下cmd执行,不是在mysql里面执行):

mysqldump -u用户名 -p密码 数据库名 > d:/文件名.sql(位置)【在非登录命令下进行】

恢复数据库(mysql命令):

 Source 文件名.sql【登录,先选择要恢复到的数据库use 数据库名;

可视化:转储(备份) 运行sql文件(恢复)

存储引擎

MySQL中的数据用各种不同的技术存储在文件(内存)中的配置文件my.ini指定了默认存储引擎 default-storage-engin=INNODB

常用引擎:

  1. INNODB 表名.frm文件存储数据表结构 .db存储数据和索引
    特点:支持事务(ACID)、行级锁定(并发)、支持外键
  2. MyISAM .frm文件存储数据表定义 .myd(数据) .myi(索引)
    特点:效率高,不支持外键,事务,
  3. Memory
    存储:内存中
    场景:临时存储大量数据

四、数据表的基本操作

MySQL数据库知识概览_第3张图片

创建:create table 表名( 列名 类型 约束,列名2 类型…);每列之间用,隔开 最后一列不加逗号
删除:drop table 表名;
查看表结构:desc 表名;
查看表详细结构:show create table 表名;
数据完整性:
  • 实体完整性:设置主键。唯一非空
  • 引用(参照)完整性:设置外键,约束从表,从表的值必须从主表而来 两个字段名可以不同
  • 域完整性:值域 检查check约束,触发器,用户自定义的
约束:
  • 主键primary key,删除主键,可以不指定主键名称
  • 外键foreign key(允许有多个空值),一个表可以添加多个外键。 删除外键必须指定外键名,不指定外键名,系统会自动命名。
  • 非空not null, null-未知 非空约束只能是列级约束
  • 唯一unique,MySQL中允许出现多个NULL值 (不确定的值)
  • 默认约束(Default 默认值)指定某列的默认值,字符串和日期型要用‘’,数字不用
  • 自增:设置表的属性值自动增加 auto_increment,必须加在主键列上,每个表最多一个,允许自己赋值。MySQL自增的最大值为:21 4748 3647。

外键是表级别的约束条件,定义完列之后写:

[constraint 外键名] FOREIGN KEY (列名1 [ ,列名2,]REFERENCES (主键列1 [ ,主键列2,]
修改表结构 ALTER

MySQL数据库知识概览_第4张图片

追加表约束

MySQL数据库知识概览_第5张图片

自动增长:ALTER table 表名 modify 列名 数据类型 auto_increment;

一个表中,最多有一个自动增长列 。 自动增长列必须有索引。主键/外键是一种索引

create index 索引名 on 表名(列名)--添加普通索引
删除表约束

MySQL数据库知识概览_第6张图片

删除唯一 不能使用 unique
对象级别的删除用drop,数据删除用delete
查看 主/外键约束名 show create table 表名;

删除有关联的数据库:先删除外键,才能删除列;或者删除主表才能删除列

五、数据类型

整数类型

显示宽度不够补空格 建表时设置zerofill 补0;超过显示宽度,按实际宽度显示,与存储大小无关。

浮点类型

float double 不准确
定点数类型:decimal (以字符串形式存储) decimal(精度,标度) 精度:总长度 标度:小数位数 ,float double都会四舍五入,但是decimal会警告信息。 准确存储银行数据

日期和时间类型:
  • datetime: 按实际输入的格式存储
  • timestamp:存储世界标准时间UTC格式,可以对时区进行转换
show variables like "%time_zone%"; -- system 系统时区 东八区
set time_zone = '+10:00'; -- 改为 东10-8:00 西八区

datetime,timestamp类型都可以 插入null,插入null时会取默认值
datetime的默认值为null,timestamp的默认值不为null,且为系统当前时间

  • year 类型 :
    取值范围;1901-2155
    参数可以是四位数字或字符串,两位数值或字符串
字符串类型:
  • char 固定长度; 存储时会删除末尾的空格; 超过给定长度会被截取 。适合存储短字符

  • varchar 可变长度; 需要使用1或2个额外字节记录字符串的长度。适用于字符串列的最大长度比平均长度大得多。

  • enum 枚举类型:列值是单个给定的枚举值,允许空值; 最多有65535个数据

  • set 集合,允许选定多个给定的set值,允许空值。最多有64个数据

主键 插入值null表示不给它赋值,采用 auto_increment

二进制类型 :

区别 存储数据大小的不同。blob 类型是一种特殊的二进制类型,可以存储数据量很大的二进制数据,如图片和音频文件。 但是数据库中一般不直接存图片,音频文件,存储的是路径

注意:

  1. 存储路径中 \ 会被过滤掉 解决:\ 或 / 代替 \
  2. mysql中没有布尔类型,但为了支持sql标准,可以定义boolean关键字。 真正存储的是tinyint类型
    可以向布尔类型里面插入0和1,true,false。 true插入显示的是1。

数据类型的选择和引擎也有关系

严格模式

严格模式(sql_mode属性):把数据插入数据库时进行严格检查,相反为宽松模式查询
会话级别:select @@sql_mode; select @@session.sql_mode; 关闭会话失效
服务级别:select @@global.sql_mode; 重启服务失效
永久级别:直接修改my.ini 配置文件

一般在生产过程中,不会重启服务。所以想要永久,更改服务级别即可。

修改: set sql_mode=xxx ;  set session_sql_mode=xxx; set global.sql_mode=xxx;
运算符
算数运算符:
  1. 除 / 可以有小数,都会保留四位小数
  2. % 符号和被除数一致
  3. = 等于 3=null 结果null null-未知
  4. < = >安全的等于 可以判断空值 3< = >null 0 不同 null < = > null 1 相同 true
  5. < > 不等于 !=

select 表达式; 运行可以显示结果

  1. is NULL 判断是否为null

  2. between and 包含两个边界值

  3. least() 返回最小值

  4. like 通配符匹配

  5. REGEXP 正则表达式 [ ] 多选一

逻辑运算符:

异或:XOR 相同为0 不同为1

位运算符:二进制 运算结果:64位无符号整数。
  1. bin(); 函数 查看二进制的表现形式
  2. | 位或 & 位与 ^ 位异或
  3. << 左移 >> 右移 ~ 取反

运算符的优先级:算数>关系>逻辑

六、 数据的操作

MySQL数据库知识概览_第7张图片

插入:insert语句
insert into 表名(字段1,字段2…….)values(1,值2……);
-- 值与字段名相匹配,不必与创建表时列的顺序一致。

全列值插入(每列都插入值时),列名列表可以省略不写 :

 insert into 表名 values(…….); 
 -- 值的顺序必须与创建时列的顺序,个数,类型一致。

非全列值插入(部分列插入) ,必须写列名列表
一条语句插入多条记录:每条记录用()括起来,记录之间用逗号隔开。

 insert into 表名(字段1,字段2)values(值1,值2) 【,(值1,值2),(值1,值2)…】

有默认值 但是未知时 可以插入null

更新:update语句

set 设置值 where 条件限定

update 表名 set 字段名=‘值’; //将所有记录的该字段名都改变了
update 表名 set 字段名1=‘值1[,字段名2=‘值2’…… ] where sname=’zhangsan’;

条件语句中 使用主键字段(非空唯一)特指某一条记录

删除:delete语句
delete from 表名; -- 删除所有记录 清空表  可以加条件   中间没有 *
delete from 表名【 where 删除的条件】;-- 删除指定数据
truncate table 表名;-- 清空表 执行效率高
查询

单表查询

可以查询列 常量 表达式 函数。SELECT ‘aaa’; SELECT 5+3; SELECT now();

MySQL数据库知识概览_第8张图片

SELECT * FROM 表名;  * 查询所有字段 
SELECT 字段名1【,字段名2……】 FROM 表名;  
  1. 多个条件之间使用逻辑运算符(and or )连接。不能用逗号

  2. 带in关键字的查询: in(值1,值2,……) 后面多选一

	 < > 不等于   
	 NOT 取反  
  1. 排序 ORDER BY 字符串 数值 日期 事件 都可以比较大小
order by 字段名 DESC; 降序   ASC 升序 (默认)

多列排序(指定多个排序规则):

order by 字段名1,字段名2 DESC;先按字段名1排序,再按字段名2排序。

按 字符串 排序 相同名字开头的会排到一起
ORDER BY 子句 应位于 SELECT语句的结尾

  1. 分组查询 GROUP BY 字段名
    聚合函数:sum() avg() count() max() min()
count(*) – 查询一共有多少条记录
count(字段名) – 查询 该列有多少条 非空记录,忽略空值行

可以多字段分组:GROUP BY 字段名1,字段名2
HAVING 对分组之后的结果 过滤 不能使用 where(对分组之前的数据过滤)
WITH ROLLUP 在最后一行进行统计 ,写在having语句前**,不能与ORDER同时使用**

  1. LIMIT限制查询结果的数量,返回指定位置的记录
LIMIT [位置偏移量,] 行数  等价于  LIMIT 行数 OFFSET 位置偏移量
SELECT *  from 表名bLIMIT 4;
  1. 给表/列取别名 列名 [as] 别名
连接查询(多表)
  1. 内连接
    不做任何限定,结果是两个表的乘积,即笛卡尔积
    笛卡尔积:表1,表2 添加两个表的连接条件(外键)

  2. 外连接
    左外连接 left outer join 保证左表的数据完整地出现在结果中 outer可以省略
    右外连接 right outer join 保证右表的数据完整地出现在结果中

  3. 复合条件连接查询

  4. 子查询-嵌套的select

ANY( ) 任意一个 ALL()所有
where exists(…) 判断是否有结果 有->true 没有 false
not exists()
in()
not in()

你可能感兴趣的:(MySQL数据库知识概览)