数据库介绍
数据库的分类
- 层次数据库
类似xml的文本结构。 - 网状数据库
- 关系数据库
MySQL,SQL server,oracle等,下面主要介绍它
关系数据库
SQL: Struct Query Language(结构化查询语言),它是一个"国际化标准"。各种关系数据库都是实现该标准的一种产品。
数据库本质和表现
本质:将大量的"数据值"通过数据库管理系统进行复杂但逻辑结构清晰有序的存储,效率高的惊人。
表现:存储在指定文件夹中。
关系数据库常见术语
数据data,数据库database,数据库管理系统dbms,表(数据表)table,字段field,行row,列column,记录record
数据库系统基本结构
MySQL系统级操作
注意:如果使用MAMP集成环境,并希望在终端操作数据库,请先配置静态环境变量,在根目录下找到.profile(没有时创建),之后打开文件复制这句话
export PATH=/opt/local/bin:/opt/local/sbin:/Applications/MAMP/Library/bin:$PATH
保存,重启服务
登录命令:mysql -h服务器地址 -u登录名 -P端口号 -p密码
备份数据库:mysqldump -h服务器地址 -u登录名 -p密码 要保存的数据库名>路径+要保存为的文件名
恢复数据库:mysql -h服务器地址 -u登录名 -p密码 要恢复的数据库名<数据库路径+文件名
基础语法规定
注释:
- 单行注释:#注释内容
- 单行注释: -- 注释内容
- 多行注释:/注释内容/
大小写问题
MySQL语言本身不区分大小写,但在某些区分大小写的操作系统中,数据库名和表名会区分大小写。推荐使用"下划线命名法":单词都用小写字母,单词之间用"_"分开。
php中操作数据库的基本代码和流程
基本流程
- 连接数据库:
$mylink = mysqli_connect("localhost",'root','root',"tempdb3");
坑:mysql_connect在 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。 - 执行sql命令:
$result = $mylink->query("几乎任何sql语句")
返回的结果通常分两种情况进行处理
2.1 如果无返回数据的语句
2.1.1 如果$result为true,表示执行成功
2.1.2 如果$result为false,表示执行失败
2.2 如果是有返回数据的语句
2.2.1 如果$result为false,表示执行失败
2.2.2 否则,执行成功,需要继续从结果中取出数据并显示出来
数据定义语句
创建数据库
creat database [if not exists] 数据库名 [charset 字符集] [collate 字符排序规则];
说明:
- if not exists:用于判断是否存在该数据库名,如果存在则不执行该语句。
- 字符集:数据存储到数据库中时用的编码名称
- 字符排序规则通常不设置,即使用默认排序规则
修改数据库
alter database 数据库名 character set =新字符集 collate=新校对集;
删除数据库
drop database 数据库名;
其他数据库相关语句
选择进入某数据库:use 数据库名;
显示所有数据库: show datebases;
显示某个数据库的"创建语句":show create database 数据库名
字段类型
通用定义形式
定义一个字段的时候的类型的写法,比如:
creat table tab1 (f1 数据类型);
数据类型:类型名 [(长度)][unsigned][zerofill]
zerofill:填充0,是指如果一个数字的长度不够指定长度的时候可以在左边补充0,如果用zerofill则是无符号类型(表示范围正数*2,无负数)
整数类型
小数类型
float:非精确
double:非精确
decimal:定点型,精确数,需要设定长度,形式为:decimal(总长,小数位数)
时间日期类型
date:年月日
time:时分秒
datetime:年月日时分秒
year:可以是4位数字或4位纯数字字符串,也可以是2位整数或2位纯数字字符串
timetamp:时间戳
写入数据库时,直接的时间日期数据,应该用单引号引起来
字符串类型
varchar:可变长度字符串类型,最多能存储2^16个字节,设定长度为最长长度,不足不用补空格
char:定长字符串类型,最多存储256个字符,不足补空格,溢出的无法存储
2个二进制文本
binary:类似char,存文本的二进制数据
varbinary:类似varchar,存文本的二进制数据
2个大文本
text:存储超大文本,varchar不够用它,与char和varchar效率低
blob:可以存储超大二进制数据,用于存储图片这种二进制数据
2个有关"选项"的文本存储形式
enum:枚举,类似于OC的枚举.名称 enum('选项1','选项2','选项3','选项4')
,本质存储的其实是数字
set:专门用于存储类型表单中的"多选项"的值,名称 set('选项1','选项2','选项3','选项4')
,本质存储的数字是1,2,4,8,16···这样的数字,即每个选项代表二进制中对应的哪一位1,如果插入非2次方的数据,例如7,则为1+2+4,选项1,选项2,选项3。
表定义语句
创建表
基本形式:
create table [if not exists] 表名(字段列表,[约束或索引列表]) [表选项列表]
字段列表如果是多个,中间用逗号隔开
字段基本形式:字段名 类型[字段修饰属性]
表选项:
表选项就是对一个表的有关属性的设定,通常都不需要。如果不设定,有默认值。
有以下几个可用:
comment = '表的注释';
charset = 字符编码名称;//跟数据的字段编码设定一个意思。
字符编码设定的范围及继承关系:
- 系统级设定:安装时确定了
- 库级设定:建库时设定
- 表级设定:charset就是表级设定
- 字段级设定:作为字段属性出现
auto_increment = 起始整数;//自增长类型值初值,默认是1
engine = "表的存储引擎名";
-
存储引擎就是将数据存入硬盘的方式方法
字段属性:
not null:不为空,表示不能为null,不写默认为空
auto_increment:int类型字段的值可以"自增长",即其值无须"写入",而会自动获得并添加
primary key:主键,一个表只能有一个主键,是唯一键的强化,不能重复,并且不能使用null,并且可以作为任意一行数据的"关键值",大多数表使用id并自增长类型作为主键
unique key:唯一键,该字段所有行行的值不可以重复
default:一个字段在没有插入数据的时候自动使用值
comment:字段注释
//范例
create table tab1(
id int auto_increment primary key not null,
f1 float unique,
f2 decimal(20,5) default 12.3,
f4 varchar(20) comment'这是一个注释'
);
索引:
索引是一个"内置表",该表的数据是对某个真是表的某个字段的数据做了"排序"之后的存储形式。
作用:极大提高表查找速度,效率类似二分查找,但会降低增删改的速度,对创建表来说,建立索引非常简单:key(字段1,字段2····)
,unique key(字段1,字段2····)
,primary key(字段1,字段2····)
,fulltext(字段1,字段2····)
//范例
create table tab2(
id int auto_increment not null,
f1 float,
f2 decimal(20,5) default 12.3,
f4 varchar(20) comment'这是一个注释',
primary key(id),/*其实和写在字段上作为属性意义一样,但是出现在这里叫做主键索引,出现的场合不同叫法不同而已*/
unique key(f1),/*同上*/
key(f2)
);
约束:
约束是一种限定数据以符合某种要求的形式(机制)
约束主要有:
primary key:主键索引,主键属性,主键约束其实作用一样
unique key:唯一索引,唯一属性,唯一索引其实作用一样
foreign key:外键约束,此值其实是其他表的主键,所以不能修改。foreign key (字段名1,字段名2,···)references 表名2(字段名1,字段名2,···)
修改表
通常创建表做的事,修改表也能做到,大体来说可以做到:
- 增删改字段
- 增删索引
- 增删约束
- 修改表选项
详细操作看手册
修改表的基本形式
alter table 表名 修改语句;
删除表
删除表的基本形式
drop table [if exists] 表名;
标的其他操作
显示所有表:show tables
显示表结构:desc 表名
显示表的创建语句:show create table 表名
从已有表复制表结构:create table [if no exist] 新表名 like 原表名
视图
视图可以看做是一个"临时存储的数据所构成的表"(非真实表),其实本质上只是一个select语句,只是将该select语句(通常比较复杂)进行一个"包装",并设定了一个名字,之后把这个名字当做一个表来使用。如果一个select 语句比较复杂,又在多个页面需要使用它,则可以将它做成一个视图,方便使用。如果某个数据表中的某些字段不想给别人看(不同公司之间的数据业务交换的时候),但有需要给别人看的时候,则可以将它做成一个视图。
视图创建形式
/**创建*/
create view 视图名[(列名1,列名2,···)] as 一条复杂的select语句;
/*修改*/
alter view 视图名 [(列名1,列名2,···)] as select 语句;
/*删除*/
drop view [if exists] 视图名;
视图的使用
其实就是当做一个查询表来用(通常只用于select)
select * from 视图名 where 条件 order by···