MySQL数据表管理

1 .创建数据表

CREATE TABLE IF NOT EXISTS <表名> ( <字段名> <字段类型> 字段属性 ... 索引定义);

说明:

(1)CREATE TABLE用于创建表。表名不区分大小写,尽量避免使用SQL语言中的关键字,如DROP、ALTER、INSERT等。

(2)<表名>必须符合命名规则,若以"数据库名.表名"形式指定表名,表示要在指定数据库中创建表。在当前数据库中创建表时,可以省略"数据库名"。

(3)约束条件:用来指定字段的约束,有主键约束(PRIMARY KEY)、非空约束(NOT NULL)、唯一值约束(UNIQUE)、默认值约束(DEFAULT)、外键约束(FOREIGN KEY)和检查约束(CHECK,但目前MySQL只检查语法,并未真正支持)。

(4)其他选项包括:设置存储引擎、表的默认字符集、索引压缩选项、自动增长初始值和增长增量设置等。如ENGINE=InnoDB将该表的存储引擎设置为InnoDB;DEFAULT CHARSET=utf8该表的默认字符集设置为utf8。

CREATE TABLE IF NOT EXISTS student ( sno CHAR(6) PRIMARY KEY COMMENT '学生编号', sname VARCHAR(20) NOT NULL, dept VARCHAR(20), sex CHAR(1), birthday DATE, totalcredit DECIMAL(4,1) DEFAULT 0, remarks VARCHAR(100) );

CREATE TABLE course ( cno CHAR(3) PRIMARY KEY, cname VARCHAR(30) NOT NULL UNIQUE, term TINYINT, ctime TINYINT UNSIGNED , credit DECIMAL(3,1) ) ;

CREATE TABLE score ( score_id INT UNSIGNED AUTO_INCREMENT, sno CHAR(6), cno CHAR(3) , grade DECIMAL(4,1) CHECK(grade>=0), PRIMARY KEY(score_id), CONSTRAINT fk_score_sno FOREIGN KEY(sno) REFERENCES student(sno), CONSTRAINT fk_score_cno FOREIGN KEY(cno) REFERENCES course(cno) );

数据库中利用score创建一个名称为sc的数据表,保存成绩信息。

CREATE TABLE sc AS SELECT * FROM score;

注意:使用CREATE TABLE+子查询方式创建表,只复制表结构和内容,原表中的约束和索引通常不会被复制。

2.修改数据表名称

ALTER TABLE <原数据表名> RENAME TO\|AS <新数据表名>;

RENAME TABLE <原数据表名> TO <新数据表名>;

3. 修改数据表选项

ALTER TABLE <数据表名> <表选项> =<表选项>;

例: 修改数据表student的字符集为utf8

ALTER TABLE student CHARSET=utf8;

4. 修改表结构

4.1 新增字段

ALTER TABLE <数据表名> ADD COLUMN <字段名 类型> FIRST\|AFTER 字段名 ;

-- 修改数据表student增加1个新列nativeplace

ALTER TABLE student ADD COLUMN nativeplace VARCHAR(50);

-- 修改数据表student在性别(sex)增加1个新列nativeplace

ALTER TABLE student ADD nativeplace VARCHAR(50) AFTER sex;

4.2. 修改字段

(1)修改字段名

ALTER TABLE <数据表名> CHANGE <旧字段名> <新字段名 类型>

-- 修改数据表student将nativeplace 改名为native

ALTER TABLE student CHANGE nativeplace native VARCHAR(50);

(2)修改字段类型和位置

ALTER TABLE <数据表名> MODIFY <字段名 类型> FIRST\|AFTER 字段名2

-- 修改数据表student将nativeplace 类型改为VARCHAR(30)

ALTER TABLE student MODIFY nativeplace VARCHAR(30);

-- 修改数据表student将nativeplace 类型改为VARCHAR(20),并放在birthday之后

ALTER TABLE student MODIFY nativeplace VARCHAR(20) AFTER birthday;

4.3. 删除字段

ALTER TABLE <数据表名> DROP COLUMN <字段名> ;

-- 修改数据表student删除列nativeplace

ALTER TABLE student DROP nativeplace;

4.4. 添加和删除约束

ALTER TABLE <数据表名> ADD CONSTRAINT \<完整性约束名\> \<完整性约束\> DROP CONSTRAINT \<完整性约束名\>

-- 修改数据表score,在sno、cno两字段上添加唯一约束uk_sno_cno

ALTER TABLE score ADD CONSTRAINT uk_sno_cno UNIQUE(sno,cno);

4.5. 删除数据表

DROP TABLE <数据表名>;

相关推荐
广州灵眸科技有限公司6 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒8 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手8 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学9 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh11 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户713335851562411 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898612 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD12 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo12 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
用户713335851562412 小时前
MySQL - InnoDB 的 Buffer Pool
mysql