「MySQL整理」 MySQL语法,如何操作数据表
yuyutoo 2024-11-17 17:53 4 浏览 0 评论
一、MySQL创建数据表
在 MySQL 中,可以使用 CREATE TABLE 语句创建表。CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。
其语法格式为:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [<数据库名>.]<表名>
(
[表结构定义选项]
) [表选项] [分区选项];
CREATE TABLE 语句的主要语法及使用说明如下:
- “[]” 方括号:代表内部的语法可有可无。
- CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。
- IF NOT EXISTS :在创建表之前会判断表是否存在,存在则无法创建,提示报错。
- <表名>:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,’mydb’.’mytbl’ 是合法的,但 ‘mydb.mytbl’ 不合法。
- [表定义选项] :可以定义表的多个字段,完整性约束、索引等。
实例1,这是一个简单的例子
CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT ,
`name` varchar(20) DEFAULT '' ,
PRIMARY KEY (`id`)
);
说明:该例子创建一个表名为test的表,字段id,类型为int,非空not null,自增AUTO_INCREMENT;字段name,类型为varchar,长度为20,默认值为空字符串;设置主键为id。
1、表结构定义选项
[表结构定义选项] :可以定义表的多个字段,完整性约束、索引等。其格式如下:
[字段定义项]
[完整性约束定义]
[索引定义项]
#其中 [完整性约束定义] 可分为如下
[主键约束定义项]
[唯一约束定义项]
[外键约束定义项]
[检查约束定义项]
对于初学者来说,可以先只了解字段定义项和主键约束定义项。
[字段定义项] 包含字段名称、字段类型、字段约束定义、字符类型字段的字符集和校对规则、字段注释、可以定义多条。格式如下:
<字段1名称> <类型1> [字段约束定义] [[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name] [comment '字段1的注释']
[,...]
[,<字段n名称> <类型n> 字段约束定义] [[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name] [comment '字段n的注释']
其中,[DEFAULT] CHARACTER SET设置字符集,[DEFAULT] COLLATE设置字段的校对规则,comment为字段的注释。(mysql字符集和校对规则详情请查看我的其他相关文章)
字段约束定义:包含主键约束(primary key)、主键自增(auto_increment)、非空约束(not null)、唯一约束(unique)、默认值(default)。完整的字段定义项语法如下:
<字段1> <类型1> [primary key] [auto_increment] [not null] [unique] [default 默认值] [comment '字段1的注释']
[,<字段n> <类型n> [primary key] [auto_increment] [not null] [unique] [default 默认值]] [comment '字段n的注释']
[表定义选项]的其他部分语法格式:
#主键约束定义项,单独一行。或者在字段约束定义里定义主键约束(上面primary key已说明)
[CONSTRAINT <约束名>] primary key(`某个字段` [,`其他字段1` [,`其他字段n`]])
#唯一约束 唯一约束也是索引的一种
UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…
#外键约束定义项
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
#检查约束定义项
CHECK <表达式>
#索引定义项
[unique][key|index][<索引名>] [<索引类型>] (<字段名>,…)
后面的文章会对这几个部分做更详细的介绍。
2、表选项
表选项就是,创建一个表的时候,对该表的整体设定,主要有如下几个:
- charset 要使用的字符编码,
- COLLATE 字符的校对规则
- engine 要使用的存储引擎(也叫表类型)。mysql常用的引擎有InnoDB, MyISAM, BDB, archive, Memory。通过show engines查看mysql支持的数据库引擎
- auto_increment 设定当前表的自增长字段的初始值,默认是1
- comment 表注释
- 还有其他表选项,限于篇幅,其他表选项将在其他文章说明。
实例:
CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT ,
`name` varchar(20) DEFAULT '' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
COMMENT='test'
AUTO_INCREMENT=100
二、MySQL修改数据表 ALTER TABLE
在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。语法格式如下:
ALTER TABLE <表名> [修改选项]
修改选项的语法格式如下:
{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> }
1、mysql表添加新字段
mysql表添加新字段的语法格式如下:
ALTER TABLE <表名>
ADD COLUMN <新字段名><数据类型>[约束条件] [FIRST|AFTER <已有的字段>]
[,ADD COLUMN <新字段名><数据类型>[约束条件] [FIRST|AFTER <已有的字段>] ];
说明:
- [约束条件] 是可选的,用来对添加的字段进行约束。
- first 在开头位置(第一列的前面)添加新字段,MySQL 默认在表的最后位置添加新字段。
- after 新字段添加到某个已有的字段后面。.
- 可以有多个ADD COLUMN,添加多个新字段,用英文逗号隔开。
ALTER TABLE `student`
ADD COLUMN `s_num` int NOT NULL DEFAULT 0 COMMENT '编号' AFTER `s_sex`,
ADD COLUMN `s_addree` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '家庭住址' AFTER `s_num`;
2、mysql表修改字段
mysql表修改字段的语法有两个。分别是change和modify,如果不修改字段名称,使用modify。
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型和约束>;
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
说明
- 旧字段名:指修改前的字段名;
- 新字段名:指修改后的字段名;
- 新数据类型和约束:指修改后的数据类型和约束,如果不需要修改这部分,需要和之前的完全一样,否则就会被修改。
- 可以有多个CHANGE COLUMN,修改多个字段,用英文逗号隔开。
ALTER TABLE `student`
CHANGE COLUMN `s_birth` `s_birth_day` varchar(20) NOT NULL DEFAULT '' AFTER `s_name`,
CHANGE COLUMN `s_sex` `s_sex2` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `s_birth_day`;
#用modify
ALTER TABLE `student`
MODIFY COLUMN `s_birth` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `s_name`;
3、mysql表删除字段
mysql表删除字段的格式:
ALTER TABLE <表名> DROP <字段名>;
实例:
ALTER TABLE `student`
DROP COLUMN `s_name`,
DROP COLUMN `s_birth`;
4、mysql修改表名
mysql修改表名的格式如下:
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
#实例
ALTER TABLE student RENAME TO tb_students_info;
5、mysql修改表字符集、校对规则、引擎、自增长值等表选项。
ALTER TABLE `student`
ENGINE=MyISAM,
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci,
AUTO_INCREMENT=500;
三、MySQL删除数据表
在删除表的同时,表的结构和表中所有的数据都会被删除,使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:
DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]
对语法格式的说明如下:
- 表名1, 表名2, 表名3 …表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。
- IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。
- 用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。
- 表被删除时,用户在该表上的权限不会自动删除。
相关推荐
- 全局和隐式 using 指令详解(全局命令)
-
1.什么是全局和隐式using?在.NET6及更高版本中,Microsoft引入了...
- 请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍
-
1、介绍模块化单体是一种架构风格,代码是根据模块的概念构成的。对于许多组织而言,模块化单体可能是一个很好的选择。它有助于保持一定程度的独立性,这有助于我们在需要的时候轻松过渡到微服务架构。Spri...
- ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战
-
我是一位多年后端经验的工程师,其中前几年用ASP.NET...
- .NET AOT 详解(.net 6 aot)
-
简介AOT(Ahead-Of-TimeCompilation)是一种将代码直接编译为机器码的技术,与传统的...
- 一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)
-
哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!...
- asar归档解包(游戏arc文件解包)
-
要学习Electron逆向,首先要有一个Electron开发的程序的发布的包,这里就以其官方的electron-quick-start作为例子来进行一下逆向的过程。...
- 在PyCharm 中免费集成Amazon CodeWhisperer
-
CodeWhisperer是Amazon发布的一款免费的AI编程辅助小工具,可在你的集成开发环境(IDE)中生成实时单行或全函数代码建议,帮助你快速构建软件。简单来说,AmazonCodeWhi...
- 2014年最优秀JavaScript编辑器大盘点
-
1.WebstormWebStorm是一种轻量级的、功能强大的IDE,为Node.js复杂的客户端开发和服务器端开发提供完美的解决方案。WebStorm的智能代码编辑器支持JavaScript,...
- 基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享
-
项目简介:基于JS的超轻量级聊天软件。前端:vue、iview、electron实现的PC桌面版聊天程序,主要适用于私有云项目内部聊天,企业内部管理通讯等功能,主要通讯协议websocket。支持...
- JetBrains Toolbox推出全新产品订阅授权模式
-
捷克知名软件开发公司JetBrains最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJIDEA,相信很多开发者都有所了解。而近期自2015年11月2日起,JetBr...
- idea最新激活jetbrains-agent.jar包,亲测有效
-
这里分享一个2019.3.3版本的jetbrains-agent.jar,亲测有效,在网上找了很多都不能使用,终于找到一个可以使用的了,这里分享一下具体激活步骤,此方法适用于Jebrains家所有产品...
- CountDownTimer的理解(countdowntomars)
-
CountDownTimer是android开发常用的计时类,按照注释中的说明使用方法如下:kotlin:object:CountDownTimer(30000,1000){...
- 反射为什么性能会很慢?(反射时为什么会越来越长)
-
1.背景前段时间维护一个5、6年前的项目,项目总是在某些功能使用上不尽人意,性能上总是差一些,仔细过了一下代码发现使用了不少封装好的工具类,工具类里面用了好多的反射,反射会影响到执行效率吗?盲猜了一...
- btrace 开源!基于 Systrace 高性能 Trace 工具
-
介绍btrace(又名RheaTrace)是抖音基础技术团队自研的一款高性能AndroidTrace工具,它基于Systrace实现,并针对Systrace不足之处加以改进,核心改进...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- .NET 奇葩问题调试经历之3——使用了grpc通讯类库后,内存一直增长......
- 全局和隐式 using 指令详解(全局命令)
- 请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍
- ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战
- .NET AOT 详解(.net 6 aot)
- 一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)
- asar归档解包(游戏arc文件解包)
- 在PyCharm 中免费集成Amazon CodeWhisperer
- 2014年最优秀JavaScript编辑器大盘点
- 基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)