MySQL往期文章 | |||
---|---|---|---|
mysql1> 安装与管理,安装,管理 |
| mysql2> PHP语法,mysql连接
| mysql3> 创建数据库,删除数据库,选择数据库
| mysq7> 元数据,序列使用,处理重复数据,及SQL注入,导出数据,导入数据
| | mysql4> 数据类型,创建数据表,删除数据表,插入数据,查询数据
| mysql5> where子句,UPDATE查询,DELETE语句,LIKE子句,排序,Join的使用
| mysql6> Null值处理,正则表达式,事务,ALTER命令,索引,临时表,复制表
| |
MySQL NULL 值处理
我们已经知道MySQL使用 SQL SELECT
命令及 WHERE
子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL
时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
**IS NULL**
: 当列的值是NULL
,此运算符返回true
。**IS NOT NULL**
: 当列的值不为NULL
, 运算符返回true
。**<=>**
: 比较操作符(不同于=运算符),当比较的的两个值为NULL
时返回true
。
关于 NULL
的条件比较运算是比较特殊的。你不能使用= NULL
或!= NULL
在列中查找 NULL
值 。
在MySQL中,NULL
值与任何其它值的比较(即使是NULL
)永远返回false
,即 NULL = NULL
返回false
。
MySQL中处理NULL
使用IS NULL
和IS NOT NULL
运算符。
在命令提示符中使用 NULL 值
以下实例中假设数据库 TUTORIALS
中的表 tcount_tbl
含有两列tutorial_author
和 tutorial_count, tutorial_count
中设置插入NULL
值。
实例
尝试以下实例:
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
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>
以下实例中你可以看到 =
和!=
运算符是不起作用的:
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,必须使用IS NULL和IS NOT 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 值
PHP脚本中你可以在 if...else
语句来处理变量是否为空,并生成相应的条件语句。
以下实例中PHP设置了$tutorial_count
变量,然后使用该变量与数据表中的tutorial_count
字段进行比较:
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$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('TUTORIALS');
$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 正则表达式
在前面的章节我们已经了解到MySQL可以通过**LIKE ...%**
来进行模糊匹配。
MySQL 同样也支持其他正则表达式的匹配, MySQL中使用REGEXP
操作符来进行正则表达式匹配。
如果您了解PHP或Perl,那么操作起来就非常简单,因为MySQL的正则表达式匹配与这些脚本的类似。
下表中的正则模式可应用于REGEXP
操作符中。
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 |
. | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
[…] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^…] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。 |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。 |
* | 匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
实例
了解以上的正则需求后,我们就可以更加自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:person_tbl
)来加深我们的理解:
查找name
字段中以'st'
为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name
字段中以'ok'
为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查找name
字段中包含'mar'
字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name
字段中以元音字符开头且以'ok'
字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 在MySQL中只有使用了
Innodb
数据库引擎的数据库或表才支持事务 - 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
- 事务用来管理
insert
,update
,delete
语句
一般来说,事务是必须满足4个条件(ACID
): Atomicity
(原子性)、Consistency
(稳定性)、Isolation
(隔离性)、Durability
(可靠性)
- 1、事务的原子性:一组事务,要么成功;要么撤回。
- 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
- 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
- 4、可靠性:软、硬件崩溃后,
InnoDB
数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit
选项 决定什么时候吧事务保存到日志里。在Mysql控制台使用事务来操作
1,开始一个事务
2, 做保存点start transaction
3, 操作save point 保存点名称
4,可以回滚,可以提交,没有问题,就提交,有问题就回滚。PHP中使用事务实例
<?php
$handler=mysql_connect("localhost","root","password");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN");//开始事务定义
if(!mysql_query("insert into trans (id) values('2')"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
if(!mysql_query("insert into trans (id) values('4')"))
{
mysql_query("ROOLBACK");//判断执行失败回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
?>
MySQL ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER
命令。
开始本章教程前让我们先创建一张表,表名为:testalter_tbl
。root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table testalter_tbl
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
删除,添加或修改表字段
如下命令使用了ALTER
命令及DROP
子句来删除以上创建表的i
字段:
如果数据表中只剩余一个字段则无法使用mysql> ALTER TABLE testalter_tbl DROP i;
DROP
来删除字段。
MySQL 中使用ADD
子句来想数据表中添加列,如下实例在表testalter_tbl
中添加i
字段,并定义数据类型:
执行以上命令后,i 字段会自动添加到数据表字段的末尾。mysql> ALTER TABLE testalter_tbl ADD i INT;
如果你需要指定新增字段的位置,可以使用MySQL提供的关键字mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
FIRST
(设定位第一列),AFTER
字段名(设定位于某个字段之后)。
尝试以下ALTER TABLE
语句, 在执行成功后,使用SHOW COLUMNS
查看表结构的变化: ```php ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT FIRST; ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT AFTER c;
`FIRST `和 `AFTER` 关键字只占用于 `ADD` 子句,所以如果你想重置数据表字段的位置就需要先使用 `DROP` 删除字段然后使用 `ADD `来添加字段并设置位置。
<a name="hI3zx"></a>
## 修改字段类型及名称
如果需要修改字段类型及名称, 你可以在`ALTER`命令中使用` MODIFY `或` CHANGE `子句 。<br />例如,把字段` c` 的类型从 `CHAR(1) `改为 `CHAR(10)`,可以执行以下命令:
```php
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
使用 CHANGE
子句, 语法有很大的不同。 在 CHANGE
关键字之后,紧跟着的是你要修改的字段名,然后指定新字段的类型及名称。尝试如下实例:
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
如果你现在想把字段 j=""
从="" bigint=""
修改为="" int
,sql语句如下:<="" p="">
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
ALTER TABLE 对 Null 值和默认值的影响
当你修改字段时,你可以指定是否包含只或者是否设置默认值。
以下实例,指定字段j
为 NOT NULL
且默认值为100
。
mysql> ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
如果你不设置默认值,MySQL会自动设置该字段默认为 NULL
。
修改字段默认值
你可以使用ALTER
来修改字段的默认值,尝试以下实例:
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | 1000 | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
你也可以使用 ALTER
命令及DROP
子句来删除字段的默认值,如下实例:
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Changing a Table Type:
修改数据表类型,可以使用 ALTER
命令及TYPE
子句来完成。尝试以下实例,我们将表 testalter_tbl
的类型修改为MYISAM
:
注意:查看数据表类型可以使用 SHOW TABLE STATUS
语句。
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1\. row ****************
Name: testalter_tbl
Type: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 25769803775
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-03 08:04:36
Update_time: 2007-06-03 08:04:36
Check_time: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
修改表名
如果需要修改数据表的名称,可以在 ALTER TABLE
语句中使用RENAME
子句来实现。
尝试以下实例将数据表 testalter_tbl
重命名为alter_tbl
:
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
ALTER
命令还可以用来创建及删除MySQL数据表的索引,该功能我们会在接下来的章节中介绍。
MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT
、UPDATE
和DELETE
。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。
普通索引
创建索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR
,VARCHAR
类型,length
可以小于字段实际长度;
如果是BLOB
和TEXT
类型,必须指定length
。
修改表结构
ALTER mytable ADD INDEX [indexName] ON (username(length))
创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
删除索引的语法
DROP INDEX [indexName] ON mytable;
唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
使用ALTER 命令添加和删除索引
有四种方式来添加数据表的索引:
**ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)**
: 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。**ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)**
: 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。**ALTER TABLE tbl_name ADD INDEX index_name (column_list)**
: 添加普通索引,索引值可出现多次。ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)
:该语句指定了索引为 FULLTEXT ,用于全文索引。
以下实例为在表中添加索引。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
你还可以在ALTER
命令中使用 DROP
子句来删除索引。尝试以下实例删除索引:
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
使用 ALTER 命令添加和删除主键
主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL
)。实例如下:
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
你也可以使用 ALTER
命令删除主键:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
删除指定时只需指定PRIMARY KEY
,但在删除索引时,你必须知道索引名。
显示索引信息
你可以使用 SHOW INDEX
命令来列出表中的相关的索引信息。可以通过添加\G
来格式化输出信息。
尝试以下实例:
mysql> SHOW INDEX FROM table_name\G
........
MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
临时表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就无法使用MySQL的临时表。不过现在一般很少有再使用这么低版本的MySQL数据库服务了。
MySQL临时表只在当前连接可见,如果你使用PHP脚本来创建MySQL临时表,那没当PHP脚本执行完成后,该临时表也会自动销毁。
如果你使用了其他MySQL客户端程序连接MySQL数据库服务器来创建临时表,那么只有在关闭客户端程序时才会销毁临时表,当然你也可以手动销毁。
实例
以下展示了使用MySQL 临时表的简单实例,以下的SQL代码可以适用于PHP脚本的mysql_query()
函数。
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
当你使用**SHOW TABLES**
命令显示数据表列表时,你将无法看到SalesSummary
表。
如果你退出当前MySQL会话,再使用 **SELECT**
命令来读取原先创建的临时表数据,那你会发现数据库中没有该表的存在,因为在你退出时该临时表已经被销毁了。
删除MySQL 临时表
默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 **DROP TABLE**
命令来手动删除临时表。
以下是手动删除临时表的实例:
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist
MySQL 复制表
如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用**CREATE TABLE ... SELECT**
命令,是无法实现的。
本章节将为大家介绍如何完整的复制MySQL数据表,步骤如下:
- 使用
**SHOW CREATE TABLE**
命令获取创建数据表(**CREATE TABLE**
) 语句,该语句包含了原数据表的结构,索引等。 - 复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
- 如果你想复制表的内容,你就可以使用
**INSERT INTO ... SELECT**
语句来实现。实例
尝试以下实例来复制表tutorials_tbl
。
步骤一:
获取数据表的完整结构。 ```php mysql> SHOW CREATE TABLE tutorials_tbl \G; * 1. row *
Create Table: CREATE TABLETable: tutorials_tbl
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 KEYAUTHOR_INDEX
(tutorial_author
) ) TYPE=MyISAM 1 row in set (0.00 sec)
ERROR: No query specified
**步骤二:**<br />修改SQL语句的数据表名,并执行SQL语句。
```php
mysql> CREATE TABLE `clone_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=MyISAM;
Query OK, 0 rows affected (1.80 sec)
步骤三:
执行完第二步骤后,你将在数据库中创建新的克隆表 clone_tbl
。 如果你想拷贝数据表的数据你可以使用**INSERT INTO... SELECT**
语句来实现。
mysql> INSERT INTO clone_tbl (tutorial_id,
-> tutorial_title,
-> tutorial_author,
-> submission_date)
-> SELECT tutorial_id,tutorial_title,
-> tutorial_author,submission_date,
-> FROM tutorials_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
执行以上步骤后,你将完整的复制表,包括表结构及表数据。'Attr.nodeValue' is deprecated. Please use 'value' instead. adsbygoogle.js:32