创建表的语法是使用CREATE TABLE语句。前面已经了解过了,现在看一下create table的几种扩展。
如果执行创建原本不存在的表,那么可以使用CREATE TABLE IF NOT EXIST语句。这条语句可让你的应用程序无需假设它将使用到的表是否已事先创建好。在使用IF NOT EXIST语句时,需要注意的是,MySQL不会把CREATE TABLE语句里的表结构与已有表的结构进行比较。即使已有表的名字相当但结构不同,它也不会报错。所以如果不想冒这个风险,那么最好在create table语句之前放置drop table if exists 语句。
CREATE TABLE ......LIKE
该语句会根据原有表创建一个新表,该表是原有表的一个空副本。它会把原有表的机构丝毫不差地复制过来,而且会保留各列的所有属性。但是不能根据原有表的列子集创建出新表,也不能使用除原有表以外的任何其他表里的列。
CREATE TABLE......SELECT
该语句可以根据任意一条select语句的查询结果创建一个新表。默认情况下,这条语句不会复制所有的列属性。如auto_increment,索引也不会。可包含其他表里的列。
删除表
DROP TABLE tb1_name; ##删除一个表
DROP TABLE tb1_name1,tb2_name2,...; ##删除多个表
更改表结构
更改列的数据类型:假设在mytb1里,列i的数据类型为SMALLINT UNSIGNED。如果要把它更改为MEDIUMINT UNSIGNED,可以使用下面两条语句
ALTER TABLE mytb1 MODIFY i MEDIUMINT UNSIGNED;
ALTER TABLE mytb1 CHANGE i i MEDIUMINT UNSIGNED;##为什么i i出现两次。
##因为CHANGE子句能够做到一件modify无法做到的事,即在更改数据类型的同时将该列重新命名。
ALTER TABLE mytb1 CHANGE i k MEDIUMINT UNSIGNED;
##更改列的字符集
ALTER TABLE t MODIFY c char(20) CHARACTER SET ucs2;
##什么要更改数据类型 比如说
SELECT ... FROM t1 inner join t2 WHERE t1.name=t2.name;
如果t1.name是char(10),而t2.name是char(15),那么查询速度不如他们都是CHAR(15)时那么快。可修改如下:
ALTER TABLE t1 MODIFY name CHAR(15);
ALTER TABLE t1 CHANGE name name CHAR(15);
重新命名表
ALTER TABLE tb1_name RENAME TO new_tb1_name;
RENAME TABLE tb1_name TO new_tb1_name;
如果在表名前面使用了数据库名进行限定,就可以通过对它重新命名达到把它从一个数据库移动到另一个数据库的目的。
ALTER TABLE sampdb.t RENAME TO test.t;
RENAME TABLE sampdb.t TO test.t;