mysql基础(一)

1.创建表:


表的创建命令需要:

  • 表的名称

  • 字段名称

  • 定义每个字段(类型、长度等)

语法






下面是通用的SQL语法用来创建MySQL表:

CREATE TABLE table_name (column_name column_type);

现在,我们将在 test 数据库中创建以下表。

create table tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
);

在这里,一些数据项需要解释:

  • 字段使用NOT NULL属性,是因为我们不希望这个字段的值为NULL。 因此,如果用户将尝试创建具有NULL值的记录,那么MySQL会产生错误。

  • 字段的AUTO_INCREMENT属性告诉MySQL自动增加id字段下一个可用编号。

  • 关键字PRIMARY KEY用于定义此列作为主键。可以使用逗号分隔多个列来定义主键。

1、通过命令提示符来创建表







在mysql>提示符下,创建一个MySQL表这是很容易的。使用 SQL 命令 CREATE TABLE 来创建表。

示例



下面是一个例子,创建一个表: tutorials_tbl 

root@host# mysql -u root -p
Enter password:
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
   -> tutorial_id INT NOT NULL AUTO_INCREMENT,
   -> tutorial_title VARCHAR(100) NOT NULL,
   -> tutorial_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( tutorial_id )
   -> );
Query OK, 0 rows affected (0.16 sec)
mysql>

注: MySQL不会终止命令,直到给一个分号(;)表示SQL命令结束。

查看创建表的结果:

2、使用PHP脚本创建表



要在现有数据库中创建新表,需要使用PHP函数 mysql_query()。通过它的第二个参数 SQL命令来创建一个表。

示例:



这里有一个例子,使用PHP脚本来创建一个表:

<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "CREATE TABLE tutorials_tbl( ".
       "tutorial_id INT NOT NULL AUTO_INCREMENT, ".
       "tutorial_title VARCHAR(100) NOT NULL, ".
       "tutorial_author VARCHAR(40) NOT NULL, ".
       "submission_date DATE, ".
       "PRIMARY KEY ( tutorial_id )); ";
mysql_select_db( 'test' );
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not create table: ' . mysql_error());
}
echo "Table created successfully\n";
mysql_close($conn);
?>
</body>
</html>



2.删除表:


删除现有MySQL表这是很容易的,但必须非常小心,当删除任何现有的表,删除表后丢失的数据将不能恢复。

语法



这是用来删除MySQL表的通用SQL语法:

DROP TABLE table_name ;

1、从命令行提示符删除表



这需要只是在 MySQL>提示符下执行DROP TABLE SQL命令。

示例



下面是一个例子,它将删除表:tutorials_tbl

root@host# mysql -u root -p
Enter password:
mysql> use test;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

2、使用PHP脚本删除表



在任何数据库中删除现有的表,需要使用PHP函数:mysql_query()。通过其第二个参数的正确SQL命令来删除表。

示例




<html>
<head>
<title>删除MySQL数据库中的表</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "DROP TABLE tutorials_tbl";
mysql_select_db( 'test' );
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not delete table: ' . mysql_error());
}
echo "Table deleted successfully\n";
mysql_close($conn);
?>
</body>
</html>



3.插入数据:


想要将数据插入到MySQL表,需要使用SQL INSERT INTO命令。 可以通过用mysql>提示符或通过使用像PHP脚本将任何数据插入到MySQL表。

语法



这里是INSERT INTO命令将数据插入到MySQL表的通用SQL语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

要插入字符串类型数据,则需要双或单引号保留到所有的值,例如: "value".

1、从命令提示符插入数据



这将使用SQL 的INSERT INTO命令将数据插入到MySQL表:tutorials_tbl

示例



