数据库总结
传统记录数据的缺点:不易保存,备份困难,查找不便
数据库:存储数据的仓库,描述一个事务的基本信息
优点:1.持久化存储
2.读写速度极高
3.保证数据的有效性
RDBMS
relational database management system
军火当前主要使用两种类型的数据库:1.关系型数据库,2非关系型数据库
关系型数据库的主要产品:
oracle:主要大型项目中使用,银行,电信等项目
mysql:web时代使用最广泛的关系型数据库
ms sql server: 微软的项目中使用 (Microsoft Corporation 微软公司)
sqlite: 轻量级数据库,主要应用在移动平台
关系型数据库核心元素
数据行(一条记录,相当于python中的实例对象) 实例对象
数据列(字段,相当于python中实例对象的属性) 字段 实例对象的属性
数据表(数据行的集合,相当于python中的列表)
数据库(数据表的集合,一个数据库中能够有n个数据表)
SQL
structured Query Language
结构化查询语言
在数据库中进行操作的脚本称为sql ,结构化查询语言,
当前关系型数据库都支持使用sql语言进行操作oracle,mysql,ms sql server, sqlite
sql语句主要:
1.DQL:data query language 查询语言,select
2.DML:data manager language 操作,增删改,update,delete,insert
TPL:事务处理语言:begin transaction,commit,rollback
DCL:data control language:进行授权与回收,grant,revoke
DDL:data define language:数据库,表的管理:create,drop
CCL:指针控制语言:控制指针完成表的操作,declare cursor
对于web程序,重点是数据的crud,必须熟练编写DQL,DML能够编写DDL完成数据库
表的操作,
sql是一门特殊的语言,专门用来操作数据库
不区分大小写
MYSQL
特点:免费开源,不要钱 跨品台,提供多语言调用的API接口,使用范围广,
基本使用
服务器端安装
终端:sudo apt-get install mysql-server
用于:接收客户端的请求,执行sql语句,管理数据库
服务器端一般以服务方式管理:名称为mysql
启动,停止,重启
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
查看进程中是否存在进程mysql服务
ps ajx|grep mysql
grep(gelobal regular expression print)
配置文件目录为/etc/mysql/mysql.cnf
客户端:为开发人员与dba使用,通过socket方式与服务端通信,常用的有
navicat命令行mysql
客户端命令
sudo apt_get install mysql-client
mysql --help :详细连接的命令查看帮助文档
mysql -uroot -p mysql: 进入mysql命令行
ctrl +d ,quit ,exit 退出
数据
数据库 -----数据表-------数据行(实例对象)-----数据列(实例对象的属性)字段
dadabase--table---select,update,delete,insert,----alter table add/change/,p/\
modify
使用数据类型的原则:够用就行,尽量使用取值范围小的,而不用大的,可以节省存储空间
常用数据类型: 整型:int bit
小数:decimal
枚举:enum
字符串: char,varchar,text(大于4000)
日期类型: date,time ,datetime
对于图片,视频,音频等文件,上传到某个服务器上,然后在表中存储这个文件的保存路径
约束:primary key 主键 唯一标示
auto_increment :自动增长
unsigned:无符号的整形 signed
not null:非空
unique:唯一,此列的值不允许重复
default:默认值,不填以默认值,填写以填写为准
foreign key:外键,一般不用,:增加了数据与数据之间的耦合性,不利于后期维护,优化
mysql命令行连接
mysql -uroot -p
密码:mysql
退出登录:ctrl+d ,quit,exit
select version(); 查看版本
select now(); 显示当前时间
prompt :修改输入提示符 可以用 \D,\d,\h,\u \Date \databasee\user\host
数据库操作命令
show databases;
use 数据库名;
select database();查看当前使用的数据库
create database 数据库名 charset=utf8; (字符集格式设置成utf8)创建数据库时使
drop database 数据库名; 删除数据库
数据表的操作执令
show tables;
desc 表名; 查看表结构 describle
create table 表名(字段,类型,约束条件)
alter table 表名 add 列名 类型;
alter table 表名 change 旧列名,新列名 类型;
alter table 表名 modify 列名 修改类型
alter table 表名 drop 列名; 删除列
drop table 表名 删除表
curd
create update refer delete
数据库设计
关系性数据库建议在E-R模型的基础上,根据策划设计,抽取出来模型与关系,
制定出表结构,
开发用,设计数据库轮子:db designer ,power designer,直观的看到实体与实体之间的关系
三范式:列不可分,唯一表示,引用主键
E-R模型 e代表entry 一对一,一对多,多对多,
逻辑删除 isdelete bit default 0
消除重复行 distinct:在select 后面列前使用distinct可以消除重复的行
聚合函数
count(*)
mid(列) max(列) avg(列) sum(列)
分组:
按照字段分组,表示此字段相同的数据会被放到一个组中
having是对分组后的数据筛选
连接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
内连接查询:为两个表匹配到的数据
右连接查询:两个表匹配到的数据+ 右表特有数据
左连接查询 两个表匹配到的数据+左表特有数据
select * from students inner join classes on students.cls_id = classes.id;
on后面是以什么条件连接承德大表,然后以他们公有的属性来展示结果集,
slect 是选择要显示的内容