始使用该手工插入的值。在使用 AUTO_INCREMENT 列时可使用 last_insert_id() 函数获得最后一个 AUTO_INCREMENT 值。
2.4 default
使用 DEFAULT 指定某一列的默认值,默认值不能使用函数,只能使用常量。
2.5 引擎类型
目前所创建的表都以 ENGINE=InnoDB 结尾,与其他 DBMS 一样,MySQL 有一个具体管理和处理数据的内部引擎。在你使用 CREATE TABLE 语句时,该引擎具体创建表,而在你使用 SELECT 语句或其他语句进行数据处理时,该引擎在内部处理你的请求。MySQL 具有多种引擎,它打包多个引擎,这些引擎隐藏在MySQL服务器内,全都能执行SQL语句,各个引擎的功能和特性不同。
InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快(特别适合于临时表);
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
引擎类型可以混用,但是外键不能跨引擎。
2.6 更新表
使用 ALTER TABLE 语句,一般情况下,当表中存储数据后就不应该被更新。使用 ALTER TABLE 语句要小心。
给表添加一个列:
mysql> ALTER TABLE mytable -> ADD myaddress char(50);
删除刚刚添加的列:
mysql> ALTER TABLE mytable -> DROP COLUMN myaddress;
ALTER TABLE 常见的用途是来定义外键,如上面的代码所示。
2.7 删除表和重命名表
mysql> DROP TABLE mytable2;
mysql> RENAME TABLE mytable2 TO mytable;
这条语句删除 mytable2 表,删除表没有确认,也不能撤销,执行这条语句将永久删除该表。
三、插入更新删除数据
插入更新删除数据的代码参考上面 populate.sql
3.1 数据插入
插入完整的行
mysql> INSERT INTO mytable VALUES ( 1001,'Evan','male','ShangHai','12345');
这种方式必须按次序给出所有列的值,如果不想给值的可以给出 NULL ,这种方式依赖于表中的列次序,不可靠。
可靠的方式是给出每列的名字(可以不按照表中列的次序):
mysql> INSERT INTO mytable(name, address, phone, gender) VALUES('Ive', 'LuoYang', '887631', 'female');
也可以一次插入多行,像这样:
mysql> INSERT INTO mytable(name, address, phone, gender) -> VALUES('Unn', 'LuoYang', '887631', 'female'), -> ('Angle', 'QingDao', '23667', 'female');
插入检索出的数据
新建一个表 mytable_new ,把 mytable 里的数据导入到 mytable_new 中:
mysql> INSERT INTO mytable_new( myid, name, gender) -> SELECT myid, name, gender -> FROM mytable;
3.2 数据更新
基本的 UPDATE 语句由三部分构成:要更新的表,列名和他们的新值,确定要更新行的过滤条件。
更新某一行:
mysql> UPDATE mytable_new -> SET name = 'Lucy' -> WHERE myid = 1002;
一定要加上 WHERE 的过滤条件,否则此条语句会更新表中的所有行的 name 字段。
更新多个列:
mysql> UPDATE mytable_new -> SET name = 'Ann', -> myphone = '1324576' -> WHERE myid = 1002;
在用 UPDATE 语句进行更新多行的操作时,如果发生错误,则整个 UPDATE 更新操作将被取消,发生错误前已经更新过的列将恢复原来的值。为了在发生错误时继续进行更新可使用 IGNORE 关键字:
mysql> UPDATE IGNORE mytable_new ...
为了删除某个列的值,可设置为 NULL(假设允许为NULL):
mysql> UPDATE IGNORE mytable_new -> SET name = NULL -> WHERE myid = 1003;
3.3 数据删除
mysql> DELETE FROM mytable_new -> WHERE myid = 1004;
记得加上 WHERE 过滤条件,否则会删除表中所有的行。
DELETE 语句删除表中的某一行或者所有行,但不会删除表本身。
如果想删除表中的所有行可以使用更快的语句:
TRUNCATE TABLE
该语句实际上是删除表,然后在新建一个表。
使用插入更新删除语句时要特别小心,因为 MySQL 没有 undo 操作。