学习MySQL(上)

1.PHP 服务器组件

对于初学者建议使用集成的服务器组件,它已经包含了 PHP、Apache、Mysql 等服务,免去了开发人员将时间花费在繁琐的配置环境过程。

Window 系统可以使用 WampServer,下载地址:http://www.wampserver.com/,支持32位和64位系统,根据自己的系统选择版本。

XAMPP 支持 Mac OS 和 Window 系统,下载地址:https://www.apachefriends.org/zh_cn/index.html

2.设置Mysql的密码

WAMP(wampserver)安装好后,首先通过WAMP进入Mysql控制台,Mysql默认密码是为空的,提示输入密码时,直接回车。使用 use mysql; 命令进入MySQL数据库,然后输入修改密码的命令语句:update user set authentication_string = password('new password'), password_expired = 'N', password_last_changed = now() where user = 'root';

然后输入命令: flush privileges;,否则修改密码的操作不会生效,最后输入命令: exit; 退出。

到此mysql密码已经设置成功,需要注意的是以上命令中的分号不能省略。

3.用户设置

如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。并授予该用户相应的权限。

mysql> use mysql;
Database changed mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'name',
PASSWORD('new password'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec) mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

用户权限列表如下:1、Select_priv 2、Insert_priv 3、Update_priv 4、Delete_priv 5、Create_priv 6、Drop_priv 7、Reload_priv 8、Shutdown_priv 9、Process_priv 10、File_priv 11、Grant_priv 12、eferences_priv 13、Index_priv 14、Alter_priv。为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 即可。

4.管理mysql的基本命令

1、SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表。

2、USE 数据库名 :选择要操作的MySQL数据库,使用该命令后所有Mysql命令都只针对该数据库。与之对应的使用PHP脚本选择MySQL数据库语法:

mysqli_select_db(connection,dbname);

connection:必需。规定要使用的 MySQL 连接(mysqli_connect(host,username,password,dbname,port,socket))。dbname:必需,规定要使用的默认数据库。

3、SHOW TABLES:显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。

4、SHOW TABLE STATUS FROM DATABASENAME:显示数据库 DATABASENAME 中所有表的信息

5、SHOW COLUMNS FROM 数据表:显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

6、SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

5.mysql php语法

PHP提供了多种方式来访问和操作MySQL数据库记录。PHP Mysqli函数格式如下:

mysqli_function(value,value,...);

使用 PHP 脚本连接 MySQL的语法格式如下:

mysqli_connect(host,username,password,dbname,port,socket);

host:可选。规定主机名或 IP 地址。username:可选。规定 MySQL 用户名。 password:可选。规定 MySQL 密码。dbname:可选。规定默认使用的数据库。port:可选。规定尝试连接到 MySQL 服务器的端口号。socket:可选。规定 socket 或要使用的已命名 pipe。

并能使用PHP的 mysqli_close() 函数来断开与MySQL数据库的链接。 该函数只有一个参数为 mysqli_connect() 函数创建连接成功后返回的 MySQL 连接标识符。

6.对MySQL数据库的操作

PHP 使用 mysqli_query 函数来创建或者删除 MySQL 数据库。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。语法格式如下:

mysqli_query(connection,query,resultmode);

connection:必需。规定要使用的 MySQL 连接。query:必需,规定查询字符串,在此处插入的值为:'CREATE DATABASE DATABASENAME'。resultmode:可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认)

使用mysql命令创建数据库:

create database databasename;

使用mysql命令删除数据库:

drop database databasename;

7.MySQL 数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1、数值类型:MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。 作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。

2、日期和时间类型 :表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

3、字符串类型:字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

8.对mysql数据表的操作

1、通过 mysql> 命令窗口可以很简单的创建MySQL数据表。即使用 SQL 语句 CREATE TABLE 来创建数据表:

