mysql 命令 learnsql什么意思

mysql 命令 learnsql什么意思,第1张

SQL SELECT命令被用来获取数据从MySQL数据库。可以使用此命令在mysql>提示符下或使用脚本,如PHP。

语法:

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

?123 SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]

1.可以使用一个或多个以逗号分隔的表,包括各种使用WHERE子句条件。但是WHERE子句的SELECT命令是一个可选部分。

2.可以在一个单一的SELECT命令读取一个或多个字段。

3.可以指定星号(*)的字段的地方。在这种情况下,SELECT将返回所有的字段4.可以使用WHERE子句指定任何条件。

5.可以指定偏移用SELECT将开始返回记录的偏移量。默认情况下,偏移量为06.可以限制返回的使用LIMIT属性的数量。

从命令提示符获取数据:

这将使用SQL SELECT命令来从MySQL表tutorials_tbl获取数据例子:

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

?123456789101112131415 root@host# mysql -u root -p passwordEnter password:******* mysql>use TUTORIALSDatabase 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>

使用PHP脚本获取数据:

您可以使用相同的SQL SELECT命令进入PHP函数mysql_query()。这个函数是用来执行SQL命令后,另一个PHP函数mysql_fetch_array()可以用来获取所有选定的数据。这个函数返回的行作为一个关联数组/数字数组或两者。如果没有更多的行这个函数返回FALSE。

下面是一个简单的例子,获取记录tutorials_tbl表。

例子:

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

?123456789101112131415161718192021222324252627282930 <?php $dbhost = 'localhost:3036'$dbuser = 'root'$dbpass = 'rootpassword'$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('TUTORIALS')$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()函数。

?123456789101112131415161718192021222324252627282930 <?php $dbhost = 'localhost:3036'$dbuser = 'root'$dbpass = 'rootpassword'$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('TUTORIALS')$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表中的所有记录。

?123456789101112131415161718192021222324252627282930 <?php $dbhost = 'localhost:3036'$dbuser = 'root'$dbpass = 'rootpassword'$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('TUTORIALS')$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()。下面的例子来说明它是如何被使用的。

实例:

试试下面的例子

?12345678910111213141516171819202122232425262728293031 <?php $dbhost = 'localhost:3036'$dbuser = 'root'$dbpass = 'rootpassword'$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('TUTORIALS')$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,只要喜欢。程序将保持与上述相同。

表数据导出到一个文本文件最简单的方法是使用SELECT... INTO OUTFILE语句的查询结果直接导出到一个文件在服务器主机上。

导出数据的SELECT...INTO OUTFILE声明:

这句话的语法结合了常规的SELECT INTO OUTFILE文件名的末尾。默认的输出格式是相同的LOAD DATA,所以下面的语句导出tutorials_tbl的表制表符分隔的,换行结尾的文件到/tmp/tutorials.txt:

mysql>SELECT * FROM tutorials_tbl

->INTO OUTFILE '/tmp/tutorials.txt'

也可以更改输出格式,使用选项来指示如何引用和分隔列和记录。 CRLF终止线要导出tutorial_tbl的CSV格式的表格,使用这样的语句:

mysql>SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'

->FIELDS TERMINATED BY ',' ENCLOSED BY '"'

->LINES TERMINATED BY '\r\n'

SELECT ... INTO OUTFILE具有以下属性:

由MySQL服务器直接创建输出文件,这样的文件名应指定您希望在服务器主机上的文件将被写入。没有本地版本的LOAD DATA LOCAL版本的类似的语句。

必须要有MySQL的FILE权限才能执行的SELECT... INTO语句。

输出文件必须不存在。这可以防止MySQL从会破坏文件可能重要。

应该在服务器主机上或一些方法来检索文件从该主机的登录帐户。否则SELECT... INTO OUTFILE可能是没有价值的。

在Unix下,创造了世界可读的文件和所拥有的MySQL服务器。这意味着虽然就可以读取该文件,但是不能够删除它。

作为原始数据的导出表:

