一、MySQL基本概念和操作
1.基本概念
- 结构化查询语言sql(structed query language ),用来操作关系型数据库。标准sql是所有关系型数据库都支持的操作语句,标准SQL也叫SQL-92,每个数据库都在标准SQL的基础上扩展了自己的东西。两个表的公共字段叫关系。
SQL server--T-sql
oracle--Pl/sql
mysql--mysql
- 关于表的几个概念
行=记录,一行即一条记录;列=字段,一列即一个字段,字段也叫属性;一个表中包括多个字段。
- 数据库本质就是一个文件,操作数据库的软件叫数据库管理系统。
2.数据库操作语句和命令
(1)数据库操作
- 应用命令行操作数据库前需要先为MySQL数据库管理系统添加环境变量
- 连接数据库需要的参数
host 主机 -h
username 用户名 -u
password 密码 -p
port 端口号 -P(大p)
至少在dos命令下输入 mysql -uroot -p
\q 退出数据库
- 创建数据库
语法:create database 数据库名 ;
create database if not exists 数据库名;
数据库名不能是关键字,如果要用关键字用反引号括起来,反引号在波浪线下面
- 查询数据库
show databases;(分号)
show create database 数据库名;显示创建数据的语句
- 更改数据库
创建数据库时指定字符编码:create database 数据库名 charset=utf8;(只有数据中utf-8之间没有-)
更改数据库字符编码:alter database 数据库名 charset=gbk;
- 删除数据库
drop database 数据库名;
drop database if exists 数据库名;
- 选择数据库
use 数据库名;
(2)数据库表操作
- 创建表
create table 表名(字段1 数据类型 [null|not null] [default] [auto_increment] [primary key],
字段2 数据类型);
依次对应不为空、默认值、自增、主键
主键特点:不能重复,不能为空,一个表只能有一个主键,主键可由多个字段一起组成
数据类型:int整数,decimal(总位数,小数位数)小数, char(10) 定长字符, varchar(10)可变长度字符,text大段文本,binary(2进制,可存储图片信息,一般不这样存而是存路径)latin两个字符一个中文 utf8一个字符一个中文
- 修改表
ALTER TABLE user ADD username varchar(20) ;
alter table mismatch_user drop column username;
ALTER TABLE 表名 ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)
添加一列列名为id,整数 不为空 自增 添再第一列 将id设为主键
mysql对声明主键的列作了一些限制,有5大原则: ①数据不能重复 ②必须有一个值,不能为null ③插入新行时必须设置主键 ④主键必须尽可能高效,一般为整数 ⑤主键值不能改变
- 查看所有表
show tables;show create table stu /G; /G改变显示方式横竖排
- 显示表结构
describe 表名; 简写desc 表名;
- 删除表
drop table 表名;
drop table 表1,表2,表3;一次删除多表
- dos命令导入表
mysql>use 数据库
mysql>source 表路径;
常见错误1:在MySQL中,反斜杠是转义字符。路径直接粘贴后转要使用/。
常见错误2:文件在c桌面上时,报错failed to open error22,文件移到其他盘符、包括c盘内部后正常。
(3)数据操作
- 插入数据(增)
insert into 表名(字段1,字段2)values(值1,值2);字符用单引号
插入字段可以省略,插入的值和数据表字段顺序和个数都相同时
自动增长值插入可以用null代替,默认值用default代替。
insert into table_name(column_name1,column_name2)values('value1','value2')
//值要与数据库列名顺序相同
insert into stu1 values (null,'dan','女',default,90);
- 修改数据(改)
update 表名 set 字段1=值1 where 条件;
update 表名 set 字段1=值1;将所有字段1都改为值1
update 表名 set 字段1=值1,字段2=值2 where 条件;
update stu1 set `add`=default where id=1;
- 查询数据(查)
select * from 表名;(*代表所有字段)
select 列名 from 表名 where 条件 【order by 排序字段 asc|desc】 【limit 起始位置,获取的记录数】
ASC是order by的默认排序选项。
select name ,sex from stu1;
select name from stu1 where sex='女' or (sex='男' and id='上海');
select * from stu1 where sex='女' order by score asc; 默认是升序,asc升,desc降
select * from stu1 limit 2; 分页
select * from stu1 limit 0,2; 取表中两条数据第一条和第二条,数据库中0开始是第一条,同数组。
select * from stu1 order by score desc limit 3;取班级前三名
- 删除数据(删)
delete from 表名 【where 条件】;可以在where条件中强制设置只删除一行数据 limit 1;
delere from 表名;删除数据,区分于 drop 表名(彻底删除表)
数据库会保留操作日志,如上,删除再增加数据,自增长id在删除数据基础上增加。
(4)数据库其他语法
- 比较运算符
比较运算符 | 逻辑运算符 | ||
---|---|---|---|
> | 大于 | and | 与 |
< | 小于 | or | 或 |
<= | 小于等于 | not | 非 |
>= | 大于等于 | ||
= | 等于和赋值都是单等 | ||
<> | 不等于 |
-
聚合函数
sum():求和
avg():平均值
max():求最大值
min():求最小值
count():记录数
select max(score) from stu1; 最大值
select count(*) from stu1; 记录数
- 其他函数
SHA() :加密,把一段文本加密为唯一的40字符编码;单向加密,无法解密。
- 大小写
sql语句不区分大小写,php变量,数组区分大小写。
函数名、方法名、类名不区分大小写
php.ini配置项指令区分大小写
二、在php中扩展mysql
1.php开启mysql扩展
php本身是一个框架,它由php扩展而来。要通过php链接数据库,必须开启php链接mysql的扩展,也就是php的MySQL扩展。
2.php-MySQL函数
(1)连接数据库
<?php
//连接数据库
$link=mysqli_connect('localhost','root','12345');
if($link)
{
echo'success';
}
else{
die('failed');//终止后面程序执行,前面数据发送到客户端 //中止执行函数exit()或die()
}
$link=mysqli_connect('localhost','root','12345') or die('数据库连接失败');
$link=@mysqli_connect('localhost','root','12345') or die('数据库连接失败');
隐藏提示敏感信息。
?>
(2)选择数据库
①通过执行数据库名来选择数据库
②通过选择函数选择
$link=@mysqli_connect('localhost','root','123456') or die('数据库连接失败');
方法1:$qlink=mysqli_query($link,'use gao') or die('数据库连接failed');
方法2:mysqli_select_db($link,'gao') or die('failed');
?>
(3)设置mysql客户端的字符编码(可选)
mysqli_query($link,'set names utf8');
(4)获取数据 (获取资源中数据)
方法1:循环取出,取出一条记录匹配成索引数组,mysqli_fetch_row()。缺点字段删除或添加无法变更。
<?php
$link=@mysqli_connect('localhost','root','123456') or die('数据库连接失败');//1.连接数据库
mysqli_select_db($link,'charge') or die('failed');//2.选择数据库
$rs=mysqli_query($link,'select*from products');//3.*****获取products表数据*****
?>
<table>
<tr>
<th>编号</th>
<th>品名</th>
<th>规格</th>
<th>价格</th>
<th>数量</th>
<th>样图</th>
<th>网址</th>
</tr>
<?php
while($rows=mysqli_fetch_row($rs))//4.*****循环取出。取出一条记录匹配成索引数组*****
{
echo'<tr>';
echo'<td>'.$rows[0].'</td>';
echo'<td>'.$rows[1].'</td>';
echo'<td>'.$rows[2].'</td>';
echo'<td>'.$rows[3].'</td>';
echo'<td>'.$rows[4].'</td>';
echo $rows[5]==''?'<td>图像为空</td>':'<td><img src="'.$rows[5].'"></td>';
echo'<td>'.$rows[6].'</td>';
echo'</tr>';
}
?>
</table>
方法2:循环取出,取出一条记录匹配成关联数组,mysqli_fetch_assoc();匹配字段名。
<?php
while($rows=mysqli_fetch_assoc($rs))//4.循环取出。取出一条记录匹配成关联数组。数组的键和数据表的字段名相关联。
{
echo'<tr>';
echo'<td>'.$rows['pid'].'</td>';//注意:关联数组的键必须要和字段名完全一致,区分大小写。
echo'<td>'.$rows['pname'].'</td>';
echo'<td>'.$rows['pparameter'].'</td>';
echo'<td>'.$rows['pprice'].'</td>';
echo'<td>'.$rows['pamount'].'</td>';
echo $rows['pimages']==''?'<td>图像为空</td>':'<td><img src="'.$rows['pimages'].'"></td>';
echo'<td>'.$rows['pweb'].'</td>';
echo'</tr>';
}
?>
方法3:取出资源中的当前记录,匹配成的数组既支持关联数组,也支持索引数组,mysqli_fetch_array()。
方法4:(每一天记录当成一个对象,每一个字段当成对象的一个属性。)从记录集中取出一条数据,匹配成对象,指针下移一条,mysqli_fetch_object()。
(对象调用属性,php中通过->符号调用属性)
<?php
while($rows=mysqli_fetch_object($rs))//4.循环取出。取出一条记录匹配成关联数组。数组的键和数据表的字段名相关联。
{
echo'<tr>';
echo'<td>'.$rows->pid.'</td>';//注意:关联数组的键必须要和字段名完全一致,区分大小写。
echo'<td>'.$rows->pname.'</td>';
echo'<td>'.$rows->pparameter.'</td>';
echo'<td>'.$rows->pprice.'</td>';
echo'<td>'.$rows->pamount.'</td>';
echo $rows->pimages==''?'<td>图像为空</td>':'<td><img src="'.$rows->pimages.'"></td>';
echo'<td>'.$rows->pweb.'</td>';
echo'</tr>';
}
?>
(5)释放资源,关闭链接。
用mysql_free_result()释放资源;mysqli_close()关闭链接。
mysqli_free_result($rs);//释放资源
mysqli_close($link);//关闭链接
页面执行完毕后,所有的变量全部销毁,所以也可以不用手动释放资源。