mysql> CREATE TABLE table_name(
-> table_id INT NOT NULL AUTO_INCREMENT,
-> table_title VARCHAR(100) NOT NULL,
-> table_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( table_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>

实例分析:1、如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。2、PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。3、AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。4、ENGINE 设置存储引擎,CHARSET 设置编码。

2、使用 PHP 的 mysqli_query() 函数来创建已存在数据库的数据表。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

mysqli_query(connection,query,resultmode);

connection:必需。规定要使用的 MySQL 连接。query:必需,规定查询字符串,在此处插入的值为创建的数据表的详细信息。resultmode:可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认),详细代码见下:

&lt?php
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
echo '连接成功
';
$sql = "CREATE TABLE runoob_tbl( ".
"runoob_id INT NOT NULL AUTO_INCREMENT, ".
"runoob_title VARCHAR(100) NOT NULL, ".
"runoob_author VARCHAR(40) NOT NULL, ".
"submission_date DATE, ".
"PRIMARY KEY ( runoob_id ))ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
mysqli_select_db( $conn, 'RUNOOB' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('数据表创建失败: ' . mysqli_error($conn));
}
echo "数据表创建成功\n";
mysqli_close($conn);
?&gt

3、在mysql>命令提示窗口中删除数据表SQL语句为 DROP TABLE:

mysql&gt use databasename;
Database changed
mysql> DROP TABLE tablename
Query OK, 0 rows affected (0.8 sec)
mysql&gt

4、PHP使用 mysqli_query 函数来删除 MySQL 数据表。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

mysqli_query(connection,query,resultmode);

connection:必需。规定要使用的 MySQL 连接。query:必需,规定查询字符串,在此处插入的值为:"DROP TABLE runoob_tbl";。resultmode:可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认),详细代码参考本项目中第2条。

9、MySQL 插入数据

1、使用 SQL INSERT INTO 语句向 MySQL 数据表 blog_table-test 插入数据:

mysql> use dababasename;
Database changed
mysql> INSERT INTO tablename
-> (table_title, table_author, submission_date)
-> VALUES
-> ("学习 closure", "Anani", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql>

2、使用PHP 的 mysqli_query() 函数来执行 SQL INSERT INTO命令来插入数据。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

mysqli_query(connection,query,resultmode);

connection:必需。规定要使用的 MySQL 连接。query:必需,规定查询字符串,在此处插入的值为添加数据的详细代码。resultmode:可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认)。详细代码:

&lt?php
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = 'new password'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
echo '连接成功
';
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8"); $runoob_title = '学习 closue';
$runoob_author = 'Anani';
$submission_date = '2017-11-28'; $sql = "INSERT INTO blog_table_test ".
"(table_title,table_author, submission_date) ".
"VALUES ".
"('$runoob_title','$runoob_author','$submission_date')"; mysqli_select_db( $conn, 'blog' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法插入数据: ' . mysqli_error($conn));
}
echo "数据插入成功\n";
mysqli_close($conn);
?&gt

10、MySQL 查询数据

1、在MySQL数据库中查询数据通用的 SELECT 语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

注意:1、SELECT 命令可以读取一条或者多条记录。2、查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。3、使用 WHERE 语句来包含任何条件。4、使用 LIMIT 属性来设定返回的记录数。5、通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。6、使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据。例如使用 select * form tablename 语句返回该表格的所有记录。

2、使用 PHP 函数的 mysqli_query() 及 SQL SELECT 命令来获取数据。

该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来使用或输出所有查询的数据。mysqli_fetch_array() 函数从结果集中取得一行作为关联数组(此时对应该函数的第二个参数为:MYSQL_ASSOC或对应函数:mysqli_fetch_assoc()),或数字数组(此时对应该函数的第二个参数为:MYSQL_NUM),或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

在我们执行完 SELECT 语句后,释放游标内存可以通过 PHP 函数 mysqli_free_result() 来实现内存的释放。其参数为查询数据执行的 mysqli_query()函数。

11、MySQL WHERE 子句

1、可将 WHERE 子句添加到 SELECT 语句中,实现条件地从表中选取数据,常见的比较符皆用于 WHERE 子句中,并且可以使用 AND 或者 OR 指定一个或多个条件。当然 WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。