使用mysqldump程序复制或备份表和数据库。它可以写表输出的原始数据文件或为一组的INSERT语句重新创建该表中的记录。

转储一个表,必须指定一个数据文件 - 选项卡上的选项,表示想要的MySQL服务器写入文件所在的目录。

使用mysqldump程序复制或备份表和数据库。它可以写表输出的原始数据文件,或为一组的INSERT语句重新创建该表中的记录。

转储一个表,必须指定一个数据文件 - 选项卡上的选项,表示想要的MySQL服务器写入文件所在的目录。

$ mysqldump -u root -p --no-create-info \

     --tab=/tmp TUTORIALS tutorials_tbl

password ******

在SQL格式导出表的内容或定义:

一个表中的SQL格式导出到一个文件,使用这样的命令:

$ mysqldump -u root -p TUTORIALS tutorials_tbl >dump.txt

password ******

这将创建文件的内容如下:

-- MySQL dump 8.23

--

-- Host: localhost  Database: TUTORIALS

---------------------------------------------------------

-- Server version    3.23.58

--

-- Table structure for table `tutorials_tbl`

--

CREATE TABLE tutorials_tbl (

tutorial_id int(11) NOT NULL auto_increment,

tutorial_title varchar(100) NOT NULL default '',

tutorial_author varchar(40) NOT NULL default '',

submission_date date default NULL,

PRIMARY KEY (tutorial_id),

UNIQUE KEY AUTHOR_INDEX (tutorial_author)

) TYPE=InnoDB

--

-- Dumping data for table `tutorials_tbl`

--

INSERT INTO tutorials_tbl

   VALUES (1,'Learn PHP','John Poul','2007-05-24')

INSERT INTO tutorials_tbl

   VALUES (2,'Learn MySQL','Abdul S','2007-05-24')

INSERT INTO tutorials_tbl

   VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06')

要转储多个表,他们的名字所有的数据库名称参数。要转储整个数据库,不指定任何表后的数据库,如下所示:

$ mysqldump -u root -p TUTORIALS >database_dump.txt

password ******

所有可用的数据库备份主机上使用以下命令:

$ mysqldump -u root -p --all-databases >database_dump.txt

password ******

在SQL格式导出表的内容或定义:

这些方法可用于实现数据库的备份策略。

表或数据库复制到另一台主机:

如果要复制的表或数据库从一个MySQL服务器,然后使用mysqldump数据库名和表名。

在源主机上运行以下命令。这将转储完整的数据库到dump.txt文件:

$ mysqldump -u root -p database_name table_name >dump.txt

password *****

复制完整的数据库,而不使用一个特定的表名称,如上面所解释。

现在,FTP dump.txt文件在另一台主机上,使用下面的命令。在运行此命令之前,请确保已创建目标服务器上的数据库名称。

$ mysql -u root -p database_name <dump.txt

password *****

另一种方法,而无需使用一个中间文件来完成,mysqldump输出直接通过网络发送到远程的MySQL服务器。如果可以连接到两台服务器的cookbook 数据库所在的主机上,使用以下命令:

$ mysqldump -u root -p database_name \

     states | mysql -h other-host.com database_name

命令mysqldump的一半连接到本地服务器,并写入转储输出管道。 MySQL的一半的命令连接到远程MySQL服务器otherhost.com。它读取输入管和其他host.com服务器发送的每个语句。

有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......

此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。

那我们能知道 update 的进度么?

实验

我们先创建一个测试数据库:

快速创建一些数据:

连续执行同样的 SQL 数次,就可以快速构造千万级别的数据:

查看一下总的行数:

我们来释放一个大的 update:

然后另起一个 session,观察 performance_schema 中的信息:

可以看到,performance_schema 会列出当前 SQL 从引擎获取的行数。

等 SQL 结束后,我们看一下 update 从引擎总共获取了多少行:

可以看到该 update 从引擎总共获取的行数是表大小的两倍,那我们可以估算:update 的进度 = (rows_examined) / (2 * 表行数)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7376663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存