数据库
数据库概念:存在数据仓库,数据库就是一种特殊的文件,存储着需要的数据
-
数据存储
以前记录数据:结绳记事 后面开始这样记录:图书 传统记录数据的缺点:不易保存,备份困难,查找不便 再后来手段--文件 使用简单,例如python文件的open可以打开文件,用read或write对文件进行读写,close文件 对于数据量比较大的文件,打开文件缓慢,文件加载延迟,消耗内存 现代化手段--数据库 持久化存储 读写速度高 对程序支持友好
-
数据专业术语
- DBMS:数据库管理系统:安装在服务器上的软件,用于管理服务器上数据库和数据的增删改查
- DBA:数据库管理员:维护数据库
- DB:数据库
-
数据库分类:(重点)
-
关系型数据库(oricle,MySQL,sqlite)
特性:采用了关系模型来组织数据的数据库,最大的特点是支持事务,简单来说就是二维表格模式,由二维表及其之间的联系组成的一个数据组织
优点:容易理解,使用方便(通用的SQL语言),易于维护,支持SQL(用于复杂查询)
缺点:读写性能差(为了维护一致型),固定表结构,大量数据高效率读写
-
非关系型数据库(Mongodb,redis)
特性:使用键值对存储数据 。一般不支持事务,严格意义上不是数据库,是数据存储方法的集合
- 优点:读写性能高(不经过sql层解析),基于键值对,数据没有耦合性,容易扩展,存储格式灵活(文档,图片)
- 缺点:不提高sql支持,无事务,复杂查询稍次
-
-
关系型数据核心元素
- 数据行(记录数据)
- 数据列(记录字段)
- 数据表(数据行的集合)
- 数据库(数据表的集合)
每一条数据,都有数据编号,表示唯一,标识有序(提高查询的速度)
当数据高度重复,出现冗余,将冗余的数据存储到另一张表,通过引用另一张表的编号来存储数据
数据库的安装
1.解压到本地目录,复制到D:\下
2.在D:\mysql-8.0.19-winx64添加配置文件,my.ini
注意:将安装路径修改为自己的路径,文件类型保存ascii,默认保存格式是utf-8
3.添加环境变量,将D:\mysql-8.0.19-winx64\bin添加到环境变量,注意英文分号隔开
4.执行命令 mysqld --initialize-insecure --user=mysql,此时会多一个data目录
5.安装mysql服务,mysqld --install,用services.msc查看服务是否安装成功,或者计算机-->管理-->服务和应用程序
6.然后启动服务,net start mysql
7.启动成功后,登录mysql, mysql -uroot -p,回车登录成功(此时没有密码)
8.修改密码: alter user "root"@"localhost" identified with mysql_native_password by "root";
第6步启动报错:系统找不到指定文件
修改windows注册表,win+r,输入regedit,点击确定,进去注册表编辑器
选择 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQL,修改ImagePath的路径为自己安装的myql安装路径 如: "D:\mysql-8.0.19-winx64\bin\mysqld" MySQL
修改完之后可以正常启动服务
SQL
- SQL是结构化查询语句
- 分类:
- DQL:数据库查询语句,用于数据查询的查询 ,如select
- DML:数据库操作语言:对数据进行增加,修改,删除,insert,update,delete
- TPL:事务处理语言:对事务进行处理,start,commit,rollback
- DCL:数据库控制语言:授权和回收权限
- DDL:数据定义语言:数据库,数据表的管理,如create,drop
数据库操作
-
查看所有数据库
show databases;
-
使用数据库
use mysql
-
查看当前数据库
select database();
-
创建数据库
create database 数据库名 charset=utf8; 例: create database python charset=utf8;
-
删除数据库
drop database 数据库名 drop database python;
查看服务器状态:status; 查看当前时间:select now(); 查看当前用户 :select user(); 查看版本:select version();
数据表
- 数据类型
字符型:
varchar(N) N :0-65535 变长字符串 姓名,家庭住址
char(N) N : 0-255 定长字符串 手机号,性别
text(N) N : 0-65535 :长文本数据
数值型:
int
decimal(4,1):一共有4位,小数1位
float
日期型: 日期格式 YYYY-MM-DD HH:MI:SS
date 1000-01-01/9999-12-31 年月日
datetime 1000-01-01 00:00:00/9999-12-31 23:59:59 年月日时分秒
经常变化的字段用 varchar()
知道固定长度用char()
超过255字符的只能用varchar或者text
varchar 可变长度,可以设置最大长度,适合长度可变的属性
text 不设置长度,当不知道最大长度时,用text
-
查看当前数据库的所有表
show tables;
-
查看表结构
desc 表名;
-
创建表(重点)
create table 表名( 列名 数据类型 约束 column1 datatype, column1 datatype, .... ); primary key 主键约束
例:创建雇员表
create table employee( id int auto_increment primary key comment "职员编号", emp_name varchar(50) comment "职员名称", hirdate datetime comment "入职时间" ); 创建了一个名称为employee的员工表 属性id是员工编号,设置为主键(每个数据只能是唯一),这个字段存储在整数类型中,并且在增加数据时,这个字段的数据会自动增加(自动增长auto_increment) 属性emp_name是员工名称,类型是varchar(50),comment 是给当前列添加一个注释 属性hirdate 是入职时间,类型是datetime 创建表格的语法中,所有的字段都包含在一对圆括号中,每一列的声明和其他列之间使用逗号分割,按照字段名称 字段类型 字符特征 注释的顺序定义每一个数据字段
-
修改表--添加字段
alter table 表名 add 列名 类型; 例: 末尾增加一列 地址 alter table employee add address varchar(200); 指定位置增加一列 emp_name后增加生日 alter table employee add birthday datetime after emp_name; 开头位置增加列 新编号 alter table employee add empid int first;
-
修改表--删除字段
alter table 表名 drop 列名; 例: 删除empid列 alter table employee drop empid;
-
修改表--修改字段
设置默认值 alter table 表名 alter 列名 set default 数据; 重命名修改 alter table 表名 change 原列名 新列名 类型及约束; 不重命名修改 alter table 表名 modify 列名 类名及约束; 例: 设置默认值,给地址一个默认值“待完善” alter table employee alter address set default "待完善"; 修改emp_name的名称为name ,类型为varchar(100); alter table employee change emp_name name varchar(100); 改name的类型为varchar(150); alter table employee modify name varchar(150);
-
重命名数据表
rename table 旧表名 to 新表名 rename table employee to emp;
-
查看表的创建语句
show create table 表名; show create table employee;
-
删除表
drop table 表名; drop table emp;
数据表约束(重点)
- 表约束,就是一种对数据格式和数据内容的限制,在数据库标准查询语句中,没定义了通用约束规范
- 约束类型
- 主键约束:标注数据表中每一条记录都是唯一表示,关键字 primary key
- 外键约束:标注当前数据表和其他数据表之间的关系,关键字 foreign key
- 唯一约束:标注当前字段数据的唯一性,关键字是unique
- 默认约束:标注当前字段的默认数据,关键字 default
- 非空约束:标注当前字段默认数据不能为空 ,关键字not null
- 自增约束:标注当前字段默认+1,一般配合主键使用,关键字 auto_increment
- 无符号:主要用于数值类型,无符号代表正数,关键字unsigned
增删改查(crud)
curd的解释:代表创建(create),更新(update),读取(retrive)和删除(delete)
对应数据库中的 insert,delete,update,select
-
创建数据表和数据
create table employee( empno int auto_increment primary key comment "职员编号", emp_name varchar(50) comment "职员名称", nickname varchar(50) comment "昵称", job varchar(50) comment "工作岗位", mgr varchar(50) comment "上级编号", hirdate datetime comment "入职时间", salary int comment "薪水待遇", comn int comment "奖金", deptno int comment "所属部门" ); create table department( deptno int auto_increment primary key comment "部门编号", deptname varchar(50) comment "部门名称", location varchar(50) comment "部门地点" );
-
增加
- 全列插入:值的顺序和表中字段顺序对应
insert into 表名 values(....); insert into department values(10,"中央","梁山本部"); insert into department values(20,"近卫","梁山本部"); insert into department values(21,"军委1部","梁山本部"); insert into department values(22,"军委2部","梁山本部"); insert into department values(23,"军委3部","梁山本部"); insert into department values(30,"财务部","梁山本部"); insert into department values(40,"参谋部","梁山本部");
- 部分列插入:值的顺序与给出列顺序对应
insert into 表名(列1,列2...) values(值1,值2...) insert into department(deptno,deptname,location) values(50,"后勤部","梁山本部"); insert into department(deptno,deptname,location) values(60,"军情部","梁山本部"); insert into department(deptno,deptname,location) values(70,"迎宾部","梁山本部"),(80,"刑罚部","梁山本部"); 可以一次性插入多条数据,可以减少与数据库的通讯
- 全列多行插入:值的顺序和给出的顺序一致
insert into 表名 value(...),(...); insert into employee values(1, '宋江', '天魁星·及时雨', '头领', null,'2015-11-8', 800, 200000, 1),(2, '卢俊义', '天罡星·玉麒麟','卢俊义', 1,'2018-4-6', 800, 100000, 1); insert into employee values() 从第3开始,赋值doc文档
-
删除
- 1.全表删除
truncate 表名 删除表中的所有数据 表和和索引会恢复到初始大小 delete from 表名 删除表中的所有数据,只是删除数据,不会较少表或索引占的空间 create table de( deptno int auto_increment primary key comment "部门编号", deptname varchar(50) comment "部门名称", location varchar(50) comment "部门地点" ); insert into de values(30,"中央","梁山本部"); insert into de values(40,"近卫","梁山本部"); insert into de values(50,"中央","梁山本部"); insert into de values(60,"近卫","梁山本部"); insert into de values(70,"中央","梁山本部"); insert into de values(80,"近卫","梁山本部"); drop table de; 删除表,表占用的空间全部释放掉
- 指定条件删除
delete from 表名 where 条件 例: 删除department表中的迎宾部 delete from department where deptname="迎宾部";
-
指定删除数量
通过limit 可以指定删除数量,在进行大量删除数据时,使用这种方式防止删除操作引起CPU大量占用导致业务受阻塞
一次删除5条数据 delete from 表名 limit 5;
-
修改
update 针对表中的数据进行修改,在修改过程中条件一定要明确,避免误伤其他数据导致产生垃圾数据
update 表名 set 列1=值1,列2=值2...where 条件 例: 修改部门编号为10的部门名称为“忠义堂” update department set deptname="忠义堂" where deptno=10;