文档章节

PHP与MySQL学习笔记9:创建Web数据库

sosly
 sosly
发布于 2016/03/04 10:04
字数 2840
阅读 15
收藏 1
1、在服务器上部署MySQL服务基本步骤合注意点
1)安装MySQL(命令安装、安装包安装等)
2)考虑是否需要一个独立的操作系统用户权限来运行MySQL程序。
3)路径的设置
4)root密码 (附录A:没有root密码,系统是不安全的)
5)删除 匿名用户和仅供测试使用的数据库
6)启动MySQL服务器并将其设置为自动运行。

2、使用MySQL命令行或其他终端的几点注意
1)在MySQL自带控制台命令行中,每个命令之间用分号(;)隔开,分号将告诉MySQL执行这个命令,如果漏掉分号,MySQL将不会执行。
漏掉分号的的结果是:可能在一个命令中间添加新行。因为MySQL提供了一个持续符号,是一个箭头类似于->,如
mysql> grant select
        ->
这个符号表示MySQL期待着更多的输入,每次按Enter都会出现这些提示符,知道输入分号才结束。
PS:这个问题,对于新手来说,很容易忽视,我刚开始的时候也感觉很萌比。
2) SQL语句不区分大小写,但数据库和表的名称区分大小写。

3、登陆到MySQL
在机器命令行,调用mysql程序
mysql -h  hostname -u  username -p
1)本机运行,可忽略 -h hostname
2)-u 只用于连接数据库的用户名称,如果不指定,默认只是登录该操作系统时使用的用户名。
3)-p 命令选项用来用来告诉服务器要使用一个密码来连接它,如果登录所使用用户名无密码,就可以忽略此项。而且,我们不必在本行命令中包含密码,MySQL服务器会向你询问密码的。实际上,没有这样做的更好。如果在命令行输入密码,它将以普通文本(明文)显示在屏幕上。

4、基础命令
create database  dbname ;   创建数据库
mysql -D  dbname -h  hostname  -u  username  -p  也可以直接指定数据库,
use  dbname ;  可以登陆后方便地选择或切换当前数据库。
show databases; 查看数据库列表(你将只能看到当前登录账号权限方位内的)
show tables; 查看数据库表
describe  tablename ;  查看特定表的详细信息,将显示在创建数据库时提供的信息。

5、权限
备注:如果要建立一个Web数据库,最好为每个网站应用程序单独建立一个用户,为什么?权限。
再强调下“最少权限原则”:一个用户(或者一个进程)应该拥有能够执行分配给他的任务的最低级别的权限。

6、MySQL权限系统
1) GRANT和REVOKE命令分别用来授予和取消MySQL用户的权限,这些权限分为4个级别:
全局;
数据库;
表;
列 。
GRANT命令常用来创建命令并赋予相应权限,常见形式是:
GRANT   privileges  [columns]
ON   item
TO  user_name  [IDENTIFIED BY ' password']
[REQUIRE   ssl_options ]
[WITH [GRANT OPTION |  limit_options] ]

方括号[]内的子句是可选的,上例有很多占位符。几点解释:
>第一个占位符 privileges 应该是由逗号分开的一组权限。
>columns是可选的,用来对每一列指定权限(使用单列的名称或者用逗号分开的一组列的名称)。
>占位符 item是新权限所应用于的数据库或表。如果指定为*.*,将权限应用于所有数据库,这叫赋予全局权限。 若没使用特定数据库,指定*也可完成全局权限赋予。常见的是以dbname.*指定数据库中的所有表,dbname.tablename的形式指定单个表。
>user_name  是数据库的一个用户,可以通过包含一个主机名来区分不同域的用户。如 ss @localhost  和 ss@somewhere.com .也可以通过这个特性指定用户从什么地方连接到本机,甚至可以指定他们在特定的地方可以访问哪些表和数据库,细粒度的权限控制可以有助于提高安全性。
>REQUIRE 子句允许指定用户是否必须通过加密套接字链接,或者其他SSL选项。
>WITH GRANT OPTION选项,如果指定,表示允许指定的用户向别人授予自己所拥有的权限。
也可以通过指定WITH子句指定每一个用户每小时执行查询、更新和连接的数量。(在共享的系统上限制单个用户的负载时,这些子句非常有用)
如:MAX_QUERIES_PER_HOUR n  ;MAX_UPDATES_PER_HOUR n ;MAX_CONNECTIONS_PER_HOUR n ;

2)权限存储在名为mysql的5个系统表中,分别是,mysql.user、mysql.db、mysql.host、mysql.tables_priv、mysql.columns_priv。(直接修改这些表,和用GRANT命令一个效果,互相替代)
 