下面的例子将创建3条记录到表:tutorials_tbl

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> INSERT INTO tutorials_tbl (tutorial_title, tutorial_author, submission_date) VALUES ("Learn PHP", "Yiibai", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
     ->(tutorial_title, tutorial_author, submission_date)
     ->VALUES
     ->("Learn MySQL", "Yiibai", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
     ->(tutorial_title, tutorial_author, submission_date)
     ->VALUES
     ->("JAVA Tutorial", "yiibai", '2015-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>

注意: 请注意,所有的箭头符号(->)不是SQL命令的一部分; 它表示一个新行,是由MySQL提示符按下回车键没有给出一个分号,命令自动创建在行尾。


在上面的例子中,未提供 tutorial_id 对应的值,因为在创建表时它会自动创建,这个字段我们给了AUTO_INCREMENT选项。因此MySQL会自动分配插入ID的值。 这里, NOW() 是MySQL函数,返回当前的日期和时间。

2、使用PHP脚本插入数据



可以使用相同的SQL INSERT INTO命令在PHP的mysql_query()函数将数据插入到一个MySQL表。

示例




这个例子需要三个参数,从用户获取并将它们插入MySQL表:

<html>
<head>
<title>添加新记录到MySQL数据库表</title>
</head>
<body>
<?php
if(isset($_POST['add']))
{
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}

if(! get_magic_quotes_gpc() )
{
   $tutorial_title = addslashes ($_POST['tutorial_title']);
   $tutorial_author = addslashes ($_POST['tutorial_author']);
}
else
{
   $tutorial_title = $_POST['tutorial_title'];
   $tutorial_author = $_POST['tutorial_author'];
}
$submission_date = $_POST['submission_date'];

$sql = "INSERT INTO tutorials_tbl ".
       "(tutorial_title,tutorial_author, submission_date) ".
       "VALUES ".
       "('$tutorial_title','$tutorial_author','$submission_date')";
mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully
";
mysql_close($conn);
}
else
{
?>
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="600" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="250">Tutorial Title</td>
<td>
<input name="tutorial_title" type="text" id="tutorial_title">
</td>
</tr>
<tr>
<td width="250">Tutorial Author</td>
<td>
<input name="tutorial_author" type="text" id="tutorial_author">
</td>
</tr>
<tr>
<td width="250">Submission Date [ yyyy-mm-dd ]</td>
<td>
<input name="submission_date" type="text" id="submission_date">
</td>
</tr>
<tr>
<td width="250"> </td>
<td> </td>
</tr>
<tr>
<td width="250"> </td>
<td>
<input name="add" type="submit" id="add" value="添加教程">
</td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>

执行数据插入,它的最好的做法使用函数get_magic_quotes_gpc()来检查当前配置魔法引用是否已设置。 如果该函数返回false,那么使用函数 addslashes() 在引号前加斜杠。

可以把很多验证检查,如果输入数据不正确,可以采取适当的措施。



4.select查询:


SQL SELECT命令用于从MySQL数据库获取数据。可以在MySQL>提示符使用这个命令,以及任何像PHP的脚本和语言等。

语法



下面是通用的SQL的SELECT命令语法,从MySQL表获取数据:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • 可以使用分隔的一个或多个逗号从多个表,以及使用WHERE子句包括各种条件,但WHERE子句是SELECT命令的可选部分

  • 可以在一个SELECT命令指定读取一个或多个字段

  • 可以指定星号(*)代替选择的字段。在这种情况下,将返回所有字段

  • 可以指定任意的条件在 WHERE 子句后面

  • 可以使用OFFSET指定一个偏移量,SELECT从那里开始返回记录。默认情况下 offset 的值是 0

  • 可以使用LIMIT属性限制返回的数量

1、从命令提示符读取数据










这将使用SQL SELECT命令从MySQL 表 tutorials_tbl 读取数据

示例



下面的例子将从 tutorials_tbl 表返回所有记录:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

2、使用PHP脚本提取数据



可以使用相同的SQL SELECT命令,在PHP中的mysql_query()函数.此函数用于执行SQL命令,另一个更高版本PHP mysql_fetch_array()函数可用于获取所有选定的数据. 这个函数返回一行作为关联数组,数字数组,或两者兼而有。如果没有更多的行这个函数返回 FALSE。

下面是一个简单的例子来从tutorials_tbl表中提取记录。

示例



试试下面的例子来显示tutorials_tbl表中的所有记录。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>

数据库的行内容被分配到变量$row,并且行中的值将被打印出来。

注意: 当想直接插入数组值转换成字符串,一定记得使用花括号。

在上面的例子中,常量 MYSQL_ASSOC作为PHP函数 mysql_fetch_array() 的第二个参数, 因此,它返回该行作为关联数组。关联数组我们可以使用它的名称,而不是使用索引来访问该字段。

PHP提供了另一个函数 mysql_fetch_assoc(),也返回该行作为关联数组。

示例



试试下面的例子用来显示 tutorial_tbl 表所有的记录,使用 mysql_fetch_assoc() 函数例子如下:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retval))
{
    echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>

也可以使用常量MYSQL_NUM作为PHP mysql_fetch_array()函数的第二个参数。这会使该函数返回数字索引的数组。

示例



试试下面的例子来使用MYSQL_NUM 参数显示 tutorials_tbl 表的所有记录。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
    echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

所有上述三个例子将产生相同的结果。

释放内存:



这是一个很好的做法,以释放内存光标在每个SELECT语句的结束。这可以通过使用PHP函数了mysql_free_result()来完成。下面是该例子,以显示它如何被使用。

示例



试试下面的例子

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
    echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
}
mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>

在读取数据时,可以根据需要编写复杂的SQL。如上所述过程将保持不变。



5.where 子句:


我们已经看到使用SQL SELECT命令从MySQL表中获取数据。我们可以用 WHERE子句来筛选出结果的条件子句。使用WHERE子句,我们可以指定一个选择标准,从表中选择所需的记录。

语法



下面是SELECT命令使用WHERE子句来从MySQL表数据的通用SQL语法:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 可以使用逗号分隔一个或多个表,以及WHERE子句包括各种条件,但WHERE子句只是SELECT命令的可选部分

  • 可以指定使用任何条件在WHERE子句中

  • 可以指定一个以上的条件在使用AND或OR运算符中

  • WHERE子句可以用DELETE 或 UPDATE的SQL命令一起,也可以指定一个条件使用。






WHERE子句就像是if一个条件在编程语言中, 此子句是用来比较给定值的字段值在MySQL表是否可用。如果从外部给定值等于在MySQL表可用字段值,那么它返回该行。

这里是运算符的列表,它可以在WHERE子句中使用。

假设字段A=10,字段B=20,则:

操作符 描述 示例
= 检查两个操作数的值是否相等,如果是,则条件变为真。 (A = B) 不为 true.
!= 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (A != B) 为 true.
> 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 (A > B) 不为 true.
< 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 (A < B) 为 true.
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 (A >= B) 不为 true.
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件变为真。 (A <= B) 为 true.

当想要从一个表中提取所选行,尤其是当使用MySQL联接的WHERE子句是非常有用的。 联接在另一章讨论。

搜索使用主键进行快速搜索记录是常见的做法。

如果给定的条件不匹配表任何记录,那么查询将不会返回任何行。

1、从命令行提示符读取数据



使用SQL SELECT命令以及WHERE子句,从MySQL表tutorials_tbl选择获取数据。

示例



下面的例子将从tutorials_tbl表中作者的名字是yiibai所有记录返回:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author='yiibai';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           3 | JAVA Tutorial  | yiibai          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

除非执行字符串LIKE比较,比较是不区分大小写。可以使用BINARY关键字使搜索区分大小写如下:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl \
          WHERE BINARY tutorial_author='yiibai';
Empty set (0.02 sec)

mysql>

使用PHP脚本提取数据



可以使用相同的SQL SELECT命令及WHERE子句在PHP的mysql_query()函数。此函数用于执行SQL命令,之后另一个PHP的 mysql_fetch_array()函数可用于获取所有选定的数据。这个函数返回一行作为关联数组,数字数组,或两者兼而有。如果没有更多的行这个函数返回FALSE。

示例



下面的例子将从tutorials_tbl表中作者的名字是yiibai所有记录返回:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl
        WHERE tutorial_author="yiibai"';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>



6.Update查询:


可能会有一个需要,要在一个MySQL表中的现有数据进行修改。可以通过使用SQL UPDATE命令来执行。可以修改任何MySQL表中任何字段的值。

语法



这里是UPDATE命令修改数据到MySQL表的通用SQL语法:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
  • 完全可以更新一个或多个字段。

  • 可以指定使用任何条件在WHERE子句中。

  • 可以一次更新一个表中的值。





当想更新表中选定行,WHERE子句是非常有用的。

1、从命令提示符更新数据



使用SQL UPDATE命令以及WHERE子句来更新选定数据到MySQL表tutorials_tbl。

示例



下面的例子将更新 tutorial_id 为3 的纪录中的 tutorial_title 字段。

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> UPDATE tutorials_tbl 
    -> SET tutorial_title='Learning JAVA' 
    -> WHERE tutorial_id=3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

2、使用PHP脚本更新数据



可以使用SQL UPDATE命令带或不带WHERE子句在PHP的mysql_query()函数。在MySQL的>提示符下执行该函数,将执行类似SQL命令的效果。

示例



试试下面的例子,将更新tutorial_id为3的的纪录的tutorial_title字段。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'UPDATE tutorials_tbl
        SET tutorial_title="Learning JAVA"
        WHERE tutorial_id=3';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
?>


7.Delete查询:


如果想从任何MySQL表中删除纪录,那么可以使用SQL命令:DELETE FROM. 可以使用这个命令在MySQL>提示符,以及PHP等脚本的语言。

语法



这里是DELETE命令从一个MySQL表中删除数据的通用的SQL语法:

DELETE FROM table_name [WHERE Clause]
  • 如果WHERE子句没有指定,则所有MySQL表中的记录将被删除。

  • 可以指定使用任何条件在WHERE子句中。

  • 可以一次删除一个表中的所有记录。





当要删除一个表中选择特定行,WHERE子句是非常有用的。

1、从命令提示符删除数据



使用SQL DELETE命令,在WHERE子句中选定 MySQL 表 tutorials_tbl 的数据将被删除。

示例



下面的例子将删除 tutorial_tbl表中 tutorial_id为3的一条记录。

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> DELETE FROM tutorials_tbl WHERE tutorial_id=3;
Query OK, 1 row affected (0.23 sec)

mysql>

2、使用PHP脚本删除数据



可以使用SQL DELETE命令带或不带WHERE子句到PHP的mysql_query()函数。在MySQL的>提示符下执行该函数,将执行类似SQL命令的效果。

示例



尝试下面的例子,表 tutorial_tbl 中的tutorial_id为3的记录将被删除。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'DELETE FROM tutorials_tbl
        WHERE tutorial_id=3';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>



8.like子句:


我们已经看到使用SQL SELECT命令从MySQL表中获取数据。也可以使用WHERE子句来选择所需的记录条件子句。

WHERE等于子句号(=)用来精确匹配工作,如类似 “tutorial_author='yiibai'”。 但也有可能,我们要求过滤掉所有的结果,tutorial_author应包含的名称:"jay"。这可以通过使用SQL LIKE子句以及WHERE子句来处理。

如果SQL LIKE子句连同 % 字符使用,那么它会像在UNIX上的元字符(*),列出了所有的文件或目录在命令提示符下。

如果没有字符%,LIKE子句是非常相似的等号在WHERE子句中使用的效果。

语法



下面是SELECT命令连同LIKE子句来从MySQL表获取数据的通用SQL语法:

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • 可以指定使用任何条件在WHERE子句中

  • 可以使用LIKE子句在WHERE子句中

  • 可以使用LIKE子句代替等号(=)

  • 当LIKE连同%符号使用,那么它就会像一个元字符的搜索

  • 可以指定一个以上的条件使用AND或OR运算符

  • WHERE... LIKE子句可以使用SQL命令的DELETE 或 UPDATE ,也可以指定一个条件

1 、在命令提示符使用LIKE子句










使用SQL SELECT命令以及WHERE ... LIKE子句从MySQL表tutorials_tbl 选择获取数据并返回

示例



下面的例子是从tutorials_tbl表中获取作者的名称以 jay 结尾的所有记录:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl 
    -> WHERE tutorial_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           3 | JAVA Tutorial  | Sanjay          | 2015-07-21      |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

2、在PHP脚本使用LIKE子句



可以使用WHERE ... LIKE子句类似的语法在PHP 的 mysql_query() 函数。此函数用于执行SQL命令,紧接着另一个PHP mysql_fetch_array()函数可用于获取所有选定的数据,如果WHERE ... LIKE子句连同SELECT命令一起使用。

但是,如果WHERE ... LIKE子句正在连同DELETE 或UPDATE命令使用,PHP函数不再是必须的。

示例



试试下面的例子,tutorials_tbl表所有记录其作者姓名包含jay将被返回:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl
        WHERE tutorial_author LIKE "%jay%"';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>


9.Oder By 排序结果:


我们已经看到使用SQL SELECT命令从MySQL表中获取数据。当选择数据行,MySQL服务器可以自由地返回它们的顺序,除非有指示它按照怎样的结果进行排序。但是排序结果可以通过增加一个ORDER BY子句设定列名称或要排序的列。

语法



这是使用ORDER BY子句从MySQL表数据进行排序的SELECT命令的通用SQL语法:

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • 可以排序返回所列出提供的任何字段的结果

  • 可以在多个字段排序结果

  • 可以使用关键字ASC或DESC来执行升序或降序排序。默认情况下,按升序排列

  • 可以使用WHERE ... LIKE子句以通用的方式放置条件

在命令提示符使用ORDER BY子句








使用SQL SELECT命令与ORDER BY子句,从MySQL表tutorials_tbl获取数据。

示例



尝试下面的例子,它返回的结果是按升序排列的。

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           2 | Learn MySQL    | Jas bdul         | 2013-01-14      |
|           1 | Learn PHP      | So Boul          | 2014-02-21      |
|           3 | JAVA Tutorial  | Sanay su         | 2015-05-00      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.42 sec)

