MySQL必知必会 学习笔记 第二十一章 创建和操纵表
创建表例子:
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;
可用逗号分隔重命名多个表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)