数据库基本概念
1、数据库服务器
安装了数据库软件的电脑,就是“数据库服务器”。
安装了Apache软件的电脑,就是“WWW服务器”。
数据库服务器,提供对数据的管理、更新、安全、事务等方面功能。
举例:数据库服务器,可以看成是一个“文件柜”。
2、DBMS
DBMS(Database Management System)数据库管理系统,是一个管理数据的大型软件。
常用DBMS软件有哪些?
l Access:是微软的小型数据库。
l SQL Server:是微软的大中型数据库。
l Oracle:是美国甲骨文公司的产品。大型、或超大型数据库。
l MySQL:原始瑞典的AB公司产品。后来被甲骨文公司收购。大家认为:MySQL只适用中小型网站数据库。是免费的产品。
3、数据库
数据库:存储数据的仓库。
举例:数据库,可以看成是一个“文件柜”中的“小格子”。还可以看成是不同的“文件夹”。
4、数据表
数据表是存储数据的真正的地方。
举例:数据表,可以看成是一个具体的“文件”。其实,就像一张“会员等级表”。
5、记录、字段、数据
MySQL登录和退出——在MySQL命令行
1、登录到MySQL服务器
2、退出MySQL客户端
MySQL数据库操作
1、显示数据库
l 语法:SHOW DATABASES; 用来查询出所有的数据库
2、创建数据库
l 语法格式:CREATE DATABASE IF NOT EXISTS db_name CHARSET=utf8;
l 参数说明
create database是系统命令。
if not exists 是可选项。是一个条件判断。如果不存在,则创建数据库。
db_name 是自定义的数据库名称。
数据库名称的命名规则,与PHP变量一样,包括 a-z、0-9 、_这些符号,不区分大小写。
charset是设置数据库的默认字符集。默认字符集为lain1。
注意:如果设置为UTF8,不能带中划线。PHP中要求必须带中划线。
举例:
create database online; //默认字符集是latin1
create database if not exists online; //如果数据库不存在,再进行创建
create database online charset=utf8; //指定数据库的默认字符集为utf8
3、删除数据库
语法:DROP DATABASE IF EXISTS db_name;
MySQL数据库字符集
1、查看数据库的字符集
含义:显示创建数据库的SQL语句
语法:SHOW CREATE DATABASE 数据库名;
举例:show create database auth;
2、通过MySQL命令来修改数据库的字符集
语法:ALTER DATABASE 数据库名 DEFAULT CHARACTER SET utf8
举例:alter database db_name default character set utf8
MySQL数据表操作
1、选择数据库
描述:选择当前要操作的数据库,当前数据库只能是一个。
语法:USE 数据库名;
举例:use db_name;
2、显示所有的数据表(文件)
n 描述:显示当前数据库下的,所有数据表。
n 语法:SHOW TABLES;
3、创建数据表的结构
n 语法:CREATE TABLE table_name(col_name col_type col_attr, col_name col_type col_attr,……)
参数:
col_name:列的名称。
col_type:列的数据类型。如:tinyint、int、bigint、char、varchar、text、date、time等。
col_attr:列的属性。
NOT NULL | NULL:该列是否可以为空。
DEFAULT default_value:指该列的默认值。
default_value默认值可以是字符串,也可以是整型。
AUTO_INCREMENT:该列为自动增长型,或者自动编号。要求该列必须是整型。一个表只能有一个auto_increment属性。
PRIMARY KEY:主键。指定该列的值具有唯一性,主键所在的列不能为空。一个表的主键只能有一个。
id字段的属性必须有:NOT NULL AUTO_INCREMENT PRIMARY KEY
一个数据表,由多个列构成。多个列定义之间用英文下的逗号隔开。
4、删除数据表
l 语法:DROP TABLE IF EXISTS 表名;
l 举例:drop table if exists news;
5、数据表----增删该查
添加列:alter table 表名 add 列名 数据类型
删除列:alter table 表名 drop 列名
添加数据:insert into 表名 values(列里的数据)--添加一行的数据
删除数据:delete from 表名(全删)
delete from 表名 where 列名=数据and列名=数据(删除某行数据)
修改数据:update 表名 set 列名=数据
update 表名 set 列名=数据,列名=数据where主键列名=数据
update 表名 set 列名=nullwhere主键列名=数据 --数据清空
基础查询数据:
select * from 表名 --全部查询
select 列名,列名(多个用逗号隔开) from 表名 --按列查询
select*from 表名 where 列名>=and/or<= --条件查询也是筛选查询
select * from 表名 where列名like '%数据%'(%:前面或是后面可以有内容) --模糊查询,使用通配符%
select * from 表名order by 列名 asc --升序查询
select * from 表名order by 列名 desc --降序查询
select *from 表名 where 列名like '%数据%'order by 列名 asc(都可以拼接起来)
select distinct 列名 from 表名 --去重(只能显示一列)
select 列名 from 表名 group by 列名 --分组
where筛选条件:where筛选条件是找。除了添加数据没有where之外,其他都有,特别是删除数据时,没有where就全部删掉了。
from表(找到数据集)—where(对数据进行删选)—group by(对数据进行分组,合并处理)—select(选出数据项)—order by(对结果数据集进行排序)
DESC显示表的结构定义
语法:desc think_admin;
MySQL数据类型
1、整型浮点型
(1)整型
tinyint 最小型整数 0-255(-128 ~ +127) 1个字节
smallint 小型整数 0-65535 2个字节
mediumint 中型整数 0-1677万 3个字节
int 一般整数 0-21亿 4个字节
bigint 最大整数 0-42亿 8个字节
(2)浮点型
float(M,D) 单精度(精确到小数点后7位) M代表长度,D代表小数位数
举例:float(6,2) //总长度为6位,小数位数为2位,小数点不算。存的最大值为9999.99
double(M,D) 双精度(精确到小数点后15位) M代表长度,D代表小数位数。
2、日期时间型
date 日期型 格式为: “YYYY-mm-dd”
time 时间型 格式为: “00:00:00”
3、字符和文本型
(1)字符型
char(M) 0-255 固定长度的字符串 如:邮编、手机号码、电话号码等
varchar(M) 0-65535 可变长度的字符串 如:新闻标题、家庭地址、毕业院校等。
(2)文本型
tinytext 0-255 小型文本
Text 0-1670万 中型文本
longtext 0-42亿 大型文本
PHP使用MySQL数据库
第一步:PHP连接MySQL服务器
第二步:选择当前要操作的数据库
第三步:设置请求或返回的数据的字符集
第四步:执行各种SQL语句。
建立mysql链接
mysql_connect 参数一:服务器地址 参数二:是账号 参数三:密码 参数四:表名
$con = mysqli_connect('127.0.0.1','root','songbo','auth') or die('Could not connect: ' . mysqli_error($con));
创建数据库:db1
$sql_create_db = "create database aaa";
if (mysqli_query($con, $sql_create_db)) {
echo "aaa ok";
} else {
echo "aaa failed:" . mysqli_error($con);
}
删除数据库:db2
$sql_delete_db = "drop database aaa";
if (mysqli_query($con, $sql_delete_db)) {
echo "aaa ok";
} else {
echo "aaa failed:" . mysqli_error($con);
}
选择数据库;db3
mysqli_select_db($con, 'aaa');
创建数据表;person
$sql_create_table = "create table bb(id int NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),name varchar(15),age int)";
if (mysqli_query($con, $sql_create_table)) {
echo "bb table ok";
} else {
echo "bb table failed:" . mysqli_error($con);
}
在表(person)中插入新数据;
$sql_inset = "insert into bb (name,age) value ('songbo',22)";
if (mysqli_query($con, $sql_inset)) {
echo "insert table ok";
} else {
echo "insert table failed:" . mysqli_error($con);
}
从表(person)中删除数据;
$sql_delete = "delete from bb where age = 22";
if (mysqli_query($con, $sql_delete)) {
echo "delete table ok";
} else {
echo "delete table failed:" . mysqli_error($con);
}
从表(person)中查询数据;
$sql_select = "select * from bb";
$result = mysqli_query($con, $sql_select);
/** 输出查询结果 */
while ($row = mysqli_fetch_array($result)) {
echo $row['id'] . "name=" . $row['name'] . "age=" . $row['age'],"<br/>";
}
$result->close();
在设计流程上,每个页面都要从多张数据表当中查询多个数据显示出来,对于访问量很小的网站来说数据库查询压力和负载基本不用太多考虑,但是如果访问量过大的话,就必须考虑这个问题了,目前我的疑问有这么几个方面:
1.mysql数据库同时连接数量默认是限制多少,对于同时在线过万的连接请求,如何优化?
2.mysql的执行语句结束后,是否必须执行关闭连接?
3.如果同时分别用多个function()查询多个数据表,每个function结束里面是不是也要添加close()语句?
回答
1.默认连接这个根据版本不同而不同,大到200-500,这个是用户最大连接数,还有个全局最大连接数。
2.优化概念太大了,这个根业务和引擎有关,硬件的话,大内存加固态必须的。
3.每次执行完是否关闭,看业务吧,如果长连接多,可以不用关,超时时间后会自动回收,默认八小时
更新表(person)中数据;
$sql_update = "update bb set age = 200 where id=2";
$result = mysqli_query($con, $sql_update);
if ($result) {
echo "sql_update table ok";
} else {
echo "sql_update table failed:" . mysqli_error($con);
}
关闭数据库连接
mysqli_close($con);
屏蔽系统错误@
描述:@可以屏蔽各种函数调用错误,或包含文件错误,但是不能用在函数定义或类定义之前。
从结果集中取出一行数据
1、mysqli_fetch_row()
描述:从结果集中取得一行作为枚举数组。
语法:array mysql_fetch_row ( resource $result )
参数:$result是结果集变量。
返回值:返回一个枚举数组,也就是从0开始的正整数下标。这里的下标,是与表的字段下标是对应。
举例:$arr = mysql_fetch_row($result)
2、mysql_fetch_array()
描述:从结果集中取出一行,作为混合数组返回。
语法:array mysql_fetch_array ( resource $result [, int $ result_type ] )
参数:
$result:是指结果集变量。
$result_type:是指返回的数组的类型。取值:MYSQL_BOTH、MYSQL_ASSOC、MYSQL_NUM
MYSQL_BOTH:默认的。也就是两种下标都存在。
MYSQL_ASSOC:只有字符下标的数组。相当于mysql_fetch_assoc()的功能。
MYSQL_NUM:只有整数下标的数组。相当于mysql_fetch_row()的功能。
以上三个参数是常量,系统常量必须全大写。
返回值:返回一个数组,至于是什么数组,取决于第二个参数。
举例:
$arr = mysql_fetch_array($result) //混合数组
$arr = mysql_fetch_array($result , MYSQL_ASSOC ) //关联数组
$arr = mysql_fetch_array($result , MYSQL_NUM) //枚举数组
3、mysql_fetch_assoc()
描述:从结果集中取一行,以关联数组返回。
语法:array mysql_fetch_assoc(resource $result)
举例:$arr = mysql_fetch_assoc($result)
PHP函数补充
1、include语法结构
l 描述:包含并运行指定文件。
l 语法:include $filename 或者 include($filename)
l 举例:include “include/conn.php”
2、require语法结构
l 描述:包含并运行指定文件。
l 语法:require $filename 或者 require($filename)
l 举例:require “include/conn.php”
注意:include和require都是包含并运行文件,但是,是有区别的。
如果包含的文件不存在,include将报一个警告错误,脚本继续向下运行。
而require将报致命错误,脚本将立即终止执行。
3、header()
描述:发送一个自定义的http报文,换句话说:PHP返回的数据的格式或字符集。
语法:void header ( string $string)
举例:
header(“content-type:text/html;charset=utf-8”) //设置PHP返回数据的字符集
header(“location:http:www.sina.com.cn”); //网页跳转
JS中的跳转:location.href = “http://www.sina.com.cn”
HTML跳转:<meta http-equiv = “refresh” content = “2;url = http://www.sina.com.cn”>