mysql>

验证所有的作者名称列出来是按升序排列。

在PHP脚本使用ORDER BY子句



可以使用ORDERBY子句类似的语法在PHP 的 mysql_query() 函数。此函数用于执行SQL命令,之后另一个PHP的 mysql_fetch_array()函数可用于获取所有选定的数据。

示例



尝试下面的例子,返回的结果是以教程的作者降序排列。

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, 
               tutorial_author, submission_date
        FROM tutorials_tbl
        ORDER BY  tutorial_author DESC';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>


10.Join连接:


到目前为止,我们只是从一个表读取数据。这是相对简单的,但在大多数现实中的MySQL使用,需要从多个表中,在单个查询获得数据。

可以在单个SQL查询中使用多个表。连接MySQL中的行在两个或多个表到一个表。

可以使用Join在SELECT,UPDATE和DELETE语句加入MySQL表。我们将看到LEFT JOIN的例子, 这与简单的MySQL JOIN有所不同。

1、在命令提示符中使用联接



假设我们有两个表 tcount_tbl 和 tutorials_tbl,在数据库:test ,完整列表如下:

示例



试试下面的例子:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran          |             20 |
| mahnaz          |           NULL |
| Jen             |           NULL |
| Gill            |             20 |
| John Poul       |              1 |
| Sanjay          |              1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-24      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-24      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-06      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