3)权限的类型和类别
MySQL中存在3个基本类型的权限,适用于赋予一般用户的权限、适用于赋予管理员的权限和几个特定的权限。

除了表9-1中的权限,还有两种已经不再使用的权限REFERENCES 和 EXECUTE权限。
大多数情况下,通常只需要常见的增删改查基本功能,
插入(SELECT)、删除(DELETE)、更新(UPDATE)、选择(SELECT)
如:
grant select, insert, delete, update   on books.* to bookeditor identified by 'book123456';



与 GRANT对应的命令时REVOKE,用法类似:
REVOKE 
REVOKE  privileges  [(columns)]
ON   item
FROM  user_name  
如果给出了WITH GRANT OPTION,可以用如下方式撤销,
REVOKE ALL PRIVILEGES,GRANT
FROM user_name

例子:


备注:输入quit 命令退出MySQL自带的监视程序,最好应该在以刚刚建立的Web用户的身份登录,测试每件事情是否正常。如果GRANT语句已经执行(应该要flush privileges),当尝试登录时,又被拒绝了,通常是因为安装过程中没有删除匿名账户。

7、创建数据库表
CREATE TABLE  tablename ( columns)
注意:MySQL提供了多个表类型和存储引擎,其中包括一些事务安全的类型。
实例解说:



注意1:MySQL每个表只能有一个主键,但是这个主键可以由一个字段,也可以有多个字段组成。想text这种类型通常是不能设置成主键的,也不能加索引(这个特性和所选的数据引擎有关)
注意2:char(50),该数据类型将为姓名分配50个字符的存储空间,虽然姓名通常没有这么长,然后MySQL将用空格填充空余的部分,或者,可以选择用 varchar类型,这种可以根据需要分配存储空间(加一个字节),占用空间小,但是char类型数据速度更快。
注意3:NOT NULL,这是一个小小的优化措施,需要多解释下,引用网上一段解释如下:

为什么mysql字段要设置为not null?
现在 大师来跟大家解释解释

首先 我们创建一个表 asd字段为null,qwe字段为not null,都无默认值

CREATETABLE`tb` ( `id`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `asd`VARCHAR(45) NULL, `qwe`VARCHAR(45) NOT NULL, PRIMARYKEY (`idtb`)
)

然后

insert tb(asd) values('123123123'); insert tb(qwe) values('123123123');

现在 我们来查看这个表



可以看出
not null 的qwe字段 未设置的时候是个空字符串
null 的asd字段 未设置的时候是个NULL

以上结果 大家应该都可以想像到的。
那么为什么要设置NOT NULL呢
因为 MYSQL不是PHP,NULL不等于空字符串
比如我们查询qwe为空的

select * from tb where qwe=''

可以找到



但是

select * from tb where asd=''

则什么都找不到

8、创建索引的基本方法
数据库性能问题通常会在数据库上没有创建任何索引的情况下发生(创建没有主键或索引的表是可能的)
CREATE INDEX语句常见形式如下:
CREATE [UNIQUE | FULLTEXT] INDEX index_name
ON table_name (index_column_name [ (length) ] [ASC | DESC], ... )
注意:FULLTEXT索引用来索引文本字段,可选的 length 字段允许指定该字段前length个字符将被索引,也可以指定一个索引升序或降序。

9、理解MySQL的标识符
在MySQL中,提供了5中类型的标识符:
Database(数据库)、Table(表)、Column(列)、index(索引)和 Alias(别名)
注1:MySQL中的数据库将被映射到具备某种文件结构的目录,而表则映射到文件。这对赋予他们的名字有直接影响,它也可以影响这些名字的大小写,如果操作系统区分目录与文件的大小写。
(目录和包含数据的文件的位置需要在配置中设置,可以使用mysqladmin命令来查看它们在系统中位置,windows下的bin目录有mysqladmin.exe这个程序)
注2:在MySQL标识符中不能使用ASCII(0)(null)、ASCII(255) (BLANK FF)或引号字符(这3个字符)


10、列数据类型
MySQL中3种基本的列数据类型:数字、日期和时间、字符串。每个类型又包含很多子类,这3中类型㤇不同的存储空间,一般来说,选择列数据类型的时候,基本原则是选可以满足数据的最小类型。
注意:对于许多数据类型,创建该类型列时,可以指定最大的 显示长度,下表中 就用M表示,M的最大值可为255,如果M是可选的,就放在方括号内.
1)数字类型
数字类型分为整形和浮点数
注1:整形数据,可以指定为无符号型。
注2:所有数字类型,可以指定ZEROFILL属性,空余部分用前导0来补充。如果将一个字段指定为ZEROFILL,它将自动成为UNSIGNED数字类型。



