创建表例子:
MySQL忽略语句中的空格,可像上例一样格式化一下语句。
创建的表名必须不存在,否则会报错。如果想在一个表不存在时创建它,且在该表已经存在时不报错而是发出警告,则应该在表名前加上IF NOT EXISTS:
CREAT TABLE IF NOT EXISTS tableName ...
列定义中的NOT NULL表示此字段不能为空,NULL表示此字段可以为空。默认值为NULL。
NULL是没有值,它不是空串。
主键值必须唯一,如果主键是多个列,那这些列的组合值必须唯一。
主键可以在建表时定义,也可以在建表后定义。
允许NULL值的列不能作为唯一标识。
每个表只允许一个AUTO_INCREMENT列,并且它必须被索引(如通过使它成为主键)。
在插入行到有自增列的表中时,可以使用至今未使用过的唯一值替代自动生成的值,之后该自增列的值从手工插入的值开始增加。(我测试时自增列可以使用重复的值,且自增列的下一个值会是表中最大值的下一个值)。
获取AUTO_INCREMENT刚插入的值,这个值是客户端独立的,每个客户端获取的都是自己刚刚操作的自增值:
SELECT last_insert_id();
列的默认值:
与大多DBMS不同,MySQL不允许使用函数作为默认值。
MySQL在你创建表时,使用用户指定的引擎或默认引擎创建表,在你SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。
几个引擎:
1.InnoDB:可靠的事务处理引擎。
2.MEMORY:功能等同于MyISAM,数据存储在内存,速度很快,适合临时表。
3.MyISAM:支持全文本搜索,不支持事务处理。
每个表都可以有不同的引擎,但外键不能跨引擎。
当表存储数据后,就不应该再更改表结构,应在表的设计过程考虑以便后期不对表进行大的改动。
给表增加一列:
ALTER TABLE tableName
ADD 列定义语句(定义表时的列语句);
# 同上
ALTER TABLE tableName
ADD COLUMN 列定义语句(定义表时的列语句);
删除一列:
ALTER TABLE tableName
DROP COLUMN columnName;
给表增加外键:
ALTER TABLE tableName1
ADD CONSTRAINT constraintName
FOREIGN KEY(field1) REFERENCES tableName2(field2)
以上SQL将field1作为外键,这要求表tableName2中的列field2上有唯一约束。
对于同一个表,可将多条更改用逗号分隔。
使用ALTER TABEL前应做一个完整备份,数据库表的更改不能撤销,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
复杂的表结构更改可以先创建新表,之后通过INSERT SELECT语句将旧表数据拷贝到新表,如有必要可使用转换函数和计算字段。
删除表:
DEOP TABLE tableName;
重命名表:
RENAME TABLE oldTableName TO newTableName;
可用逗号分隔重命名多个表。