MySQL数据库——表操作
I、表操作
一、创建表
基本语法如下:
1 2 3 4 5 6 7 8 | create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8; 下面这两个变量是: ENGINE :存储引擎 charset:字符集 |
1、是否可空,null表示空,非字符串
1 2 | not null - 不可空 null - 可空 |
2、默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
1 2 | create table tb1( nid int not null defalut 2 ,<br> num int not nul<br>) |
3、自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列
1 2 3 4 5 6 7 8 9 10 | create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null auto_increment, num int null , index(nid) ) |
注意:
(1)对于自增列,必须是索引(含主键)
(2)对于自增可以设置步长和起始值
1 2 3 4 5 6 7 | show session variables like 'auto_inc%' ; set session auto_increment_increment= 2 ; set session auto_increment_offset= 10 ; shwo global variables like 'auto_inc%' ; set global auto_increment_increment= 2 ; set global auto_increment_offset= 10 ; |
4、主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
1 2 3 4 5 6 7 8 9 10 | create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null , num int not null , primary key(nid,num) ) |
5、外键,一个特殊的索引,只能是指定内容
1 2 3 4 5 6 7 8 9 10 11 | creat table color( nid int not null primary key, name char ( 16 ) not null ) create table fruit( nid int not null primary key, smt char ( 32 ) null , color_id int not null , constraint fk_cc foreign key (color_id) references color(nid) ) |
二、删除表
1 | drop table 表名 |
三、清空表
表还存在,表内容清空
1 2 | delete from 表名 速度慢,能回滚。 truncate table 表名 速度快,不能回滚。 |
四、修改表
1、添加列
(1)添加新的一列,默认添加到最后面
1 | alter table 表名 add 列名 类型 |
(2)添加新的一列,位于指定列的后面/前面
1 | alter table 表名 add 列名 类型 after/before 指定列列名; |
(3)添加新的一列,位于第一列
1 | alter table 表名 add 列名 类型 first; |
2、删除列
1 | alter table 表名 drop column 列名 |
3、修改列
(1)只修改列的类型
1 | alter table 表名 modify column 列名 类型; -- 类型 |
(2)既修改列名也修改类型
alter table 表名 change 原列名 新列名 类型; -- 列名,类型
4、添加主键
1 | alter table 表名 add primary key(列名); |
5、删除主键
1 2 | alter table 表名 drop primary key; alter table 表名 modify 列名 int , drop primary key; |
6、添加外键
1 | alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); |
7、删除主键
1 | alter table 表名 drop foreign key 外键名称 |
8、修改默认值
1 | ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000 ; |
9、删除默认值
1 | ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; |
实例:
1 2 3 | show tables; #展示当前库下的所有表名 SELECT * from user_info; #查看表的信息 alter table user_info add class int ( 4 ) #为表添加一新的一列,默认添加到最后面。 |
10、修改表名字,rename法
1 2 | --语法: rename table 原表名 to 新表名;--更改user_infor表为user。 mysql> rename table user_info to user; |
II、表内容操作
一、增
语法:insert into 表 (列名,列名...) values (值,值,值...)
1、插入单条数据
1 | insert into 表 (列名,列名...) values (值,值,值...) |
2、插入多条数据
1 | insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) |
3、插入另一条语句的查询结果
1 | insert into 表 (列名,列名...) select 列名,列名... from 表 |
二、删
语法:delete from 表
1 2 | delete from 表; delete from 表 where id= 1 ; |
三、改
语法:update 表 set 列名 = '更改数值' where id>1 (where后携带条件)
1 | update 表 set name = 'nick' where id> 1 |
四、查
语法:select * from 表
1 2 3 | select * from 表 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1 |
注:as用做别名,可省略
五、条件
语法:select * from 表 where id > 1
1、多个条件(and)
1 | select * from 表 where id > 1 and name != 'nick' and num = 12 ; # 多个条件 |
2、id在5到16之间(between ... and)
1 | select * from 表 where id between 5 and 16 ; # id在 5 到 16 之间 |
3、id在元祖中(in)
1 | select * from 表 where id in ( 11 , 22 , 33 ); # id在元祖中 |
4、id不在元祖中(not in)
1 | select * from 表 where id not in ( 11 , 22 , 33 ); # id不在元祖中 |
5、id在查询结果中
1 | select * from 表 where id in (select nid from 表); # id在查询结果中 |
六、通配符
语法:select * from 表 where name like '_n%'
1、ni开头的所有(多个字符串)
1 | select * from 表 where name like 'ni%' # ni开头的所有(多个字符串) |
2、s开头的所有(一个字符)
1 | select * from 表 where name like 's_' |
七、限制
语法:select * from 表 limit 9,5;
1、前n行
1 | select * from 表 limit 5 ; # 前 5 行 |
2、从第n行开始的m行
1 | select * from 表 limit 9 , 5 ; # 从第 9 行开始的 5 行select * from 表 limit 5 offset 9 # 从第 9 行开始的 5 行 |
八、排序
语法:select * from 表 order by 列1 desc,列2 asc
注:asc(升序)、desc(降序),默认升序
1、根据 “列” 从小到大排列
1 | select * from 表 order by 列 asc |
2、根据 “列” 从大到小排列
1 | select * from 表 order by 列 desc |
3、根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
1 | select * from 表 order by 列 1 desc,列 2 asc |
九、分组
语法:select num from 表 group by num
1 2 3 4 5 | select num from 表 group by num # 根据num分组 select num,nid from 表 group by num,nid # 根据num和nid分组 select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid # 内置函数 select num from 表 group by num having max(id) > 10 # 前面计算的结果交由后面处理 |
注:
(1)group by必须在where之后,order by之前
十、连表
语法:inner join . on(内连接)
、left join . on(左连接)
、right join . on(右连接)
1、无对应关系则不显示(where)
1 2 3 | select A.num, A.name, B.name from A,B Where A.nid = B.nid |
2、无对应关系则不显示(inner join ... on)
1 2 3 | select A.num, A.name, B.name from A inner join B on A.nid = B.nid |
3、A表所有显示,如果B中无对应关系,则值为null(left join ... on)
1 2 3 | select A.num, A.name, B.name from A left join B on A.nid = B.nid |
4、B表中所有显示,如果B中无对应关系,则值为null(right join ... on)
1 2 3 | select A.num, A.name, B.name from A right join B on A.nid = B.nid |
十一、组合
语法:union
、union all
1、组合,自动处理重合
1 2 3 4 5 | select nickname from A union select name from B |
2、组合,不处理重合
1 2 3 4 5 | select nickname from A union all select name from B |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决