本文共 5589 字,大约阅读时间需要 18 分钟。
数据库知识大纲
一、数据库基础知识
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
常用引擎:
- INNODB 表名.frm文件存储数据表结构 .db存储数据和索引 特点:支持事务(ACID)、行级锁定(并发)、支持外键
- MyISAM .frm文件存储数据表定义 .myd(数据) .myi(索引) 特点:效率高,不支持外键,事务,
- Memory 存储:内存中 场景:临时存储大量数据
四、数据表的基本操作
创建: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
追加表约束
自动增长:ALTER table 表名 modify 列名 数据类型 auto_increment;
一个表中,最多有一个自动增长列 。 自动增长列必须有索引。主键/外键是一种索引
create index 索引名 on 表名(列名)--添加普通索引
删除表约束
删除唯一 不能使用 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 类型是一种特殊的二进制类型,可以存储数据量很大的二进制数据,如图片和音频文件。 但是数据库中一般不直接存图片,音频文件,存储的是路径
注意:
- 存储路径中 \ 会被过滤掉 解决:\ 或 / 代替 \
- 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;
运算符
算数运算符:
- 除 / 可以有小数,都会保留四位小数
- % 符号和被除数一致
- = 等于 3=null 结果null null-未知
- < = >安全的等于 可以判断空值 3< = >null 0 不同 null < = > null 1 相同 true
- < > 不等于 !=
select 表达式; 运行可以显示结果
-
is NULL 判断是否为null
-
between and 包含两个边界值
-
least() 返回最小值
-
like 通配符匹配
-
REGEXP 正则表达式 [ ] 多选一
逻辑运算符:
异或:XOR 相同为0 不同为1
位运算符:二进制 运算结果:64位无符号整数。
- bin(); 函数 查看二进制的表现形式
- | 位或 & 位与 ^ 位异或
- << 左移 >> 右移 ~ 取反
运算符的优先级:算数>关系>逻辑
六、 数据的操作
插入: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();
SELECT * FROM 表名; * 查询所有字段 SELECT 字段名1【,字段名2……】 FROM 表名;
-
多个条件之间使用逻辑运算符(and or )连接。不能用逗号
-
带in关键字的查询: in(值1,值2,……) 后面多选一
< > 不等于 NOT 取反
- 排序 ORDER BY 字符串 数值 日期 事件 都可以比较大小
order by 字段名 DESC; 降序 ASC 升序 (默认)
多列排序(指定多个排序规则):
order by 字段名1,字段名2 DESC;先按字段名1排序,再按字段名2排序。
按 字符串 排序 相同名字开头的会排到一起
ORDER BY 子句 应位于 SELECT语句的结尾
- 分组查询 GROUP BY 字段名 聚合函数:sum() avg() count() max() min()
count(*) – 查询一共有多少条记录count(字段名) – 查询 该列有多少条 非空记录,忽略空值行
可以多字段分组:GROUP BY 字段名1,字段名2
- LIMIT限制查询结果的数量,返回指定位置的记录
LIMIT [位置偏移量,] 行数 等价于 LIMIT 行数 OFFSET 位置偏移量SELECT * from 表名bLIMIT 4;
- 给表/列取别名 列名 [as] 别名
连接查询(多表)
-
内连接
不做任何限定,结果是两个表的乘积,即笛卡尔积 笛卡尔积:表1,表2 添加两个表的连接条件(外键) -
外连接
左外连接 left outer join 保证左表的数据完整地出现在结果中 outer可以省略 右外连接 right outer join 保证右表的数据完整地出现在结果中 -
复合条件连接查询
-
子查询-嵌套的select
ANY( ) 任意一个 ALL()所有
where exists(…) 判断是否有结果 有->true 没有 false not exists() in() not in()转载地址:https://blog.csdn.net/Conradine_Lian/article/details/106454954 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!