• PHP学习9——MySQL数据库


    主要内容:

    • MySQL的启动
    • MySQL数据库操作
    • 数据库表设计
    • 创建和查看表
    • 修改表结构
    • MySQL语句操作
    • 数据库备份与恢复
    • PHP操作MySQL数据库
    • 面向对象的数据库操作

    MySQL数据库是目前最流行的数据库之一,因为他是自由的开源的软件,可以免费的使用,功能强大,跨平台,安全性高,成本低(完全免费),存储量大。

    MySQL的启动

     点击MySQL的start即可,绿色为正常启动

    按住win+r,打开命令窗口,输入cmd,使用dos连接和退出

     MySQL数据库操作

    创建数据库

    CREATE DATABASE db_name

    注意:

    • 数据库名db_name在windows不区分大小写,而linux是区分的,为了程序的移植,建议使用小写字母名称。
    • 不能与其他数据库同名,否则发生错误。
    • 名称可以包含字母,数字,下划线,美元符号($),但是不能以数字开头,也不能使用MySQL关键字。
    • 名称最长64个字符。
    • 每条命令以分号;结束,按enter提交,也可以将一条命令分为多行写,分号结束。

    查看数据库

    SHOW DATABASES

    选择数据库

    USE db_name

    删除数据库

    DROP DATABASE db_name

    数据库表设计

    数据类型

    数值类型

    • tinyint,1字节
    • smallint,2字节
    • mediumint,3字节
    • int,4字节
    • bigint,8字节
    • float,4字节
    • double,8字节
    • decimal(m,d),m+2字节

    字符串类型

    • char
    • varchar
    • binyblob,tinytext
    • blob,text
    • mediumblob,mediumtext
    • longblob,longtext
    • enum("value1","value2")
    • set("value1","value2")

    日期类型

    • date,1000-01-01到9999-12-31,3字节
    • time,-838:59:59到838:59:59,3字节
    • datetime,1000-01-01 00:00:00到9999-12-31 23:59:59,8字节
    • timestamp,1970-01-01 00:00:00到2037年的某个时刻,4字节
    • Year,1901到2155,1字节

    数据字段属性

    某些情况,定义数据类型是不够的,还有一些附加属性,比如自动增加,自动补0,设置默认值。

    字段属性:

    • UNSIGNED,只能设置数值类型,数据不能出现负值
    • ZEROFILL,只能设置数值类型,不足补0,比如INT(3) ZEROFILL,将5插入输出005
    • AUTO_INCREMENT,只能修饰整数类型,每增加一条,该字段值自动加1
    • NULL/NOT NULL,数据默认为NULL,允许为空值,如果指定为NOT NULL数据不能为空值
    • DEFAULT,指定默认值

    创建和查看表数据

    创建表

    CREATE [TEMPORARY] TABLE  [IF NOT EXISTS] tb_name (col_name1  type, col_name2 type...... );

    查看表

    SHOW TABLES;

    输入多行命令以分号结束,例如

    CREATE TABLE test_tb(
    
    id int(8) AUTO_INCREMENT PRIMARY KEY,
    
    user varchar(40) NOT NULL,
    
    psw varchar(20) NOT NULL,
    
    createtime date NOT NULL DEFAULT 0);
    

      

    查看表结构

    • SHOW COLUMNS FROM tb_name;
    • DESCRIBE tb_name [col_name];
    • DESC tb_name [col_name];

    修改表结构

    ALTER [IGNORE] TABLE tb_name alter_specification;

    alter_specification是详细要修改的内容

    • ALTER TABLE tb_name ADD email varchar(40) NOT NULL;增加新字段
    • ALTER TABLE tb_name ALTER psw int(8) NOT NULL;修改字段类型
    • ALTER TABLE tb_name CHANGE old_col_name new_col_name type;修改字段名称
    • ALTER TABLE tb_name MODIFY col_name type;修改字句定义字段
    • ALTER TABLE tb_name DROP col_name;删除字段
    • ALTER TABLE tb_name DROP PRIMARY KEY;删除主键
    • ALTER TABLE tb_name DROP INDEX index_name;删除索引
    • ALTER TABLE tb_name RENAME new_tablename;更改表名称

     

    重命名表

    删除表

    DROP TABLE tb_name;

    删除表需要谨慎,因为删除后数据表无法恢复的。

     MySQL语句操作

    插入记录

     insert into cartoon (name,sex,age,country)values ('Tom','boy',10,'usa');
    
     insert into cartoon (name,sex,age,country)values ('Jerry','boy',9,'usa');
    
     insert into cartoon (name,sex,age,country)values ('Jim','girl',15,'Canada');
    
     insert into cartoon (name,sex,age,country)values ('Mario','boy',20,'France');
    

    注意字符串数据要加单引号,标准SQL一次只可以插入一条数据,因此需要执行4次语句插入4条数据,而MySQL中可以一次插入多数据,例如: 

     insert into cartoon (name,sex,age,country)values ('Tom','boy',10,'usa'),
    ('Jerry','boy',9,'usa'),
    ('Jim','girl',15,'Canada'),
    ('Mario','boy',20,'France');
    

      

    查询记录

    SELECT * FROM tb_name;

    SELECT * FROM tb_name
    
    [WHERE condition(查询条件)]
    
    [GROUP BY col_name(进行分组)]
    
    [HAVING condition(满足的第二条件)]
    
    [ORDER BY col_name(排序)]
    
    [LIMIT row_count(显示查询结果条数)]——也即是这一个和SQL SERVER有一点点不同,其他几乎一样的。

    修改记录

    UPDATE tb_name SET col_name=expression WHERE condition

    删除记录

    DELETE FROM tb_name WHERE condition

    数据库备份与恢复

    备份数据库

    备份数据的操作需要用到mysqldump.exe程序

    这里将test数据库备份到D:/test.txt文件中,-p 后面没有密码。

    数据库恢复

    先退出数据库,回到根目录bin下,

    注意恢复数据库语句不要分号;

    PHP操作MySQL数据库

    访问数据库的步骤PHP访问数据库和使用MySQL客户端的操作类似:

    1. 打开数据库连接
    2. 选择数据库
    3. 对数据库操作
    4. 关闭结果集
    5. 关闭数据库连接

    连接数据库

    <?php
    	//连接数据库
    	mysqli_connect($server,$username,$password) or die('数据库连接失败!');
    	echo "数据库连接成功!";
    ?>
    

    或者

    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "";
    	 
    	// 创建连接
    	$conn = new mysqli($servername, $username, $password);
    	 
    	// 检测连接
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	} 
    	echo "数据库连接成功<br/>";
    ?>
    

    另外我们可以通过配置文件,来设置连接数据库的参数

    使用函数 parse_ini_file() 解析配置文件 config.ini 来获得数据库连接参数,然后使用 new 关键字对 mysqli 类进行实例化,最后使用函数 mysqli_connect_errno() 来判断是否成功连接上了 MySQL 数据库,实现该过程的代码如下所示:

    try{
        //解析config.ini文件
        $config = parse_ini_file(realpath(dirname(__FILE__) . '/config/config.ini'));
        //对mysqli类进行实例化
        $mysqli = new mysqli($config['host'], $config['username'], $config['password'], $config['dbname']);   
        if(mysqli_connect_errno()){    //判断是否成功连接上MySQL数据库
            throw new Exception('数据库连接错误!');  //如果连接错误,则抛出异常
        }else{
            echo '数据库连接成功!';   //打印连接成功的提示
        }
    }catch (Exception $e){        //捕获异常
        echo $e->getMessage();    //打印异常信息
    }
    

      

    案例:

    <?php
    
        //连接数据库
    	$server='localhost';
    	$username='root';
    	$password='';
    	$database='test';
    	$conn=mysqli_connect($server,$username,$password,$database) or die('数据库连接失败!');
    	
    	if (mysqli_connect_errno($conn)) 
    	{ 
    		echo "连接 MySQL 失败: " . mysqli_connect_error(); 
    	}else{
    		echo "数据库连接成功!<br/>";
    	}
    	//选择数据库
    	$ch=mysqli_select_db($conn,$database);
    	if($ch){
    		echo "成功选择数据库<br/>";
    	}else{
    		echo "数据库可能不存在<br/>";
    	}
    	
    	//1、操作数据库
    	$sql='select * from cartoon';
    	$result=mysqli_query($conn,$sql);
    	if($result){
    		echo "SQL查询发送成功!<br/>";
    	}
    	
    	//2、取结果集中的一行作为数组,如果要输出全部可以使用while循环
    	$arr=mysqli_fetch_assoc($result);
    	//输出返回的数组信息
    	print_r($arr);
    
    	//3、取结果集中的一行作为对象,使用对象while循环输出
    	while($obj=mysqli_fetch_assoc($result)){
    		echo '<br/>'.$obj['name']."现在".$obj['age']."岁了。<br/>";
    	}
    	
    	
    	//4、取结果集中的一行作为枚举数组
    	$result=mysqli_query($conn,$sql);
    	while($arr=mysqli_fetch_row($result)){
    		echo '<br/>'.$arr[1]."是一个".$arr[2]."。<br/>";
    	}
    	
    	//5、取结果集中的行数,仅仅对select语句有效
    	$num=mysqli_num_rows($result);
    	echo "查询到的结果有:".$num."行<br/>";
    	
    	//6、取受影响的行数,对插入,修改,删除语句有效
    	$num=mysqli_affected_rows($conn);
    	echo "本次操作受影响行数为:".$num."行<br/>";
    	
    
    	//断开数据库连接
    	mysqli_close($conn);
    	
    ?>
    

    简单版本

    <?php
    
        //连接数据库
    	$conn=mysqli_connect('localhost','root','','test') or die('数据库连接失败!');
    	
    	
    	//操作数据库
    	$sql='select * from cartoon';
    	$result=mysqli_query($conn,$sql);
    	
    
    	//取结果集中的一行作为对象,使用对象while循环输出
    	while($obj=mysqli_fetch_assoc($result)){
    		echo '<br/>'.$obj['name']."现在".$obj['age']."岁了。<br/>";
    	}
    		
    
    	//断开数据库连接
    	mysqli_close($conn);
    	
    ?>
    

      

    这里主要是学习MySQL的基本知识,介绍了MySQL数据库的使用、数据类型,常用的命令,为后面PHP连接做好基础准备。

    后面介绍了PHP操作数据库的知识,PHP大多数时候是用来查询数据的。

    面向对象的数据库操作

    创建数据库

    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "";
    	$dbname='my';
    	 
    	// 创建连接
    	$conn = new mysqli($servername, $username, $password);
    	 
    	// 检测连接
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	}else{
    		echo "连接成功<br/>";
    	}
    	
    	//操作数据库
    	$sql='CREATE DATABASE my_db';
    	if($conn->query($sql)==TRUE){
    		echo '数据库创建成功<br/>';
    	}else{
    		echo "数据库创建失败:$conn->error<br/>";
    	}
    	
    	//关闭连接
    	$conn->close();
    ?>
    

    创建数据表

    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "";
    	$dbname='my_db';
    	 
    	// 创建连接
    	$conn = new mysqli($servername, $username, $password,$dbname);
    	 
    	// 检测连接
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	}else{
    		echo "连接成功<br/>";
    	}
    	
    	//操作数据库
    	// 使用 sql 创建数据表
    	$sql = "CREATE TABLE MyGuests (
    	id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    	firstname VARCHAR(30) NOT NULL,
    	lastname VARCHAR(30) NOT NULL,
    	email VARCHAR(50),
    	reg_date TIMESTAMP
    	)";
    	
    	if($conn->query($sql)==TRUE){
    		echo '执行成功<br/>';
    	}else{
    		echo '执行失败<br/>';
    	}
    	
    	//关闭连接
    	$conn->close();
    ?>
    

    插入数据

    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "";
    	$dbname='my_db';
    	 
    	// 创建连接
    	$conn = new mysqli($servername, $username, $password,$dbname);
    	 
    	// 检测连接
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	}else{
    		echo "连接成功<br/>";
    	}
    	
    	//操作数据库
    	// 使用 sql 数据插入
    	$sql = "INSERT INTO MyGuests (firstname, lastname, email)
    	VALUES ('John', 'Doe', 'john@example.com')";
    
    	if ($conn->query($sql) === TRUE) {
    		echo "新记录插入成功";
    	} else {
    		echo "Error: " . $sql . "<br>" . $conn->error;
    	}
    	
    	//关闭连接
    	$conn->close();
    ?>
    

    查询数据

    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "";
    	$dbname='my_db';
    	 
    	// 创建连接
    	$conn = new mysqli($servername, $username, $password,$dbname);
    	 
    	// 检测连接
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	}else{
    		echo "连接成功<br/>";
    	}
    	
    	//操作数据库
    	// 使用 sql 数据查询
    	$sql = "SELECT * FROM myguests;";
    	$result=$conn->query($sql);
    	if ($result->num_rows>0) {
    		//输出数据
    		while($row=$result->fetch_assoc()){
    			echo "id:".$row['id']."-name:".$row['firstname']."<br/>";
    		}
    	} else {
    		echo "0 结果<br/>";
    	}
    	
    	//关闭连接
    	$conn->close();
    ?>
    

    简单版本

    <?php	 
    	// 创建连接
    	$conn = new mysqli('localhost', 'root', '','my_db')or die("连接失败: " . $conn->connect_error);;
    	
    	//操作数据库
    	$sql = "SELECT * FROM myguests;";
    	$result=$conn->query($sql);
    	while($row=$result->fetch_assoc()){
    		echo "id:".$row['id']."-name:".$row['firstname']."<br/>";
    	}
    	
    	//关闭连接
    	$conn->close();
    ?>
    

      

    ok,就到这里。

  • 相关阅读:
    vMware 按装 MacOs
    jenkin
    Robotium
    robotframework
    Appium Server
    A new session could not be created. (Original error: Requested a new session but one was in progress) (WARNING: The server did not provide any stacktrace information)
    hdu2609 How many (最小表示法)
    UCF Local Programming Contest 2015 H. Reach for the Stars
    2020牛客寒假算法基础集训营3 J 牛牛的宝可梦Go
    二阶差分
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/9440728.html
Copyright © 2020-2023  润新知