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;

可用逗号分隔重命名多个表。

posted @   epiphanyy  阅读(9)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示