例如在SQL SELECT语句使用WHERE子句来读取MySQL数据表 blog_table_test 中的数据,并设置条件返回表中 table_author 字段值为 Anani 的所有记录:

SELECT * from blog_table_test WHERE table_author='Anani';

MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。使用时将该关键字置于 WHERE之后再加上条件即可。

2、使用 PHP 函数的 mysqli_query() 及相同的 SQL SELECT 带上 WHERE 子句的命令来获取数据。该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来输出所有查询的数据。

12、MySQL UPDATE 查询

如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。且:1、可以同时更新一个或多个字段。2、可以在 WHERE 子句中指定任何条件。3、可以在 WHERE 子句中指定任何条件。

1、以下在 SQL UPDATE 命令使用 WHERE 子句来更新 blog_table_test 表中指定的数据:

mysql> UPDATE blog_table_test SET table_title='study HTML DOM' WHERE table_id=1;
Query OK, 1 rows affected (0.01 sec)

2、PHP 中使用函数 mysqli_query() 来执行 SQL 语句,可以在 SQL UPDATE 语句中使用或者不使用 WHERE 子句。不使用 WHERE 子句将数据表的全部数据进行更新,所以要慎重。该函数与在mysql>命令提示符中执行SQL语句的效果是一样的。

13、MySQL DELETE 语句

在mysql中可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。

1、在 SQL DELETE 命令中使用 WHERE 子句来删除 MySQL 数据表 blog_table_test 所选的数据。以下实例将删除 blog_table_test 表中 table_id 为 1的记录:

mysql> use blog;
Database changed
mysql> DELETE FROM blog_table_test WHERE table_id=1;
Query OK, 1 row affected (0.23 sec)

2、PHP使用 mysqli_query() 函数来执行SQL语句, 你可以在 SQL DELETE 命令中使用或不使用 WHERE 子句。该函数与 mysql> 命令符执行SQL命令的效果是一样的。

14、MySQL LIKE 子句

SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

1、下面将在 SQL SELECT 命令中使用 WHERE...LIKE 子句来从 blog_table_test 表中获取 table_title 字段中以 closure 为结尾的的所有记录:

mysql> use blog;
Database changed
mysql> SELECT * from blog_table_test WHERE table_title LIKE '%closure';

2、使用PHP函数的 mysqli_query() 及相同的 SQL SELECT 带上 WHERE...LIKE 子句的命令来获取数据,然后通过 PHP 函数 mysqli_fetch_assoc() 来输出所有查询的数据。

15、MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。该操作符有两个可选参数:1、删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。2、返回所有结果集,包含重复数据。

下面的 SQL 语句使用 UNION ALL 从 "blog_table_test" 和 "blog_table" 表中选取所有的 Anani 的数据(包含重复的值):

SELECT table_title, table_author FROM blog_table_test
WHERE title_author='Anani'
UNION ALL
SELECT table_title, author FROM blog_table
WHERE table_author='Anani';

16、MySQL 排序

若是需要对从 MySQL 表中使用 SQL SELECT 语句来读取来的数据进行排序,可以使用 MySQL 的 ORDER BY 子句来设定排序方式来进行排序,再返回搜索结果。设定排序方式时你可以:1、可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。2、设定多个字段来排序。3、使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。4、添加 WHERE...LIKE 子句来设置条件。

1、在命令提示符中使用 ORDER BY 子句来读取MySQL 数据表 blog_table_test 中的数据,并将结果按 submission_date 字段的升序排列:

mysql> use blog;
Database changed
mysql> SELECT * from blog_table_test ORDER BY submission_date ASC;

2、用PHP函数的 mysqli_query() 及相同的 SQL SELECT 带上 ORDER BY 子句的命令来获取数据。该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来输出所有查询的数据。

17、MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组,在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

下面的实例使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:

mysql> SELECT table_author, COUNT(*) FROM blog_table_test GROUP BY table_author;

在上面的例子中我们可以使用 as 改变在结果数据表中函数占据的表头的值:

mysql> SELECT table_author, COUNT(*) AS count FROM blog_table_test GROUP BY table_author;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。例如将以上的数据表按名字进行分组,再统计每个人学习的次数:

