2019-08-11
1.AUTO_INCREMENT
关键字
AUTO_INCREMENT
告诉MySQL
,本列每当增加一行时自动增量。每次执行一个INSERT
操作时,MySQL
自动对该列增量,给该列赋予下一个可用的值。
每个表只允许一个AUTO_INCREMENT
列,而且它必须被索引(如,通过使它成为主键)。
如果一个列被指定为AUTO_INCREMENT
,则它需要使用特殊的值吗?你可以简单地在INSERT
语句中指定一个值,只要它是唯一的(至今尚未使用过)即可,该值将被用来替代自动生成的值,后续的增量将开始使用该手工插入的值。
确定AUTO_INCREMENT
的值,让MySQL
生成(通过自动增量)主键的一个缺点是你不知道这些值都是谁。如何在使用AUTO_INCREMENT
列时获得这个值呢?可使用last_insert_id()
函数获得这个值,如下
mysql> SELECT last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
此语句返回最后一个AUTO_INCREMENT
值,然后可以将它用于后续的MySQL
语句。
2. 指定默认值
如果在插入行时没有给出值,MySQL
允许指定此时使用的默认值。默认值用CREATE TABLE
语句的列定义中的DEFAULT
关键字指定。
与大多数DBMS
不一样,MySQL
不允许使用函数作为默认值,它只支持常量。
3. 引擎类型
与其他DBMS
一样,MySQL
有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE
语句时,该引擎具体创建表,而在你使用SELECT
语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS
内,不需要过多关注它。
但MySQL
与其他DBMS
不一样,它具有多种引擎。它打包多个引擎,这些引擎都隐藏在MySQL
服务器内,全都能执行CREATE TABLE
和SELECT
等命令。
为什么要发行多种引擎呢?因为它们具有各自不同的功能和特性,为不同的任务选择正确的引擎能获得良好的功能和灵活性。完全可以忽略这些数据库引擎。如果省略ENGINE=
语句,则使用默认引擎。
以下是几个需要知道的引擎:
InnoDB
是一个可靠的事务处理引擎,它不支持全文本搜索;MEMORY
在功能上等同于MyISAM
,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);MyISAM
是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
一个数据库中的不同表可以使用不同的引擎,即引擎可以混用。但混用引擎有一个大缺陷。外键不能跨引擎,即 使用一个引擎的表不能引用具有使用不同引擎的表的外键。