当前位置: 首页 > news >正文

(MySQL)表的操作

目录

表的创建

语法

创建表的案例

查看表的结构

修改表的操作

修改表名

​编辑 添加一个字段(列)

修改一个字段的类型

修改字段名

删除字段名(删除列)

删除指定的表

表的插入数据

数据库的备份和恢复


我们来学习表的操作

表的创建

语法

CREATE TABLE [if not exists]  table_name (

field1 datatype,

field2 datatype,

field3 datatype

) character set 字符集 collate 校验规则 engine 存储引擎;

 使用create table语句创建表,table就是表,然后跟从表名,在创建之前可以判断这个表名是否存在(if not exists),然后往()内部插入表的元素列作为列的列名,这些列名的创建规则是名字+类型,在括号外面可以指定字符集和校验规则,存储引擎。

存储引擎定义数据的存取方式、索引管理方式。可以自己指定存储引擎,如果不指定系统默认使用InnoDB(默认,支持事务、行级锁)。

创建表的案例

use work;
create table if not exists userl(id varchar(20) comment '用户名',password char(32) comment '用户密码',birthday date comment '用户的生日'
)character set utf8 collate utf8_general_ci engine MyIsam;

可以看到确实创建了userl表只是没有数据,对应每个列成员都正确跟随了一个固定的类型,comment + '注释内容'语句是给这个列名加了注释,这个注释不会直接体现在表里面而是当我们查找表的详细创建信息时才能看到。在MySQL中用''引起来的和用""引号引起来的都是字符串,没有什么区别。

create table userl2(home_id int comment '分配宿舍楼号',password char(32) comment '用户密码',birthday date comment '用户生日',work_id int unsigned comment '用户工号'
);

int unsigned连起来算一种类型表示无符号整型,可以看出这个engine也不需要自己设的。

像如上我们自己使用默认engine创建的表就不同了,但是.frm结尾的文件肯定是有的。

查看表的结构

show tables;  //查看当前数据库中的所有表

 show tables;首先要先use指定选择数据库。

desc 表名;  //查看详细表结构

desc 表名 是 MySQL 中用于查看指定详细表结构的命令 

例如我们desc userl;得到的结果如下:

 

默认值就是这个列所对应的元素如果没有就默认是default的值,就是NULL,这个NULL和不填/''有区别不填就是完全没有,NULL是表示是这个类型但是值为空的。

Type后面这些都叫做表的约束字段。

show create table 表名;  //查看创建表的完整创建语句

SHOW CREATE TABLE 表名; 是 MySQL 中用于查看 表的完整创建语句 的命令,包括表结构、存储引擎、字符集、注释等信息。 

work里面原本创建了一个users表此时那些可选项我一个都不带。

查看表的创建语句可以看到系统自动的会帮我们填充可选项里面的字段。

上面这个信息非常的杂乱,我们可以在查看语句后面带上\G 方便查看。

show create table users \G;  // \G 是 MySQL 客户端的特殊结束符,表示将查询结果按行垂直显示,适合查看较长的输出。 

 这个输出显示你已经成功执行了 SHOW CREATE TABLE users \G 命令,但最后出现了一个提示 ERROR: No query specified。这其实 不是真正的错误,而是 MySQL 客户端的一个无害提示,可以忽略。为什么唯独没有填充校验规则信息,MySQL认为显示默认值不是必须的,这完全不影响表的正常使用,因为MySQL会实际使用默认的校验规则(utf8_general_ci),只是没有在SHOW CREATE TABLE的输出中显示而已。

修改表的操作

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

修改表名

alter table 旧表名 rename to 新表名;   //表名修改

使用alter table引导的修改语句可以进行修改表名。其中to可以省略

 添加一个字段(列)

alter table 表名 add 新的字段名 类型 [comment注释] [约束] [after 原有字段名];

使用alter table ... add引导的插入一个新的列的语句,指定在哪个表上插入之后add后面写入新的字段名连带着类型,至于注释,约束可以不带,最后是指定这个新插入的列的位置,可以使用after+原有字段名表示插入在这个字段名之后,如果没有指定位置就默认添加到最后一列 。

可以看出属于一个字段的必须有类型+多种约束,约束可以使用默认的但是类型必须自己显示指定。

