目录
练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
🐟 对比TRUNCATE TABLE和DELECT FROM
一、基础知识
1.一条数据存储的过程
2.标识符的命名规则
- 数据库名、表名不得超过30个字符,变量名限制为29个
- 必须只能包含 A–Z, a–z, 0–9, _共63个字符
- 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
- 保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了
3.MySAQL中的数据类型
常用的几类类型
二、创建和管理数据库
1.如何创建数据库
方式一:创建数据库
CREATE DATABASE mytest1;
创建的此数据库使用的是默认的字符集
方式二:创建数据库并指定字符集
CREATE DATABASE mytest2 CHARACTER SET 'gbk';
显式的指明了要创建的数据库的字符集
方式三:判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
SHOW CREATE DATABASE mytest3;
如果要创建的数据库已经存在,则创建不成功,但不会报错
2.管理数据库
①查看当前连接中的数据库都有哪些
SHOW DATABASES;
② 切换数据库
USE + 需要使用的数据库
③查看当前数据库中保存的数据表
SHOW TABLES;
④查看当前使用的数据库
SELECT DATABASE();
⑤查看指定数据库下保存的数据表
SHOW TABLES FROM atguigudb;
⑥查看创建数据库的结构
SHOW CREATE DATABASE mytest1;
3.修改数据库
更改数据库字符集
ALTER DATABASE mytest2 CHARACTER SET 'utf8';
4.删除数据库
方式一
DROP DATABASE mytest1;
如果要删除的数据库存在,则删除成功。如果不存在,会报错
方式二 (推荐使用)
DROP DATABASE IF EXISTS mytest1;
如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错
三、创建数据表
方式一
CREATE TABLE IF NOT EXISTS myemp1(
id INT,
emp_name VARCHAR(15),
#使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度
hire_date DATE
);
#查看表的结构
DESC myemp1;
#查看创建表的语句结构
如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集
#查看表数据
SELECT * FROM myemp1;
方式二:基于现有的表创建新的表,同时导入数据
CREATE TABLE myemp2
AS
SELECT employee_id,last_name,salary
FROM employees;
1.查询语句中字段的别名,可以作为新创建的表的字段的名称
2.此时的查询语句可以结构比较丰富,使用前面章节讲过的各种SELECT
CREATE TABLE myemp3
AS
SELECT e.employee_id emp_id,e.last_name lname,d.department_name dept_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;
练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees
#WHERE department_id > 10000;
WHERE 1 = 2;#山无棱,天地合,乃敢与君绝
四、管理数据表
1.修改表 —— ALTER TABLE
①添加一个字段
#默认添加到表中的最后一个字段的位置
ALTER TABLE myemp1
ADD salary DOUBLE(10,2)#小数位2位,整数位8位,共10位
#添加到表中第一个位置
ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;
#添加到指定字段后
ALTER TABLE myemp1
ADD email VARCHAR(45) AFTER emp_name;
②修改一个字段:数据类型、长度、默认值
ALTER TABLE myemp1
MODIFY emp_name VARCHAR(25);
ALTER TABLE myemp1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
③重命名字段
ALTER TABLE myemp1
CHANGE salary monthly_salary DOUBLE(10,2);
ALTER TABLE myemp1
CHANGE email my_email VARCHAR(50);
#在改名称的同时可以修改长度
④删除一个字段
ALTER TABLE myemp1
DROP COLUMN my_email;
2.重命名表:RENAME
RENAME TABLE myemp1
TO myemp11;
3.删除表:DROP
DROP TABLE IF EXISTS myemp2;
4.清空表 :TRUNCATE & DELETE FROM
TRUNCATE TABLE employees_copy;
DELETE FROM employees_copy;
🐟 对比TRUNCATE TABLE和DELECT FROM
相同点:都可以实现对表中所有数据的删除,同时保存表结构
不同点:
TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的
DELECT FROM:一旦执行此操作,表数据可以全部清除,(不带WHERE),同时,数据可以实现回滚
5.DCL中的COMMIT和ROLLBACK的使用
①COMMIT:提交数据
一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚(撤销)
②ROLLBACK:回滚数据
一旦执行ROLLBACK,可以实现数据的回滚。回滚到最近的一次COMMIT之后
③DDL和DML的说明
Ⅰ.DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL失效(因为在执行完DDL操作之后,一定会执行一次COMMIT,而此COMMIT操作不受SET autocommit = FALSE的影响的)
Ⅱ.DML的操作默认情况下一旦执行,也是不可回滚的,但是,如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚了
拓展1:阿里巴巴《Java开发手册》之MySQL字段命名
拓展2:如何理解清空表、删除表等操作需谨慎?
1.表删除操作将把表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操时应当慎重。在删除表前,最好对表中的数据进行备份 ,这样当操作失误时可 以对数据进行恢复,以免造成无法挽回的后果。
2.同样的,在使用 ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份 ,因为数据库的改变是无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。