一、mysqli介绍
PHP的开发离不开数据库,而在PHP中可以通过MySQLi连接数据库的。但是MySQLi只能连接mysql数据库。同时mysqli是一种面向对象的技术。
MySQLi的特点:
效率提高,稳定性强。
对数据库进行操作。
支持面向对象开发。同时也支持面向过程开发。
想要在PHP中使用MySQLi功能需要在php.ini中加载php_mysql.dll这个动态连接文件。
二、MySQL基本操作之-DDL,DML,DQL,DCL语句
- DDL(数据定义语言)
作用:数据定义语言主要用来定义数据库中的各类对象,包括用户、库、表、视图、索引、触发器、事件、存储过程和函数等。 - DML(数据操纵语言)
insert ,update ,delete 语句 - DQL(数据查询语言)
select 语句 - DCL(数据控制语言)
作用:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。
- DDL(数据定义语言)
作用:数据定义语言主要用来定义数据库中的各类对象,包括用户、库、表、视图、索引、触发器、事件、存储过程和函数等。
//常见的DDL操作的基本用法如下
CREATE USER #创建用户
CREATE DATABASE #创建数据库
CREATE TABLE #创建表
CREATE VIEW #创建视图
CREATE INDEX #创建索引
CREATE TRIGGER #创建触发器
CREATE EVENT #创建事件
CREATE PROCEDURE #创建存储过程
CREATE FUNCTION #创建自定义函数
- 创建用户
详细用法:CREATE USER 'username'@'[ip/domain/netmask]'
参数解释:
username:表示登陆MySQL实例的用户名
[ip/domain/ip range]:表示数据库实例允许的登陆ip,域名或者ip段
CREATE USER 'username'@'192.168.0.10';
- 创建数据库
CREATE DATABASE db_name;
#创建一个名称为test_db,字符集为utf8的数据库
mysql> CREATE DATABASE test_db DEFAULT CHARSET UTF8;
- 创建表:
详细用法:
CREATE TABLE table_name;
#创建一个名称为t_test,字符集为utf8,存储引擎为InnoDB,字符校验集为utf8_general_ci的表:
mysql> CREATE TABLE t_test (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
PRIMARY KEY(id)
) ENGINE = InnoDB DEFAUL CHARSET = UTF8 COLLATE = utf8_general_ci;
- 创建视图:
详细用法:
CREATE VIEW view_name as <SELECT phrase>;
参数解释: <SELECT phrase>:查询语句
#创建一个视图t_view,用来查询t_test中的ID为1或者2的数据:
mysql> CREATE VIEW test_view AS SELECT * FROM t_test WHERE id IN (1,2);
#查看创建视图的过程:
mysql> SHOW CREATE VIEW test_view;
- 创建索引
有两种方法,CREATE和ALTER,下面先介绍一下CREATE:
CREATE [UNIQUE] INDEX index_name ON table_name(field[num]) <OPTIONS>;
参数解释:
UNIQUE:表示创建的索引类型为唯一索引,如果创建的为一般索引可以忽略该选项
table_name:表名称
field:表中的某个字段。num为可选参数,如果field为字符创类型,表示给该字段的前num个字符创建索引
OPTIONS:表示可选选项,可以指定索引使用的算法,比如:USING BTREE。不指定默认为BTREE;
mysql> CREATE UNIQUE INDEX name_ind ON t_test(name) USING BTREE;
mysql> SHOW [INDEX/INDEXES] FROM t_test; #查看t_test表中的索引,[INDEX/INDEXES]两个关键字都可以
mysql> CREATE INDEX name_index ON t_test(name(5));
- 创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event FOR EACH ROW
BEGIN
trigger_stmt
END;
- 创建存储过程
CREATE PROCEDURE procedure_name([proc_parameter[,...]])
BEGIN
...存储过程体
END
- 创建自定义函数
CREATE FUNCTION function_name([func_parameter[,...]])
RETURNS type
BEGIN
...函数体
END
- DML--数据操纵语言
作用:用来操作数据库中的表对象,主要包括的操作有:
- INSERT
- UPDATE
- DELETE
INSERT INTO student(name,age,gender) VALUES('xiaohong',24,'M');
UPDATE STUDENT SET name = 'xiaohua' WHERE id = 1;
DELETE FROM student WHERE id = 1;
- DQL--数据查询语言
- SELECT
SELECT fields FROM table_name WHERE <condition>;
SELECT * FROM table;
#查询年龄大于23的记录
mysql> SELECT * FROM student WHERE age > 23;
#查询年龄大于等于24的记录,和上面age>23结果相同
mysql> SELECT * FROM student WHERE age >= 24;
#查询年龄小于24的记录
mysql> SELECT * FROM student WHERE age < 24;
#查询年龄小于等于24的记录
mysql> SELECT * FROM student WHERE age <= 24;
#查询姓名等于xiaohong的记录
mysql> SELECT * FROM student WHERE name = 'xiaohong';
#查询姓名不等于xiaohong的记录
mysql> SELECT * FROM student WHERE name <> 'xiaohong';
#查询姓名不等于xiaohong的记录
mysql> SELECT * FROM student WHERE name != 'xiaohong';
#查询姓名为xiaohong或者xiaohui的记录
mysql> SELECT * FROM student WHERE name in ('xiaohong','xiaohui');
#查询姓名不是xiaohong和xiaohui的记录等价于:where name != xiaohong and name != xiaohui
mysql> SELECT * FROM student WHERE name not in ('xiaohong','xiaohui');
#查询姓名以xiao开头的记录
mysql> SELECT * FROM student WHERE name like 'xiao%';
#查询姓名以xiaohon开头的记录,后面模糊匹配一位,如:xiaohong,xiaohoni
mysql> SELECT * FROM student WHERE name like 'xiaohon_';
#查询姓名中包含ao字符创的记录
mysql> SELECT * FROM student WHERE name like '%ao%';
#查询以hong结尾的记录
mysql> SELECT * FROM student WHERE name not like '%hong';
#使用正则表达式查询姓名以xiao开头的记录
mysql> SELECT * FROM student WHERE name REGEXP('^xiao');
#使用正则表达式查询姓名以hong结尾的记录
mysql> SELECT * FROM student WHERE name REGEXP('hong$');
#支持的其他复杂的正则表达式,请参阅资料:
- DCL--数据控制语言
作用:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。
- GRANT授予用户权限:
mysql> GRANT INSERT,SELECT,UPDATE,DELETE ON test_db.* TO 'jerry'@'192.168.0.10' IDENTIFIED BY 'password' WITH GRANT OPTION;
待完善
三、mysqli 执行操作
- 创建mysqli对象
$myconn= new mysqli(主机,账号,密码,数据库,端口号);
- 设置字符集
$myconn=set_charset('utf8');
- 执行SQL语句
mysqli_query - 对数据库执行一次查询
-DDL(数据定义语言)
$sql='select * from user';
$myconn -> query($sql);
- 处理结果集
- DML语句 Insert ,Update,Delete 返回布尔值True。
当我们在进行插入,删除,修改(dml)时,返回的是一个布尔值,但是我们并不知道里面有没有变化。可以用$mysqli -> affected_rows,mysqli里面的属性进行判断,返回的结果是sql语句对数据表的影响行数。
$myconn->affected_rows;
- DQL语句 Select,返回mysqli_result
将取回的结果显示页面取出数据有四种方式(assoc、row、object、array)我们一般使用assoc这种方式
fetch_assoc()
关联数组
array(4) {
["id"]=>
string(1) "1"
["name"]=>
string(6) "小米"
["mark"]=>
string(12) "小米手机"
["orderby"]=>
string(1) "1"
}
fetch_row()
索引数组
array(3) {
[0]=>
string(1) "1"
[1]=>
string(6) "张三"
[2]=>
string(7) "1234.60"
}
fetch_array()
返回的一个数组,是一个关联数组和索引数组组合的数组
array(6) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
[1]=>
string(6) "张三"
["name"]=>
string(6) "张三"
[2]=>
string(7) "1234.60"
["price"]=>
string(7) "1234.60"
}
fetch_object()
返回一个有一条数据封装成的对象
object(stdClass)#3 (3) {
["id"]=>
string(1) "1"
["name"]=>
string(6) "张三"
["price"]=>
string(7) "1234.60"
}
- 释放资源
$res -> free();
$mysqli -> close();
网友评论