一、数据库简介
1、数据存储
传统记录数据的缺点:
①不易保存②备份困难③查找不便
现代化手段:
①文件:使用简单、但对于较大数据不太方便、性能差、不易扩展
②数据库:持久化存储、读写速度极高、保证数据的有效性、对程序支持性非常好、容易扩展。
2、数据库
数据库就是一种特殊的文件,其中存储着需要的数据。数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
在数据库中列被称为字段,行被称为记录,如果能够唯一标记某个字段:那么这就是主键。
若一个数据库里面的n张表之间相互存在关联,那么这个数据库就是关系型数据库,如MySQL数据库。
3、RDBMS
RDBMS全称Relational Database Management Systenm,中文译为“关系数据库管理系统”,它是 SQL 语言以及所有现代数据库系统(例如 SQL Server、DB2、Oracle、MySQL 和 Microsoft Access)的基础。
当前主要使用两种类型的数据库:关系型数据库、非关系型数据库。所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
关系型数据库的主要产品:
oracle:在以前的大型项目中使用,银行、电信等项目。
mysql:web时代使用最广泛的关系型数据库
ms sql server:在微软的项目中使用
sqlite:轻量级数据库,主要应用在移动平台
4、MySQL简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,后来Sun又被Oracle公司收购,目前隶属于Oracle旗下产品。
特点:
·使用c和c++编写,并使用了多种编译器进行调试,保证代码的可移植性
·支持多种操作系统
·为多种变成提供了API
·支持多线程,充分利用CPU资源
·优化的SQL查询算法,有效地提高查询速度
·提供多语言支持,常见的编码如GB2312\BIG5\UTF-8
·提供多种数据库连接途径
·提供用于管理、检查、优化数据库操作的管理工具
·大型数据库,可以处理拥有上千万条记录的大型数据库
·支持多种存储引擎
·MySQL如那件采用双授权政策,它分为社区版与商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
·MySQL使用标准的SQL数据语言形式
·MySQL是可以定制的,采取了GPL协议,你可以修改源码来开发自己的MySQL系统
·在线DDL更改功能
·复制全局事务标识
·复制无崩溃从机
·复制多线程从机
5、MySQL数据库的安装
服务器安装
安装服务器端:Ubuntu在终端中输入如下命令,回车后,然后按照提示输入
sudo apt-get install mysql-server
当前使用的ubuntu镜像中已经安装好了MySQL服务端,无需再安装。服务器用于接收客户端的请求、执行SQL语句、管理数据库。服务器端一般以服务方式管理,名称为MySQL。
# 启动服务
sudo service mysql start
# 查看进程中是否存在MySQL服务
ps ajx|grep mysql
# 停止服务
sudo server mysql stop
# 重启服务
sudo service mysql restart
配置
配置文件目录为:
/etc/mysql/mysql.cnf
具体配置自行百度
6、数据完整性(类型、约束 )
一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中。在表中为了更加准确的存储数据,保证数据的正确有效,可以在建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。
数据类型
可以通过查看帮助文档查阅所有支持的数据类型。使用数据类型的原则:
够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
常见的数据类型如下:
①整数:int,bit
②小数:decimal
③字符串:varchar,char
④日期时间:date,time,datetime
⑤枚举类型(enum)
注:对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的存储路径即可。
约束
主键primary key:物理上存储的顺序
非空not null:此字段不允许为空
唯一unique:此字段的值不允许重复
默认default:当不填写此值时会使用默认值,如果填写时以填写值为准
外值foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在,则填写成功,如果不存在则填写失败抛出异常
7、数据库的操作
-- 连接数据库
mysql -u用户名 -p密码
-- 退出数据库
quit/exit/ctil+d
-- sql语句不区分大小写,以分号;结束
-- 查看所有数据库
show databases;
-- 显示时间
select now()
-- 查看数据库版本
select version();
-- 创建数据库
-- create database 数据库名 charset=utf8;
create database jhh;
--创建数据库时如果不指定编码方式,默认的编码方式是拉丁文,如果想要改成中文,就在创建时加上charset=utf8
create database jhh charset=utf8;
-- 查看创建数据库的语句
-- show create database ……
show create database jhh;
-- 删除数据库
-- drop database 数据库名;
drop database jhh;
-- 查看当前使用的数据库
select database();
-- 使用指定数据库
use jhh;
8、数据表操作
创建数据表之前先通过use进入一个数据库,用show查看想要创建的表是否已经存在。
show tables;
-- 创建数据表
-- create table 数据表名字(
字段 类型 约束,
字段 类型 约束);
-- 创建一个students表(id、name、age、high、gender、cls_id)
create table students(
id int unsigned primary key not null auto_increment,
name varchar(30),
age tinyint unsigned,
high decimal(5,2),
gender enum("男","女","中性","保密") default "保密",
cla_id int unsigned
)
-- 查看数据表结构
desc students
-- 查看数据表的创建语句
show ceate table 表名;
9、数据的增删改查
同样,在对数据表增删改查之前先通过use进入一个数据库。
修改表结构:
对字段的增删改:
-- 添加字段
-- alter table 表名 add 字段名 类型;
alter table students add birthday datatime;
-- 修改字段数据类型、约束
-- alter table 表名 modify 字段名 类型及约束;
alter table students modify birthday tata;
-- 修改字段名
-- alter table 表明 change 原名 新名 类型及约束;
alter table students change birthday birth data;
-- 删除字段
--alter table 表名 drop 字段名;
alter table students drop high;
--删除表
--drop table 数据表;
drop table students;
增删改查:
增加:
全列插入
--insert into 表名 values(......)
--主键字段可以用0、null、default来占位
如:向classes表中插入一个班级
insert into classes values (0, "菜鸟班")
如:向studdents表插入一个学生的信息
insert into students values(0,"小李飞刀",20,“女”,1,“2000.1.1”)
注:枚举中的下标从1开始,在插入数据时可用下标代替。
部分插入
--insert into 表名(列名1,列名2....) values(值1,值2....)
insert into students (name,gender) values ("孙悟空",1);
多行插入
insert into students (name,gender) values ("猪八戒",1),("沙和尚",1);
修改:
--update 表名 set 列名1=值1,列名2=值2... where 条件;
update students set gender=1,age=9 where id=3;
删除:
物理删除:
--delete from 表名 where 条件
delete from students;
delete from students where name="沙和尚";
逻辑删除:
--用一个字段来表示这个信息是否已经不能再使用了
--给students表添加一个is_delete字段 bit 类型
alter table students add is_delete bit default 0;
查询:
--查询所有列
select * from 表名;
select * from students
--指定条件查询
select * from students where name="孙悟空";
--指定列查询
select 列名1,列名2... from 表名;
select name,gender from students;
--可以使用as为列或表指定别名
--select 字段名 as 别名, 字段名 as 别名 from 数据表 where ....;
select name as 姓名, gender as 性别 from students;
--字段的顺序
select id as 编号, gender as 性别, name as 姓名 from students;
关于其他查询我会在下一篇文章中发布.