在userp表添加一个新的字段work_id

这次不指定位置就自动插入在结尾,并且插入非空约束,插入新字段后,对原来表中的数据没有影响。

修改一个字段的类型

alter table 表名 modify 字段名 新的类型; 

修改一个指定的列的类型,使用alter table modify语句进行原地修改其的类型,修改的类型尽量和原本类型一致,这样可以避免不必要的不兼容。

如上将id字段的最大长度改成30,我没有改变其类型,仅仅改变长度也可以。

类型由varchar->char

修改字段名

alter table 表名 change column 旧字段名 新字段名 类型 [comment注释] [约束];

column的意思是列,使用alter table change column语句将指定表中的列名改变成新的列名,修改为新字段名时必须同时修改列的类型约束,也可以添加注释,当然这里不推荐再移动位置了。

 

由于字段名和类型是强绑定的,就算我不修改其类型也要进行附加的写入。

不可以修改现有表中没有的字段,如上不仅修改了名字,类型还添加了约束,这个相当于将原本的没有非空约束使用alter table change column语句修改成了具有非空约束的字段。

删除字段名(删除列)

alter table 表名 drop 列名;

使用alter table drop语句删除指定表中指定的列名,删除字段一定要小心,删除字段及其对应的列数据都没了。 

删除指定的work_id列。

删除指定的表

drop [temporary] table [if exists] 表名;  //删除表

 以上语句用于删除指定名字的表,[]中的为可选项,[temporary]的意思就是暂时的,加上这个字段的意思就是只删除开启的临时的当前表的会话窗口而不会真的删除存在数据库的同名的真实的表。

DROP TEMPORARY TABLE 只会删除当前会话(当前窗口/连接)创建的临时表,且不会影响其他会话或同名的永久表。

[if exists]就是检查这个待删除的表存不存在,只有存在这个表才可以被删除。

如上删除userl2表。

表的插入数据

-- 完整写法(推荐指定列名)
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
-- 简化写法(需按表结构顺序提供所有列值)
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), ...;

在 MySQL 中,INSERT INTO (...) 表名 VALUES(...) 是用于向数据表中插入新记录的基本语法,但需要注意完整性和安全性。 

insert into values引导的插入信息语句向指定的表中的对应列中插入合理的数据(values)。

这个插入语句一次可以插入一条信息,也可以插入多条,可以不指定列名。

通过select* from语句看出插入成功了。

多行插入。本次仅仅先介绍插入语句,其他和数值有关的语句后面再说。

数据库的备份和恢复

这个看看就好!!!

相关文章:

  • Ant(Ubuntu 18.04.6 LTS)安装笔记
  • 「Mac畅玩AIGC与多模态03」部署篇02 - 在 Mac 上部署 Dify
  • Pydantic:校验器(@validator)、模型嵌套、模型继承
  • 使用cesium设置第一视角
  • openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)
  • ubuntu 安装ollama后,如何让外网访问?
  • 基于QT(C++)实现(GUI)旅行查询与模拟系统
  • 展销编辑器在未来的发展前景​
  • python 取出字串中的所有词
  • C++:迭代器失效问题
  • 东田数码科技前端面经
  • 利用 Python 爬虫按关键字搜索 1688 商品详情:实战指南
  • (leetcode)力扣100 1.两数之和(两种方法:O(nlogn)/O(n))
  • Go 语言中的 `select` 语句详解
  • 30、不是说字符串是不可变的吗,string s=“abc“;s=“123“不就是变了吗?
  • 【C++】C++11新特性(一)
  • nextjs整合快速整合市面上各种AI进行prompt连调测试
  • 【Java二分查找】
  • Linux(Centos版本)中安装Docker
  • 在CentOS 8上在线安装Docker
  • 脱发后怎么把头发养回来?脱发自救指南来了
  • 迟来的忍者与武士:从《刺客信条:影》论多元话语的争议
  • 新华时评·首季中国经济观察丨用好用足更加积极的财政政策
  • 广州多条BRT相关线路将停运,全市BRT客运量较高峰时大幅下降
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩
  • 对排出黑烟车辆出具合格报告,广州南沙一检测公司被罚十万元