现在,我们可以写一个SQL查询来连接这两个表。此查询将从表 tutorials_tbl 和 tcount_tbl 选择所有作者的教程数量。

mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
    -> FROM tutorials_tbl a, tcount_tbl b
    -> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

在PHP脚本使用Join连接



可以使用上述的任何SQL查询在PHP脚本中。只需要传递SQL查询到PHP的mysql_query()函数,然后以通常的方式获取结果。

示例



试试下面的例子:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
        FROM tutorials_tbl a, tcount_tbl b
        WHERE a.tutorial_author = b.tutorial_author';

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "Tutorial ID: {$row['tutorial_id']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>

MySQL LEFT JOIN



MySQL左连接不同于简单连接。MySQL LEFT JOIN提供该表额外字段在左侧。

如果使用LEFT JOIN,得到的所有记录的匹配方式相同,在左边表中得到的每个记录不匹配也会有一个额外的记录。 从而确保(在本例子),每次作者信息都会列出:

示例



试试下面的例子就明白了 LEFT JOIN 的用法(注:第2条,作者Abdul S没有写教程也被列出来了):

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
    -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
    -> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

需要做更多的练习,以熟悉连接。这个概念是有点复杂,做这样实际例子,在MySQL/SQL将变得更加清晰。




11.NULL空值:


