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语句时需要谨慎,特别是在修改大型表时,因为这可能会消耗大量的时间和资源。在对生产环境中的表进行修改之前,建议先备份数据并在测试环境中验证更改。