mysql> SELECT table_author, SUM(study_num) as study_count FROM  blog_table_test GROUP BY table_author WITH ROLLUP;

coalesce 语法:select coalesce(a,b,c);其中如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(无意义)。例如:

ysql> SELECT coalesce(table_author, '合计'), SUM(study_num) as study_count FROM  blog_table_test GROUP BY table_author WITH ROLLUP;

18、Mysql 连接的使用

MySQL 的 JOIN 在两个或多个表中查询数据。JOIN 按照功能大致分为如下三类:1、NNER JOIN(可以省略 INNER,表示内连接,或等值连接):获取两个表中字段匹配关系的记录。2、LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。3、RIGHT JOIN(右连接):用于获取右表所有记录,即使左表没有对应匹配的记录。

1、使用MySQL的INNER JOIN连接两张表来读取blog_table_test表中所有table_author字段在blog_table表对应的table_count字段值:

mysql> SELECT a.table_id, a.table_author, b.table_count FROM blog_table_test a INNER JOIN blog_table b ON a.table_author = b.table_author;

上面的语句等同于:

mysql> SELECT a.table_id, a.table_author, b.table_count FROM blog_table_test a , blog_table b WHERE a.table_author = b.table_author;

2、左连接和右连接在另一侧没有对应的field字段值时,依旧会读取该侧数据,并设置对应的对侧空缺为NULL。

3、PHP 中使用 mysqli_query() 函数来执行 SQL 语句,你可以使用以上的相同的 SQL 语句作为 mysqli_query() 函数的参数。

19、MySQL NULL 值处理

MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:1、IS NULL: 当列的值是 NULL,此运算符返回 true。2、IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。3、<=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。

PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。

20、MySQL 正则表达式

MySQL 支持正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。例如查找table_author字段中以'An'为开头的所有数据:

mysql> SELECT table_author FROM blog_table_test WHERE table_author REGEXP '^An';

21、MySQL 事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务用来管理 insert,update,delete 语句。而事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

事务是必须满足4个条件(ACID): Atomicity(原子性):一组事务,要么成功;要么撤回。、Consistency(稳定性):有非法数据(外键约束之类),事务撤回。、Isolation(隔离性):事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。、Durability(可靠性):软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。

事务控制语句:1、BEGIN或START TRANSACTION;显式地开启一个事务;2、COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;3、ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;4、SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;5、RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;6、ROLLBACK TO identifier;把事务回滚到标记点;7、SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。8、SET AUTOCOMMIT=0 禁止自动提交;SET AUTOCOMMIT=1 开启自动提交。

事务例子:

mysql> use blog;
Database changed
mysql> CREATE TABLE table_transaction_test( id int(5)) engine=innodb; # 创建数据表
Query OK, 0 rows affected (0.04 sec)
mysql> begin; # 开始事务
Query OK, 0 rows affected (0.00 sec) mysql> insert into table_transaction_test value(1);
Query OK, 1 rows affected (0.01 sec) mysql> rollback; # 回滚
Query OK, 0 rows affected (0.00 sec) mysql> commit; # 提交事务

PHP中使用事务的方法与之前PHP语言操作MySQL的语句大同小异,主要步骤:1、建立连接:$conn=mysqli_connect()。2、检查连接。3、设置编码:mysqli_query($conn, "set names utf8");。4、进入指定的数据库:mysqli_select_db( $conn, 'blog' );。5、设置事务不自动提交:mysqli_query($conn, "SET AUTOCOMMIT=0");。6、开始事务:mysqli_begin_transaction($conn); 。7、事务:if(!mysqli_query($conn, "insert into table_transaction_test (id) values(1)")){mysqli_query($conn, "ROLLBACK");// 判断当执行失败时回滚}。8、提交事务:mysqli_commit($conn);9、断开连接:mysqli_close($conn);。

学习更多关于MySQL的知识请点击:学习MySQL(下)

上一篇:mvcSSHweb.xml要配置的信息


下一篇:./wls1036_linux32.bin: /lib/ld-linux.so.2: bad ELF interpreter