MySQL是一种开放源代码的关系型数据库管理系统,也是跨平台的库 ,PHP与很多数据库结合都很紧密。由于,PHP和MySQL都是开源免费的。所以PHP一直对于MySQL等数据库都有很好的支持。
一.数据库的五个基本单位
数据库服务器
数据库
数据表
数据字段
数据行
对上面的五个基本单位进行说明:
数据库服务器:是指用来运行数据库服务的一台电脑。在中小型企业通常为一台。在数据存储量计算量很大的时候可以存在多台。多台数据库服务器共同来存储或计算。由于数据安全非常重要,我们经常会对数据库服务器里面的数据进经备份。
数据库:一个数据库服务器里面有可以有多个数据库。主要用来分类使用。我们可以建立交通信息数据库、游戏数据库、酒店开房数据库... ... 主要用来将各个不同用途的数据,按照业务进行大块的划分。
数据表:例如在游戏数据库中。根据这一款游戏又分为了不同的数据表。专门用来区分游戏不同的数据。例如:用户数据(用户、密码);人物数据;所有装备和装备信息;用户的充值信息;药品、魔力药水信息... ...等
数据字段:也叫数据列。就是我们日常所见表格里面的列。在表格中,我们会将一张用户表分成多个列。如下(表一)所示:用户编号、用户名、性别、年龄是字段。在真正的数据库中数据字段需要换成英文需要写成:id、username、sex、年龄。
数据行:真正的数据存在每一个表的行里面。字段(列)划分出来了一个表应该按照什么样的格式存数据。而行,是真正的数据。每一行需要遵循数据字段(列)的规范和要求进行存入数据。
2,mysql连接数据库
一,在phpstudy 找到mysql数据库点击进去
二,在windows 环境中,cmd命令行中进入mysql数据库
在命令行中通过下面命令进入数据库
mysql -h localhost -u root -p
-h 表示数据库链接地址,链接本地可不填
-u 表示要登陆的用户
-p 表示使用密码吗登录
注意:通常我们不直接输入密码。而是在回车之后,输入密码。因为,密码输入时的字符是不可见的,输完密码直接回车登录。防止旁边有人把重要的密码看走。如果没有什么别的问题,登陆成功之后会出现下面内容:
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.25 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
上面的中文意思翻译过来是说,欢迎使用MySQL的命令行操作工具。每一个命令结束可以输入\g 或者 ;
mysql当前是第 7次连接。
当前数据库的版本是5.6.25社区支持版。遵循GPL协议。
版权所有:2000至 2015。归Oracle及其子机构拥有所有权。
如果需要帮助的话,通过 ‘help;’ 或者 ‘\h’ 命令来显示帮助内容,通过 ‘\c’ 命令来清除命令行历史。
mysql>
mysql > 表示等待输入指令。
注:
在登陆成功后有这么一句提示,可能大家不太理解:
Your MySQL connection id is 7
表示第7次连接登陆,每登陆一次这个id为加1。下一次显示的会是第8次。
二,mysql数据库操作
1,创建数据库
create datdbases 数据库名字
create databases php; 创建名字是php的数据库
“Query OK” 表示上面的命令执行成功,
2,查看数据库
show databases; 显示当前服务器的所有数据库
注意:
show是指显示
database 是指数据库
databases 是数据库的复数形式,指全部数据库。
3.选中数据库
use 库名
use php; 进入使用php数据库
注意:
use 是指使用;
库名 是存在当前数据库系统中的具体的数据库的名称;
4,查看数据库中的表
show tables; 显示当前数据库下所有的表
使用use 进入到某个数据库后可以使用show tables;
5,删除数据库
drop database 库名
drop database php; 删除php数据库
注意:
drop 是汉语可以翻译为指掉下来,不要了的意思
database 是指库
php 是指要删掉的库的名称
【切记】注:数据库删除后,下面的所有数据都会全部删除,所以删除前一定要慎重并做好相应的备份。
三,mysql 数据表操作
先看总共有哪些数据库,创建新数据库,在进入新数据库,查看数据库中是否有表,在新数据库中创建表
1,创建表
create table 表名(字段名1字段类型,字段名2字段类型,......字段名n字段类型);
create table php user(username varchar(20),passwd varchar(32)); 创建一个表名叫user的表,第一个字段为username、表的字段类型为varchar长度为32个长度。第二个字段为password,类型也为varchar,长度也为32个长度。
注释:
int,代表整型。float,代表浮点。char和varchar代表字符串即可。
2,查看表字段结构信息
desc 表名;
desc user; 查看user表的表结构
3,查看表创建的语句
show create table 表名 \G;
show create table user \G; 查看user的创建语句 看到创建表时的所有信息
:上面表的创建 SQL 语句中,除了可以看到表定义以外,还可以看到表的 engine(存储引擎) 和 charset(字符集)等信息。“\G”选项的含义是使得记录能够按照字段竖着排列,对于内 容比较长的记录更易于显示。
4,删除表
drop table 表名;
drop tabe user; 删除表user
注:删除表。表和数据均会丢失,请勿必删除重要表之前备份数据。
5,指定表引擎和字符集
在创建表最后,我们常用MyISAM或者InnoDB引擎。在指定引擎时,我们可以使用:
ENGINE=InnoDB
指定表的默认字符集:
DEFAULT CHARSET=utf8
效果如下:
CREATE TABLE emp (
useraname varchar(10) DEFAULT NULL,
password date DEFAULT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
四,mysql 数据字段操作
1,查看表结构
desc user;
2,修改表的字段类型
alter table 表名 modify 字段名 varchar(20);
alter table user modify username varchar(20); 将user表的username的类型改为varchar(20)
: type 指的是类型
3,增加表字段
alter table 表名 add column 字段名 类型;
alter table user add column age int(3); 添加一个字段为age,类型为整型长度为3
4,增加字段时控制字段顺序
alter table 表名 add 字段名 字段类型 after 字段名;
alter table user add email varchar(60) after createip; 在user表中,在createip后增加一个字段为email,类型为varchar,长度为60
alter table user add id int(10) first; 在user表中在最开始的位置增加一个字段为id,类型为int,长度为10
5,删除表字段
alter table 表名 drop column 字段名;
alter table user drop column age; 在user表中删除字段age
6,表字段改名
alter table 表名 change 字段原名 字段新名 字段类型;
alter table user change email em varchar(60); 在user表中将字段中的email字段名字为em
7,修改表字段排列顺序
在前的字段增加和修改语句(add/change/modify)中,最后都可以加一个可选项 first|after。
增加表字段时我们已经学过了如何调整顺序。我们现在在来看看另外的change或modify如何来调整顺序。
我们用first做个小实验。
使用modify调整顺序
alter table user modify em varchar(60) first; 在user表中的em 字段放在了最开始的位置
8,修改表名
alter table 旧表名 rename 新表名;
alter table user rename new_user; 将user表名改为new_user
desc new_user; 查看新的表结构
五,MySQL数据库类型
MySQL中存的是数据,只要是数据,我们就会规定数据的类型,在表的字段中规定了使用的是某个数据类型,那么,再插入数据中就要使用对应的数据类型,并且,要遵守数据类型的长度要
1,整形。
mysql 数据类型 | 所占字节 | 值范围 |
tinyint | 1字节 | -128~127 |
smallint | 2字节 | -32768~32767 |
mediumint | 3字节 | -8388608~8388607 |
int | 4字节 | -2147483648~2147483647 |
bigint | 8字节 | +-9.22*10的18次方 |
:整型的长度不同,在实际使用过程也就不同。
2,浮点类型
mysql 数据类型 | 所占字节 | 值范围 |
float (m,d) | 4字节 | 单精度浮点型,m总个数,d小数位 |
double(m,d) | 8字节 | 双精度浮点型,m总个数,d小数位 |
decimal(m,d) | decimal是存储为字符串的浮点数 |
3,字符类型
MySQL数据类型 | 所占字节 | 值范围 |
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-255字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65535字节 | 二进制形式的长文本数据 |
TEXT | 0-65535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
VARBINARY(M) | 允许长度0-M个字节的定长字节符串 | 值的长度+1个字节 |
BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
4,时间类型
MySQL数据类型 | 所占字节 | 值范围 |
date | 3字节 | 日期,格式:2014-09-18 |
time | 3字节 | 时间,格式:08:42:30 |
datetime | 8字节 | 日期时间,格式:2014-09-18 08:42:30 |
timestamp | 4字节 | 自动存储记录修改的时间 |
year | 1字节 | 年份 |
5,复合类型
MySQL数据类型 | 说明 | 举例 |
set | 集合类型 | set(“member”, “member2″, … “member64″) |
enum | 枚举类型 | enum(“member1″, “member2″, … “member65535″) |
一个 ENUM (enum)类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。
六,MySQL 字符集
1,英文字符集
字符集 | 说明 | 字节长度 |
ASCLL | 美国标准信息交换代码 | 单字节 |
GBK | 汉字内码扩展规范 | 双字节 |
unicode | 万国码 | 4字节 |
UTF-8 | Unicode的可变长度字符集编码 | 1到6个字节 |
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
GBK
GBK 向下与 GB 2312 编码兼容。是中华人民共和国定义的汉字计算机编码规范。早期版本为GB2312。
Unicode
Unicode(统一码、万国码、单一码)Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。以满足跨语言、跨平台进行文本转换、处理的要求。
UTF-8
是一种针对Unicode的可变长度字符编码,也是万国码。因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF(Universal Transformation Format)
实际工作中要使用的编码
gbk_chinese_ci 简体中文, 不区分大小写
utf8_general_ci Unicode (多语言), 不区分大小写
注意:
mysql在写utf-8的时候写的是utf8。不加中间的中横线。
七,mysql 索引
索引用于快速找出在某个列中有一特定值的行
当然索引也不易过多,索引越多写入,修改的速度越慢。因为,写入修改数据时,也要修改索引。
1,mysql的索引类型
普通索引:最基本的索引,它没有任何限制。
唯一索引:某一行启用了唯一索引则不准许这一行列的数据有重复的值,针对这一列的每一行数据都要求是唯一的
主键索引:他是一种特殊的唯一索引,不允许有空值,一般是在建表的时候同时创建主键索引,常用于用户id ,类似于书中的页码
全文索引:对于需要全局搜索的数据,进行全文索引
普通索引
alter table 表 add index(字段)
alter table user add index(username); 为user表的username 字段增加索引
唯一索引
alter table 表 add unique(字段);
alter table user add unique(email); 为user表中的Email 增加唯一索引
全文索引
alter table 表 add fulltext(字段);
alter table user add fulltext(content); 为user 表中的content字段增加唯一索引
主键索引
alter table 表 add primary key(字段);
alter table user add primary key(id); 为user表中的id 字段增加主键索引
创建表时也可以声明索引
创建表时可在创建表语句后加上对应的类型即可声明索引:
PRIMARY KEY(字段)
INDEX [索引名] (字段)
FULLTEXT [索引名] (字段)
UNIQUE[索引名] (字段)
注:中括号中的索引名,代表可选。
整体示例如下:
CREATE TABLE test
(
id
INT NOT NULL ,
username
VARCHAR(20) NOT NULL ,
password
INT NOT NULL ,
content
VARCHAR(20) ,
PRIMARY KEY (id
),
INDEX pw (password
),
UNIQUE (username
),
FULLTEXT (content
)
) ENGINE = InnoDB;