MySQL数据表的创建、修改、删除及基本操作
1.在 mysql中,可以使用 CREATE TABLE 语句创建表。其语法格式为:转自:https://www.cnblogs.com/bigbigbigo/p/10917429.html
/*建表的语法*/ create table [if not exists] Table_name( 字段一 数据类型 [字段属性|约束] [索引] [注释] , 字段二 数据类型 [字段属性|约束] [索引] [注释] , ......... )[表类型][表字符集][注释]
例1:在students数据中创建一个名为student的表,表结构如下所示:
字段名称 | 数据类型 | 备注 |
stuID | int(5) | 学号,不为空,主键 |
stuName | varchar(50) | 姓名,不为空 |
stuSex | char(10) | 性别 |
stuAge | smallint | 年龄 |
use students; create table student ( stuID int(5) not null primary key, stuName varchar(50) not null, stuSex CHAR(10), stuAge smallint )
运行:
易错点:
(1)中文的逗号和括号错误,命令中全部为英文状态下的逗号,括号;
(2)最后一个字段不适用逗号,比如上面的stuAge一行;
(3)使用use students,但没有创建数据库;
(4)数据类型写错,比如varchar写成varcher;
(5)重复多次运行,导致提示表已经存在的错误。
数据类型详细介绍可参考以下网址:
MySQL数据类型简介 http://c.biancheng.net/view/2421.html
MySQL中的约束概述 http://c.biancheng.net/view/7576.html
约束名称 | 概述 |
not null | 非空 |
primary key | 主键(唯一且非空) |
unique key | 唯一键 |
default | 默认值 |
其他关键字说明:auto_increment 自增(此列必须是:primary key或者unique key),unsigned 非负数,comment 注释。
例2:在students数据中创建一个名为courses的表,表结构如下所示:
字段名称 | 数据类型 | 备注 |
couID | int | 课程号,不为空,主键,自动增长 |
couName | varchar(50) | 课程名称,不为空,默认值“大学英语” |
couHours | smallint | 课时数,非负数 |
couCredit | tinyint | 学分,不为空,默认值为2 |
CREATE TABLE if not EXISTS courses( couID int not null primary key auto_increment COMMENT '学号', couName varchar(50) not null DEFAULT('大学英语'), couHours smallint UNSIGNED, couCredit tinyint not null DEFAULT(2) COMMENT '学分' )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci/*默认字符集和校验规则可不写*/
注意:1.创建表语句最后一个括号要加上分号;2.default约束有的版本不能加括号,不然会报错,可写为DEFAULT '大学英语' 的形式,中间隔一个空格。
例3:在students数据中创建一个名为stu_cou的选课表,表结构如下所示:
字段名称 | 数据类型 | 备注 |
ID | int | 主键,不为空,自动增长 |
stuID | int(5) | 学号,不为空 |
couID | int | 课程号,不为空 |
time | DATETIME | 选课时间,默认值使用函数now()获取当前时间 |
CREATE TABLE if not EXISTS stu_cou( ID int not null primary key auto_increment, stuID int(5) not null COMMENT '学号', couID int not null COMMENT '课程编号', time datetime not null DEFAULT(now()) )
注意:在有些MySQL的版本下,设置字段的默认时间时,字段类型要设置为timestamp,如下所示:
couTime timestamp DEFAULT now()
2.在 mysql中,可以使用ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。其语法格式为:转自:http://c.biancheng.net/view/7583.html
ALTER TABLE <表名> [修改选项]
修改选项的语法格式如下:
{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名>
| MODIFY COLUMN <列名> <类型> first
| MODIFY COLUMN <列名> <类型> after <列名>
}
也就是
(1)增加字段 (2)更改列名 (3)修改字段默认值 (4)修改字段数据类型 (5)删除字段(列名) (6)重命名表名 (7)修改表的字符集 (8)修改表的校验规则 (9)将字段顺序改为第一位 (10)将字段顺序改为另一个字段之后
例4.(1)修改students数据库中的student表,增加列名stuColleage,数据类型为varchar(50);
ALTER TABLE students add COLUMN stuColleage varchar(50);
(2)修改students数据库中的student表,将列名stuName更改为stuTitle,同时,数据类型改为varchar(30);
alter TABLE students CHANGE COLUMN stuName stuTitle varchar(30);
(3)修改students数据库中的student表,将stuSex列设置默认值为"男";
alter TABLE students ALTER COLUMN stuSex set DEFAULT('男');
(4)修改students数据库中的student表,修改stuSex列的数据类型为varchar(20);
alter TABLE students modify COLUMN stuSex varchar(20);
(5)修改students数据库中的student表,删除stuColleage列;
alter TABLE students drop COLUMN stuColleage;
(6)修改students数据库中的student表,更改字符集为utf8mb4,校验规则为utf8mb4_0900_ai_ci;
alter TABLE students CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci;
使用show create table <表名>命令查看创建表的sql语句。
(7)修改students数据库中的student表,重命名表名为stuInfo;
alter TABLE students rename to stuInfo;
(8)修改students数据库中的stuInfo表,将stuTitle列放在第一列;
alter TABLE stuInfo modify COLUMN stuTitle varchar(30) first;
(9)修改students数据库中的stuInfo表,将stuTitle列放在stuID列后面;
alter TABLE stuInfo modify COLUMN stuTitle varchar(30) after stuID;
Tip:可使用 DESC <表名>;命令查看修改后的表结构。
3.1.在MySQL中,使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:转自:http://c.biancheng.net/view/2439.html
DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]
对语法格式的说明如下:
表名1, 表名2, 表名3 ...
表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。- IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。
两点注意:
- 用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。
- 表被删除时,用户在该表上的权限不会自动删除。
例5:删除students数据库中的courses表。
drop table if EXISTS courses;
3.2. 删除被其他表关联的主表
首先要解除关联表,只要删除表的外键约束即可通过drop table if exists 表名 进行删除。
语法结构:alter table 表名 drop foreign key 外键约束名;
drop table if exists 表名1,表名2,…表名n;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求