DDL:数据定义语言:create(增)、drop(删)、alter(改)、truncate。主要是对表结构进行操作。
3.1 MySQL的数据类型
类型 | 作用 |
---|---|
varchar | 可变长的字符串类型,根据实际长度东忒分配空间。优点:节省空间。缺点:需要动态分配空间,速度慢。最长255 |
char | 定长字符串类型, 不管实际的数据长度是多少,分配固定长度的空间去存储数据。优缺点与上面相反。最长255 |
int | 整型。等同于java的int。最长11 |
bigint | 长整型。等同于java中的long。 |
float | 单精度浮点型 |
double | 双精度浮点型 |
date | 短日期类型 |
datetime | 长日期类型 |
clob | Character Large OBject:CLOB。字符大对象, 最多存储4G的字符串。 超过255个字符的采用CLOB存储。 比如:存储一篇文章,一篇说明。 |
blob | Binary 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语句时需要谨慎,特别是在修改大型表时,因为这可能会消耗大量的时间和资源。在对生产环境中的表进行修改之前,建议先备份数据并在测试环境中验证更改。