我们已经看到SQL SELECT命令和WHERE子句一起使用,来从MySQL表中提取数据,但是,当我们试图给出一个条件,比较字段或列值设置为NULL,它确不能正常工作。

为了处理这种情况,MySQL提供了三大运算符

  • IS NULL: 如果列的值为NULL,运算结果返回 true

  • IS NOT NULL: 如果列的值不为NULL,运算结果返回 true

  • <=>: 运算符比较值,(不同于=运算符)即使两个空值它返回 true





涉及NULL的条件是特殊的。不能使用= NULL或!= NULL来匹配查找列的NULL值。这样的比较总是失败,因为它是不可能告诉它们是否是true。 甚至 NULL = NULL 也是失败的。

要查找列的值是或不是NULL,使用IS NULL或IS NOT NULL。

在命令提示符,使用NULL值



假设在 test 数据库中的表 tcount_tbl 它包含两个列 tutorial_author 和 tutorial_count, 其中 tutorial_count 的值为NULL表明其值未知:

示例



试试下面的例子:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> create table tcount_tbl
    -> (
    -> tutorial_author varchar(40) NOT NULL,
    -> tutorial_count  INT
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tcount_tbl
    -> (tutorial_author, tutorial_count) values ('mahran', 20);
mysql> INSERT INTO tcount_tbl
    -> (tutorial_author, tutorial_count) values ('mahnaz', NULL);
mysql> INSERT INTO tcount_tbl
    -> (tutorial_author, tutorial_count) values ('Jen', NULL);
mysql> INSERT INTO tcount_tbl
    -> (tutorial_author, tutorial_count) values ('Gill', 20);

mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran          |             20 |
| mahnaz          |           NULL |
| Jen             |           NULL |
| Gill            |             20 |
+-----------------+----------------+
4 rows in set (0.00 sec)

mysql>

可以看到,= 及 != 不能与 NULL值不能正常工作(匹配)如下:

mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)

要查找记录中,其中 tutorial_count 列的值是或不是NULL,查询应该这样写:

mysql> SELECT * FROM tcount_tbl 
    -> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahnaz          |           NULL |
| Jen             |           NULL |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl 
    -> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran          |             20 |
| Gill            |             20 |
+-----------------+----------------+
2 rows in set (0.00 sec)

在PHP脚本中处理NULL值



可以使用 if...else 条件来基于NULL值的查询。

示例



下面的示例,从外面使用 tutorial_count,然后在表中可用的值进行比较。

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
if( isset($tutorial_count ))
{
   $sql = 'SELECT tutorial_author, tutorial_count
           FROM  tcount_tbl
           WHERE tutorial_count = $tutorial_count';
}
else
{
   $sql = 'SELECT tutorial_author, tutorial_count
           FROM  tcount_tbl
           WHERE tutorial_count IS $tutorial_count';
}

mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>




你可能感兴趣的:(mysql基础(一))