第3章 数据定义语言DDL

本文介绍了MySQL中的DDL操作,包括数据类型如varchar、char、int等,表的创建、删除(包括drop和truncate的区别),以及如何使用ALTER语句修改表结构,如添加、删除列、索引等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


DDL:数据定义语言:create(增)、drop(删)、alter(改)、truncate。主要是对表结构进行操作。

3.1 MySQL的数据类型

类型作用
varchar可变长的字符串类型,根据实际长度东忒分配空间。优点:节省空间。缺点:需要动态分配空间,速度慢。最长255
char定长字符串类型, 不管实际的数据长度是多少,分配固定长度的空间去存储数据。优缺点与上面相反。最长255
int整型。等同于java的int。最长11
bigint长整型。等同于java中的long。
float单精度浮点型
double双精度浮点型
date短日期类型
datetime长日期类型
clobCharacter Large OBject:CLOB。字符大对象, 最多存储4G的字符串。 超过255个字符的采用CLOB存储。 比如:存储一篇文章,一篇说明。
blobBinary Large OBject; 二进制大对象, 用来存储图片、声音、视频等流媒体数据。 BLOB类型字段上插入数据时,需要使用IO流。

varchar和char我们应该怎么选择?
性别字段选:性别是固定长度字符串,选择char。
姓名字段选:每个人名字长度不同,选择varchar。

例如:t_movie 电影表,存储电影信息

编号			   名字			故事情节			  上映日期			   时长			  海报				类型
no(bigint)	name(varchar)	history(clob)		playtime(date)		time(double)	image(blob)			type(char)
------------------------------------------------------------------------------------------------------------------
10000		   哪吒		    ..........			  2019-10-11		   2.5			   ....				 '1'
10001		   悟空传         ..........	         2019-11-11			  1.5			   ....				  '2'
....

3.2 表的创建:create

建表的语法格式create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);

create table 表名(
	字段名1 数据类型, 
	字段名2 数据类型, 
	字段名3 数据类型
);

表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。
字段名:见名知意。
表名和字段名都属于标识符。

3.3 表的删除:drop

drop table t_student;             //注意:当这张表不存在的时候会报错!
drop table if exists t_student;   //两句都可以,推荐这句

实例:创建一个学生表,学号、姓名、年龄、性别、邮箱地址

mysql> create table t_student(
    -> no int,
    -> name varchar(32),
    -> sex char(1),
    -> age int(3),
    -> email varchar(255)
    -> );
Query OK, 0 rows affected (0.01 sec)

3.4 快速创建表

了解内容, 将查询结果当做一张表新建,实现表集数据的快速复制

mysql> create table emp2 as select * from emp;  //两张表的数据一模一样
Query OK, 14 rows affected (0.01 sec)
Records: 14  Duplicates: 0  Warnings: 0
mysql> create table mytable as select empno,ename from emp where job='MANAGER';
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from mytable;
+-------+-------+
| empno | ename |
+-------+-------+
|  7566 | JONES |
|  7698 | BLAKE |
|  7782 | CLARK |
+-------+-------+
3 rows in set (0.00 sec)

3.5 快速删除表中的数据:truncate

delete from dept_bak;      //这种删除数据的方式比较慢。

delete原理: 表中数据被删除了,但是数据在硬盘上的真实存储空间不会被释放!
缺点:删除效率比较低; 优点:支持回滚(即可恢复)

回滚实例

mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from dept_bak;
Query OK, 4 rows affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

truncate原理:表被一次截断,物理删除。
缺点:不支持回滚。 优点:效率高,快速。

语法:truncate table dept_bak;

mysql> truncate table dept_bak;          //删数据,不是删表
Query OK, 0 rows affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dept_bak;          //回滚也没用
Empty set (0.00 sec)

truncate删除速度很快,但是数据不可恢复。

注意:truncate是删除表中的数据,表还在。删除表用drop

3.6 修改表结构:alter

在MySQL中,ALTER语句用于修改数据库中的表结构。通过使用ALTER语句,您可以执行多种操作,包括添加、删除或修改表中的列,更改现有列的数据类型,添加或删除索引等。

添加列:

语法:ALTER TABLE table_name ADD column_name datatype;
示例:ALTER TABLE employees ADD email VARCHAR(255);

删除列:

语法:ALTER TABLE table_name DROP COLUMN column_name;
示例:ALTER TABLE employees DROP COLUMN age;

修改列:

语法:ALTER TABLE table_name MODIFY COLUMN column_name datatype;
示例:ALTER TABLE employees MODIFY COLUMN salary DECIMAL(10, 2);

重命名列:

语法:ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;
示例:ALTER TABLE employees CHANGE name full_name VARCHAR(255);

添加主键:

语法:ALTER TABLE table_name ADD PRIMARY KEY (column_name);
示例:ALTER TABLE employees ADD PRIMARY KEY (id);

删除主键:

语法:ALTER TABLE table_name DROP PRIMARY KEY;
示例:ALTER TABLE employees DROP PRIMARY KEY;

添加唯一索引:

语法:ALTER TABLE table_name ADD UNIQUE (column_name);
示例:ALTER TABLE employees ADD UNIQUE (email);

删除唯一索引:

语法:ALTER TABLE table_name DROP INDEX column_name;
示例:ALTER TABLE employees DROP INDEX email;

添加索引:

语法:ALTER TABLE table_name ADD INDEX index_name (column_name);
示例:ALTER TABLE employees ADD INDEX idx_lastname (last_name);

删除索引:

语法:ALTER TABLE table_name DROP INDEX index_name;
示例:ALTER TABLE employees DROP INDEX idx_lastname;

请注意,使用ALTER语句时需要谨慎,特别是在修改大型表时,因为这可能会消耗大量的时间和资源。在对生产环境中的表进行修改之前,建议先备份数据并在测试环境中验证更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zdb呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值