2)日期和时间类型
使用MySQL的日期和时间类型,可以以字符串或数字格式输入数据,如果不手动设置,特定行中的TIMESTAMP列将被设置为最近修改该行的时间,这对于事务记录是有意义的。


3)字符串类型
第一类:普通字符串,即小短文本,包括CHAR(固定长度),VARCHAR(可变长度)类型。
注意:无论数据大小多啊胡搜啊,CHAR类型的列都会用空格填补多余空白,获取CHAR类型数据,与存储VARCHAR类型数据时,MySQL都会过滤多余空格。
第二类:TEXT和BLOB
分别适用于长文本或二进制数据。BLOB(binary large objects)全称为打二进制数据,它支持任何数据,如图像、声音数据。
第三类:SET 和 ENUM
SET类型用来指定列中的值必须来自一个特定集合中的指定值,可以包含该集合的多个值。集合最大64个元素。
ENUM 就是枚举,与SET类似,只是该类型的列只能容纳所列值之一,或者NULL,枚举中最大可以由65535个元素。


章节结束语
如果你问我为什么要学习这么仔细,因为,我就是想去弄清楚它。

© 著作权归作者所有

sosly
粉丝 5
博文 16
码字总数 26459
作品 0
杭州
私信 提问
读《PHP和MySQL Web开发》

【第一部分】PHP基础与入门 1、PHP学习笔记1:基础知识快速浏览 http://my.oschina.net/bluefly/blog/472673 2、PHP学习笔记2:文件 http://my.oschina.net/bluefly/blog/477601 3、PHP学习笔...

slyso
2015/07/14
0
0
分享35本关于PHP的学习书籍(免费下载)

分享35本关于PHP的学习书籍(免费下载) 1、PHP面向对象编程 2、PHP与MVC开发模式 3、PHP_面向对象教程(强力推荐) 4、Smarty php模板引擎 5、php_mysql_web_dbs 6、PHP_和_MySQL_WEB_开发_部...

邓剑彬
2012/12/01
469
4
mysql源码包手动安装、配置以及测试(亲测可行)

笔记编者:小波/qq463431476博客首页:http://www.cnblogs.com/xiaobo-Linux/ 记下这篇mysql笔记,望日后有用! redhat6采用centos yum源,详解mysql的源码安装以及配置。这里继续上篇的博客...

小波linux
2015/07/11
0
0
PHP再学习5——RESTFul框架 远程控制LED

0.前言 去年(2013年)2月第一次接触yeelink平台,当时该平台已经运行了一些时间也吸引了不少极客。试想自己也将投身IoT(物联网)行业,就花了些时间研究了它。陆陆续续使用和研究了一年,大...

thinkyoung
2014/12/02
0
0
PHP与MySQL学习笔记9:创建Web数据库

1、在服务器上部署MySQL服务基本步骤合注意点 1)安装MySQL(命令安装、安装包安装等) 2)考虑是否需要一个独立的操作系统用户权限来运行MySQL程序。 3)路径的设置 4)root密码 (附录A:没...

slyso
2016/02/24
80
0

没有更多内容

加载失败,请刷新页面

加载更多

axios 使用步骤很简单,首先在前端项目中,引入 axios:

  前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个项目本身也停止维护,目前建...

SEOwhywhy
26分钟前
2
0
c++ 创建对象的三种方法

c++有三种方法创建对象 结合代码来看 1 #include <iostream> 2 using namespace std; 3 class Test { 4 5 private: 6 public: 7 add() 8 { 9 ......

天王盖地虎626
40分钟前
1
0
ant 中的fileset include等拷贝

拷贝一个目录到指定目录下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <incl......

shzwork
46分钟前
2
0
react-jianshu项目的创建

创建项目 1、github上创建仓库react-jianshu 2、将项目克隆到本地git clone git@github.com:startjcu/react-jianshu.git 3、在当前目录(项目目录的上级目录)下执行create-react-app react-...

星闪海洋
55分钟前
2
0
OSChina 周二乱弹 —— 小哥哥,你可以教我写代码吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @nnnm: 生活大爆炸,结束了,这部陪伴了漫长时间的情景喜剧,最终是以诺贝尔奖和大团圆收尾的。虽然,不算精彩,但也是温馨。而少年谢尔顿的...

小小编辑
今天
755
13

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部