1 Star 0 Fork 0

mingxiaozu/notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Mysql笔记.txt 26.25 KB
一键复制 编辑 原始数据 按行查看 历史
mingxiaozu 提交于 2014-10-22 09:51 . 2014年10月22日 09:51:15
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
注记:
1.命令框复制或粘贴代码点右键
2.mysql配置:计算机右击-》属性-》高级系统配置-》高级-》环境变量-》系统变量找(Path)打开-》把变量值加上一个英文的分号';'跟上你本地的( D:\wamp\bin\mysql\mysql5.5.20\bin)-》确定-》就可以使用命令框用SQL操作数据库了
3.网页中写SQL语句一般大写
4.如要开启一个插件就在php.ini 文件中找到这一行,然后把前面的分号去掉
5.为什么指定了not null右要给默认值:如果不给默认值,因为当存入值的时候如果只存了一个,其他的不存的话,后边会默认是null可这里有指定了不为空所以矛盾会 报错,所以要给默认值
6.商品价格用decimal而不要用float和double因为这两个有四舍五入的情况,使价格不准
7.存入性别男,女不一定一定要使用enum枚举,可以存入一个数值类型0或者1
8.数值类型比如int如果写成int(10),这个10和前导零一起用,表示前导零(zerofill)有几个,用在货号和编号之类的,为了使位数一致
9.数值类型要比字符串快
10.建表的时候InoDBh和MyISAM的区别:
InoDB:比方说分类表下边有文章,如果删除直接删除分类表会报错,因为下边有文章,必须删除分类下的文章才能删除分类
MyISAM:如果删除分类表会直接删除分类表,不管下边有没有文章都会删除,而且这种类型比上边的类型查询要快(建议用这种)
11.数据库索引不是建的越多越好,会降低增删改的速度,因为,增删改会改变索引的顺序,让索引重新排序(性别不适合创建索引,用户名适合)
12.中文分词
13.改表的引擎:alert table user ENGINE=inodb;
看一个表的引擎:show create table user;
14.整理表碎片:optimize table tt_goods;(只支持MyISAM引擎)
如果表引擎是InoDB,只能是先改成MyISAM再整理
整理数据库:可以写一个脚本,循环表整理
15.comment '' 注释
16.begin;开启事务 set autocommit=0 关闭自动提交
17.git.oschina.net :创建项目-》项目名称,私有项目(只能自己下载)不开演示平台,项目介绍,选择语言(可选可不选),勾选初始化项目-》创建:地址就是git地址-》选定文件夹后在本文件夹git clone git地址;这个文件夹会作为你要上传的文件夹-》把要传到服务区的文件放到这个文件夹中-》1.右键git add all file now-》2.git commmit tool -》已缓存的文件就是改动的文件要上传的文件-》提交描述点提交-》3.git push (出现无法识别你的身份的错误:git config -- global user.email "邮箱名"-》回车(不用分号)-》git config -- global user.name "用户名" )-》git push ->输入用户名和密码(显示master->master表明成功)-》远程服务器网站上会看到上传的文件
2014年8月29日
1.基础知识:
【数据类型】:
类型大小 范围(有符号) 范围(无符号) 用途
tinyint 1字节 (-128,127) (0,255) 小整数值
smallint 2字节 (-32 768,32 767) (0,65 535) 大整数值
mediumint 3字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
int或integer 4字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
bigint 8字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
float 4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38)、0和(1.175494351E-38,3.402823466E+38)
double 8 字节双精度浮点数(-1.7976931348623157E+308,-2.2250738585072014E-308)、0和(2.2250738585072014E-308,1.7976931348623157E+308)
decimal对decimal(M,D) ,依赖亍M和D的值小数值,M为显示位置,D为小数位数, DECIMAL整数最大位数(M)为65。支持的十迚制数的最大位数(D)是30。如果D被省略,默认是0。如果M被省略,默认是10
【字符串类型】:
char 0-255字节定长字符串
varchar 0-<65535 字节(1-2字节记录长度)变长字符串
tinyblob 0-255 字节不超过255个字符的二迚制字符串
tinytext 0-255 字节短文本字符串
blob 0-65535 字节二迚制形式的长文本数据
text 0-65535 字节长文本数据
mediumblob 0-16777215 字节二迚制形式的中等长度文本数据
mediumtext 0-16777215 字节中等长度文本数据
logngblob 0-4294967295 字节二迚制形式的极大文本数据
longtext 0-4294967295 字节极大文本数据
【类型修饰】:
zerofill
用前导0填充数值以达到指定的显示位数,使用这个修饰符可以阻止MySQL 数据库存储负值。
unsigned
修饰符规定字段只保存正值。因为丌需要保存数字的正、负符号,可以在储时节约一个“位”的空间。仍而增大这个字段可以存储的值的范围
ENUM 和SET 类型:
enum 类型因为只允许在集合中取得一个值,有点类似亍单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。换个枚丼最大可以有65535 个成员值
set 类型不ENUM 类型相似但丌相同。SET 类型可以仍预定义的集合中取得仸意数量的值。一个SET 类型最多可以包含64 项元素。
【常用类型示例】:
姓名:数据类型:char(20)
价格:数据类型:DECIMAL(7, 3)
产品序列号:数据类型:SMALLINT(5) unsigned
文章内容:数据类型:TEXT
set('足球','篮球') 多选
enum('男','女') 单选
2014年9月1日:
int(4) 不会截断 int(4) zerofill前导零结合有用
char(4) 会截断4个字符,限定插入多少个
null 查询会比较慢
严格模式
not null defalt 0; 没有写not null 如果不填写会默认赋值为null(null查询比较慢,所以一般用到查询的字段都要指定一下not null),如果不写defalt而写了not null,如果插入的时候不填写数据会严格模式下会报错,如果不写not null 而只写default'',如果是表单提交没有填写的字段会是NULL值一样会引起查询慢
用户名不能重复指定unique(非重复)
auto_increment 自增
show create table user;
复制表内容,前提是表结构必须一样
代码实例:
//进入mysql
mysql -uroot -p
//退出
exit
//查看数据库
show databases;
//创建一个mazhenyu数据库变为为utf8(数据库必须指定字符编码)
create database mazhenyu charset utf8;
//取消
\c
//使用库mazhenyu
use mazhenyu;
//删除库mazhenyu
drop database mazhenyu;
//创建表
create table user (username char(20));
//查看表
show tables;
//删除user表
drop table user;
//查看表结构
desc user;
//插入一条数据
insert into user set username='lisi',age=200;
//插入用户名和密码,并且密码用md5加密
insert into user set username='mingzi',password=md5('mima');
//查看表中数据
select * from user;
//decimal,价格
create table user (username char(20),age tinyint unsigned,price decimal(3,2)); //3表示显示位置,2为小数位数
//zerofill前导零(int(3)数值类型如果括号里指定数字不会限制字符的长短,只限制前导零,字符串里括号里有数字可以限制字符串长短)
create table user (username char(3),age tinyint unsigned,price decimal(3,2),num int(5) zerofill);
//enum(里面的值只能选择一个,相当于单选按钮)
create table stu (sex enum('男','女'));
//set(里面可以选择多个,相当于多选按钮)
create table stu (sex enum('男','女'),hobby set('篮球','排球','足球'));
insert into stu set hobby='篮球';
insert into stu set hobby='篮球,足球';
2014年9月1日
1.【创建表 create insert delete】
//默认值与非空
create table test(id int not null default 0,name char(20) not null default '');
//unique 非重
create table test1(id int unique not null default 0);
// ERROR 1062 (23000): Duplicate entry '1' for key 'id'
//1.primary key 主键 2.auto_increment 自增 unique表示不能重复(比如说用户名)
create table user(uid int unsigned primary key auto_increment,username char(20) unique not null default '');
insert into user set username='admin888';
//删除用户Uid为2的
delete from user where uid=2;
//查看创建表信息
show create table user;
//复制表结构
crate table user_back like user;
//复制表里的数据
insert into user_back select * from user;
//复制表结构同时复制表数据
create table user_bak select * from user;
// 创建学生表,包含字段id,学生姓名,性别,年龄***************************************************
create table stu (sid int unsigned primary key auto_increment,name char(20) not null default '',sex enum('男','女') not null default '男',age tinyint not null default 0);
// 创建学生日记表,包含标题,内容,查看次数
create table note(nid int unsigned primary key auto_increment,title char(60) not null default '',content text,click mediumint not null default 0);
//插入多条记录*****************************************************
insert into stu (name,sex,age) values ('赵礼源','男',22),('李源','男',23);
insert into stu values (12,'赵礼源','男',22),(13,'李源','男',23);
//修改**************************************************************
update stu set name='吕飞' where sid=8;
//删除所有数据******************************************************
delete from stu where name='吕飞';
2.【查询表select】
//查询表
select * from stu;
+-----+--------+-----+-----+
| sid | name | sex | age |
+-----+--------+-----+-----+
| 1 | 买尔旦 | 男 | 17 |
| 2 | 胡丹 | 女 | 17 |
| 3 | 廖东庭 | 男 | 20 |
| 4 | 向军 | 男 | 25 |
+-----+--------+-----+-----+
//别名
select name as n from stu;
//查找女同学**************************************************************
mysql> select name as n from stu where sex='女';
+------+
| n |
+------+
| 胡丹 |
+------+
//查找大等于20岁的同学
mysql> select * from stu where age >=20;
+-----+--------+-----+-----+
| sid | name | sex | age |
+-----+--------+-----+-----+
| 3 | 廖东庭 | 男 | 20 |
| 4 | 向军 | 男 | 25 |
+-----+--------+-----+-----+
//and
mysql> select * from stu where age >=20 and name='向军';
+-----+------+-----+-----+
| sid | name | sex | age |
+-----+------+-----+-----+
| 4 | 向军 | 男 | 25 |
+-----+------+-----+-----+
//or
mysql> select * from stu where sex='女' or name='向军';
+-----+------+-----+-----+
| sid | name | sex | age |
+-----+------+-----+-----+
| 2 | 胡丹 | 女 | 17 |
| 4 | 向军 | 男 | 25 |
+-----+------+-----+-----+
//连接字符串
mysql> select concat(name,'-',sex) from stu;
+----------------------+
| concat(name,'-',sex) |
+----------------------+
| 买尔旦-男 |
| 胡丹-女 |
| 廖东庭-男 |
| 向军-男 |
+----------------------+
// 查询结果自身比较
mysql> select age,age>20 as a from stu;
+-----+---+
| age | a |
+-----+---+
| 17 | 0 |
| 17 | 0 |
| 20 | 0 |
| 25 | 1 |
+-----+---+
//去重
select distinct age from stu;
create table news(title varchar(100),flag set('热门','推荐','置顶'));
//查找set类型的数据
1.select * from news where find_in_set('热门',flag);
2.select * from news where flag &1;
//最常用,使用它
3.select * from news where flag like '%热门%';
//查找null
mysql> select * from news where title is null;
+-------+------+
| title | flag |
+-------+------+
| NULL | 热门 |
+-------+------+
select *,if(age >20,'大','小') as `if` from stu;
//按照年龄降序排列
select * from stu order by age desc;
//取得年纪最大的同学
mysql> select * from stu order by age desc limit 1;
+-----+------+-----+-----+
| sid | name | sex | age |
+-----+------+-----+-----+
| 4 | 向军 | 男 | 25 |
+-----+------+-----+-----+
//limit 0,2 从0开始取得2条
mysql> select * from stu order by age desc limit 0,2;
+-----+--------+-----+-----+
| sid | name | sex | age |
+-----+--------+-----+-----+
| 4 | 向军 | 男 | 25 |
| 3 | 廖东庭 | 男 | 20 |
+-----+--------+-----+-----+
//查询17-20岁之间的同学
mysql> select * from stu where age between 17 and 20;
+-----+--------+-----+-----+
| sid | name | sex | age |
+-----+--------+-----+-----+
| 1 | 买尔旦 | 男 | 17 |
| 2 | 胡丹 | 女 | 17 |
| 3 | 廖东庭 | 男 | 20 |
+-----+--------+-----+-----+
//查找在17或者25岁的同学
mysql> select * from stu where age in(17,25);
+-----+--------+-----+-----+
| sid | name | sex | age |
+-----+--------+-----+-----+
| 1 | 买尔旦 | 男 | 17 |
| 2 | 胡丹 | 女 | 17 |
| 4 | 向军 | 男 | 25 |
//查找姓李的同学
mysql> select * from stu where name like '李%';
+-----+------+-----+-----+
| sid | name | sex | age |
+-----+------+-----+-----+
| 5 | 李貌 | 男 | 30 |
| 6 | 李婷 | 女 | 19 |
+-----+------+-----+-----+
//左边截取一个
mysql> select left(name,1) from stu;
+--------------+
| left(name,1) |
+--------------+
| 买 |
| 胡 |
| 廖 |
| 向 |
| 李 |
| 李 |
| 王 |
+--------------+
//从第2个位置截取1个
mysql> select mid(name,2,1) from stu;
+---------------+
| mid(name,2,1) |
+---------------+
| 尔 |
| 丹 |
| 东 |
| 军 |
| 貌 |
| 婷 |
| 婷 |
+---------------+
//随机抽取两个同学
select * from stu order by rand() desc limit 2;
3.【修改表 alter】
//修改表名
alter table stu rename stu1;
// change修改字段同时更名 **************************************************
alter table stu change name username char(10);
// modify修改字段
alter table stu modify username char(20);
//添加字段*********************************************************************
alter table stu add hobby set('足球','篮球') not null default '足球' first;
//删除主键的时候需要删除auto_increment***************************************
alter table stu modify sid int unsigned;
alter table stu drop primary key;
//增加主键
alter table stu add primary key(sid);
4.【CURD(增删改查)练习(Create)、更新(Update)、读取(Read)和删除(Delete)操作】
// 查找文章内容中包含php的文章
mysql> select * from stu_diary where content like '%php%';
// 随机显示2篇文章
mysql> select * from stu_diary order by rand() desc limit 2;
//查找所有姓李的同学
mysql> select * from students where name like '李%';
//向学生表stu中录制10条记录
mysql> select * from students;
// 删除年龄最大的同学
teacher: delete from students order by age desc limit 1;
mysql> select * from students order by age desc;
mysql> delete from students limit 1;
mysql> select * from students;
//将年龄小于20岁的同学,年龄加1岁
mysql> select *,if(age<20,age+1,age)as new_age from students;
teacher: updata students set age=age+1 where age<20;
//修改学生日记表title字段长度为char(100)
mysql> alter table stu_diary modify title char(100);
mysql> desc stu_diary;
//修改学生姓名字段为username char(30)
mysql> alter table students change name username char(30);
// 查找所有90后的女同学
//select * from stu where sex='女' and year(birthday)>=1990 and year(birthday)<2000;
// 查找班级年龄最小同学
//select * from stu order by birthday desc limit 1;
// 查找90后同学发表的包含php的日记数
//select count(*),name from stu as s join note as n on s.sid=n.sid where year(bithday)>=1990 and year(birthday)<2000 and content like "%php%";
// 例:检索出每个课程学员数量
//select count(*),lname from stu as s join stu_lesson as sl on s.sid=sl.sid join lesson as sl on s.sid=sl.sid join lesson as l on sl.lid=l.lid group by l.lname;
// 例:检索出女生学的最多的课程
//select count(*) as c,l.lname from stu as s join stu_lesson as sl on s.sid=sl.sid=sl.sid join lesson as l on sl.lid=l.lid where sex='女' group by l.lname order by c desc limit 1;
// 随机显示2个同学
select * from stu order by rand() limit 2;
// 查找所有姓李的同学
select * from stu where username like '李%';
// 查找文章中包含婷的同学
select * from stu where username like '%婷%';
// 向学生表stu中录制10条记录
insert into stu (username,sex,age) values ('王自如','男',30),('罗永浩','男',50);
// 将年龄小于20岁的同学,年龄加1岁
update stu set age = age+1 where age < 20;
// 删除年龄最大的同学
delete from stu order by age desc limit 1;
// 修改学生日记表title字段长度为char(100)
alter table stu modify username char(25) not null default '';
// 修改学生姓名字段为username char(30)
alter table stu change username name char(20) not null default '';
2014年9月2日(时间与日期、分组与统计、多表查询)
1.MySQL保存日期的格式使用ISO 8601标准格式CCYY-MM-DD
datetime日期与时间:CCYY-MM-DD HH:MM:SS
date:CCYY-MM-DD
year:YYYY
time:HH:MM:SS
2.(1)curdate():获得当前日期
如:select curdate();
+------------+
| curdate() |
+------------+
| 2014-09-02 |
+------------+
(2)curtime():获得当前时间
如:select curtime();
+-----------+
| curtime() |
+-----------+
| 12:24:59 |
+-----------+
(3)now():获得当前的日期与时间
如:select now();
+---------------------+
| now() |
+---------------------+
| 2014-09-02 12:25:51 |
+---------------------+
(4)date():获得日期(括号里需要填入指定的日期)
如: mysql> select date('2014-09-02 12:23:40');
+-----------------------------+
| date('2014-09-02 12:23:40') |
+-----------------------------+
| 2014-09-02 |
+-----------------------------+
(5)time():获得时间(括号里需要填入指定的日期)
如:mysql> select time('2014-09-02 12:23:40');
+-----------------------------+
| time('2014-09-02 12:23:40') |
+-----------------------------+
| 12:23:40 |
+-----------------------------+
(6)year():年
如:mysql> select year('2014-09-02 12:23:40');
+-----------------------------+
| year('2014-09-02 12:23:40') |
+-----------------------------+
| 2014 |
+-----------------------------+
(7)month():月
如:mysql> select month('2014-09-02 12:23:40');
+------------------------------+
| month('2014-09-02 12:23:40') |
+------------------------------+
| 9 |
+------------------------------+
(8)day():日
如:mysql> select day('2014-09-02 12:23:40');
+----------------------------+
| day('2014-09-02 12:23:40') |
+----------------------------+
| 2 |
+----------------------------+
(9)hour():时
如:mysql> select hour('2014-09-02 12:23:40');
+-----------------------------+
| hour('2014-09-02 12:23:40') |
+-----------------------------+
| 12 |
+-----------------------------+
(10)minute():分
如:mysql> select minute('2014-09-02 12:23:40');
+-------------------------------+
| minute('2014-09-02 12:23:40') |
+-------------------------------+
| 23 |
+-------------------------------+
(11)second():秒
如:mysql> select second('2014-09-02 12:23:40');
+-------------------------------+
| second('2014-09-02 12:23:40') |
+-------------------------------+
| 40 |
+-------------------------------+
3.count():统计记录数
例:select count(*) from stu;
注:count不计数空值
4.min():查找最小的
例:select min(pricte) from shop;取得最便宜的商品
5.max():查找最大的
例:select max(price) from shop;取得最贵的商品
6.sum():求合计算
例:select sum(price) from shop;取得商品总计
7.avg():取得平均数
例:select avg(age) from stu;取得平均年龄
8.group by
对查询结果进行分组,常与count,sum,avg等函数一起使用,最适合处理重复数据的列
例1:按工资分组
select name,wage,count(wage) from wage group by wage;
例2:按性别分组
mysql> select sid,name,sex from stu group by sex;
9.having:对查询后的结果进行筛选
例:分组筛选男的一组
mysql> select sid,name,sex from stu group by sex having sex='男';
10.多表查询:
笛卡尔基:如果我们执行如下语句,将产生所有行的联合集即笛卡尔积
Select * from class,stu
执行以上语句将产生class 表的所有数据乘stu表的所有数据,显然这个结果是没有意义的,所以我们要对以上查询增加条件以产生有价值的数据集合。
Select * from class,stu where class.cid=stu.cid;
为了简化查询我们可以给表起个别名,修改如下
Select * from class as c ,stu as s where s.cid = c.id;
11.内部连接
检索某个表不其它表相匹配的数据
inner join
针对上一个幻灯片的查询可以书写如下
Select * from stu inner join class on stu.id=class.id
On关键字起到联接行的作用
如果要对联接后的行进行筛选可指定where条件
例:select s.name ,c.name from stu as s inner join class as c on c.id=s.cid where s.name="李四";查询出李四所在的班级
12.【作业】
// 查找所有90后的女同学
//select * from stu where sex='女' and year(birthday)>=1990 and year(birthday)<2000;
// 查找班级年龄最小同学
//select * from stu order by birthday desc limit 1;
// 查找90后同学发表的包含php的日记数
//select count(*),name from stu as s join note as n on s.sid=n.sid where year(bithday)>=1990 and year(birthday)<2000 and content like "%php%";
// 例:检索出每个课程学员数量
//select count(*),lname from stu as s join stu_lesson as sl on s.sid=sl.sid join lesson as sl on s.sid=sl.sid join lesson as l on sl.lid=l.lid group by l.lname;
// 例:检索出女生学的最多的课程
//select count(*) as c,l.lname from stu as s join stu_lesson as sl on s.sid=sl.sid=sl.sid join lesson as l on sl.lid=l.lid where sex='女' group by l.lname order by c desc limit 1;
2014年9月3日(连接数据库)
1.Mysql 原生连接(连接数据库方式一)
第一步:建立mysql连接
mysql_connect([服务器,[用户名],[密码]])
例:连接mysql数据库
mysql_connect("localhost","root","") or die("连接失败");
第二步:选择数据库
mysql_select_db(“数据库名”,数据库连接)
选择数据库,至于数据库连接是可选项,如果你没有指定将使用上一次的连接
如果连接成功返回TRUE,失败返回FALSE
例:选择数据库
$bool = @mysql_select_db("stu") or die("数据库选择失败");
注释:@为易错符(前面加上它是为了避免php提示的错误)
第三步:发送查询SQL
mysql_query(SQL语句,[连接资源])
向与指定的连接标识符关联的服务器中的当前活劢数据库发送一条查询
连接资源如果没有填写,则使用上一次找开的连接资源($mysql)
例:$mysql=mysql_connect(“loalhost”,”root”,””);
$resource = mysql_query("SET NAMES UTF8"); //告诉服务器网页编码为utf8
$resource = mysql_query("select * from stu",$mysql);
第四步:从结果集中取出一行数据
mysql_fetch_row(结果集资源):从结果集中取出一行数据,索引数组
mysql_fetch_assoc(结果集资源(常用)):从结果集中取出一行数据,关联数组 ***
mysql_fetch_array(结果集资源,[返回类型])
从结果集中返回一行数据,所以你要返回数据要循环
返回类型的说明:返回类型分为以下几种
MYSQL_ASSOC 返回关联数组
MYSQL_NUM返回索引数组
MYSQL_BOTH返回关联与索引数组,这是默认值
注:这样搜索出来数据库的一条数据,要想把数据都拿出来,需要while循环
$arr = array();
while($assoc = mysql_fetch_assoc($resource)){
$arr[] = $assoc;
}
第五步:释放资源
mysql_free_result(结果集资源)):释放结果集占用的内存,成功返回TRUE,失败返回FALSE
第六步:关闭数据库连接
mysql_close([连接资源]):关闭数据库连接。如有没有指定连接资源,将关闭上一次的连接。当脚本执行结果后会自动关掉连接
2.取得受影响的行数
mysql_num_rows(结果集资源):取得SELECT得到的结果集行数
mysql_affected_rows(连接资源):取得UPDATE,DELETE,INSERT受影响的记录数
mysql_insert _id():取得最后插入记录的主键ID
如:
//执行增加
//$sql = 'INSERT INTO stu SET name="王自如"';
$sql = "INSERT INTO stu (name) VALUES ('王自如'),('马化腾')1";
mysql_query($sql);//执行SQL语句
echo mysql_errno();//返回上一个 MySQL 操作中的错误信息的数字编码
echo mysql_error(); //返回上一个 MySQL 操作产生的文本错误信息
//取得最后插入记录的主键ID
//echo mysql_insert_id();
3.Mysqli 了解不加载
mysqli扩展允许我们访问MySQL 4.1及以上版本提供的功能
字母i寓意先进、快速
Php5.0后为了适应MySQL的新特性,PHP重新编写了MySQLi扩展库
MySQLi提供面向过程不面向对象两种接口
没有定义资源类型
运行环境要求
需要环境php5.0以上MySQL 4.1以上版本,当然这已经丌是问题了
extension=php_mysqli.dll //在php.ini 文件中启用这一行
通过phpinfo()查看是否成功加载
Linux下可以使用源码方式安装戒者直接使用yum –y install php-mysqli安装
4.Mysqli (连接数据库方式二)
第一步:连接 MySQL服务器的连接
通过构造函数__construct连接
mysqli::__construct() (主机, 用户,密码, 数据库)
mysqli::connect_errno 连接错误代码
mysqli::connect_error 连接错误信息
mysqli::errno 返回最近函数调用的错误代码
mysqli::error 返回最后发生的错误
代码:
$link = @new Mysqli('localhost','root','','c39'); //服务器为本地,用户名为root,密码为空,数据库为c39
if($link->errno){ //如果有错误返回代码
die($link->error); //就返回错误返回信息
}
第二步:发送查询
mysqli::query()
获得受影响的记录数
mysqli::affected_rows
此记录包含查询的条数这不mysql的有区别的,会得到CURD受影响的条数
返回自增的主键ID
Mysqli::insert_id
代码:
$link->query('SET NAMES UTF8');//设置字符集
$resultObj = $link->query("SELECT * FROM stu"); //发送查询 得出结果
第三步:查询结果集
mysqli_result::fetch_array参数为迒回结果的类型
MYSQLI_ASSOC 迒回关联数组
MYSQLI_NUM 迒回索引数组
MYSQLI_BOTH 迒回关联不索引数组
mysqli_result::fetch_assoc():取得一行以关联数组形式迒回的数据(建议用)
mysqli_result::fetch_row():取得一行以索引数组形式迒回的数据
mysqli_result::fetch_object():取得一行以对象形式迒回的数据
代码:
$arr = array();
while($row = $resultObj->fetch_assoc()){ //如果数据库里有数据能取出来则为真
$arr[] = $row;
}
第四步:释放资源
mysqli_result::free():释放内存中的结果集
mysqli::close():关闭一个打开的数据库连接
代码:
$resultObj->free_result();//释放结果集
$link->close();//关闭mysqli连接
5.PDO抽象层(连接数据库方式三)
概念:PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行
PHP通过PDO扩展动态加载相应的数据库驱动程序来完成直接操作各种数据库,所以在使用PDO时要明确告之所要使用的数据库驱动
开启PDO库:
LINUX开启PDO
如果你正在使用PHP5.1版本,PDO和PDO SQLITE已经包含在了此发行版中
yum –y install php-pdo
Window开启PDO
Window开启PDO需要修改php.ini文件,先将extension=php_pdo.dll前面的分号去掉
将需要的数据库驱动开启,如将;extension=php_pdo_mysql.dll前的分号去掉,就开启了MYSQL数据库驱动,可以使用PDO抽象层操作MYSQL了,其他数据库操作也 是按这种方式操作
第一步:通过PDO连接MYSQL
//连接信息
$dsn = 'mysql:host=localhost;dbname=c39';
$name = 'root';
$password = '';
//捕捉错误
try{
$obj = new Pdo($dsn,$name,$password);//实例pdo
}catch(PDOException $e){
die($e->getMessage());
}
第二步:数据库操作配置
$obj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //设置了警告提示,当发生错误时会自动弹出警告
第三步:发送查询
$result = $obj->query('SET NAMES UTF8');
$result = $obj->query('SELECT * FR1OM stu');
第四步:返回数据
通过fetch()函数一次得到一条记录
$result = $pdo->query("select * from hd_user limit 2");
print_r($result->fetchAll());//通过fetchAll()函数一次得到所有记录
以上操作方式得到的数据包含关联和索引方式,这样数组量会很大
$result->fetchAll(PDO::FETCH_ASSOC):只得到关联方式的数据
$result->fetchAll(PDO::FETCH_NUM):得到索引表示记录
$result->fetchAll(PDO::FETCH_BOTH):得到关联与索引表示的数据
$result->fetchAll(PDO::FETCH_OBJ):得到以对象形式表示的数据
代码:
$rows = $result->fetchAll(PDO::FETCH_ASSOC);//获得结果
6.PDO实现预准备
概念:
预准备语句是SQL语句编译后形成的模板,也就是说语句只解析一次,以后只要传替不同的参数就可以了
每一条SQL的执行过程包括分析、编译、优化查询等操作,如果只是SQL的参数不同而其他项一样,那么可以想象,数据库做了很多次重复的分析、编译、优化操作,显然这种执行方式会降低效率。如果使用预准备方式操作,这种分析、编译、优化的操作只需要执行一次,以后只是参数的不同,这样效率会更快
由于SQL是先进行解析处理后传替参数,所以可以想相对的减少SQL注入的风险
代码:
$link = @new Mysqli('localhost','root','','c39'); //用Msqli的方式链接数据库
if($link->errno){ //如果返回错误代码也就是错误代码存在
die($link->error); //返回错误信息
}
$link->query('SET NAMES UTF8');//告诉服务器网页编码是utf8
//1.预准备 返回预准备对象
$stmtObj = $link->prepare('INSERT INTO stu (name,age) values (?,?)');
//如果预准备失败
if(!$stmtObj) die($link->error);返回错误信息不是错误编码
//要绑定的变量
$arr = array('name'=>'张三','age'=>50);
extract($arr); //将数组的键名变为变量名,键值变为变量名即:$name = '张三';$age=50;
//2.绑定参数
$stmtObj->bind_param('si',$name,$age);//si表示字符串和数值类型
//3.执行
if(!$stmtObj->execute()){
echo $stmtObj->errno . $stmtObj->error;exit;
}else{
echo $stmtObj->affected_rows;
echo '<br/>';
echo $stmtObj->insert_id;
}
//4.关闭资源
$stmtObj->close();
$link->close();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/mingxiaozu/notes.git
[email protected]:mingxiaozu/notes.git
mingxiaozu
notes
notes
master

搜索帮助