- DDL:数据定义语言
- create
- alter
- drop
- rename
- truncate
创建和管理数据库
创建数据库
- 方式1:
- 方式2:显式的指明了要创建的数据库的字符集 ```sql CREATE DATABASE mytest2 CHARACTER SET ‘gbk’;
//查看创建数据库的结构 SHOW CREATE DATABASE mytest2
- 方式3:如果要创建的数据库已经存在,则创建不成功,但不会报错```sqlCREATE DATABASE IF NOT EXIST mytest2 CHARACTER SET 'uft8'
使用数据库
查看当前连接中的数据库有哪些
SHOW DATABASES;
切换数据库
USE mytest2
查看当前数据库中保存的数据表
SHOW TABLES;
查看当前使用的数据库
SELECT DATABASE() FROM DUAL;
查看指定数据库下保存的数据表
SHOW TABLES FROM mysql;
修改数据库
更改数据库字符集 ```sql SHOW CREATE DATABASE mytest2
ALTER DATABASE mytest2 CHARCTER SET ‘utf8’
<a name="PxNvE"></a>## 删除数据库- 方式1:```sqlDROP DATABASE mytest1
方式2:推荐,如果要删除的数据库存在,则删除成功。如果不存在,则结束,不会报错
DROP DATABASE IF EXISTS mytest1
创建和管理数据表
创建数据表
USE atguigudb;
方式1:需要用户具备创建表的权限 ```sql CREATE TABLE IF NOT EXISTS myemp1( id INT, emp_name VARCHAR(15), #使用varchar来定义字符串,必须在使用 hire_date DATE #varchar时指明其长度 );
查看表结构
DESC myemp1
如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集
查看创建表的语句结构
SHOW CREATE TABLE myemp1
- 方式2:基于现有的表,同时导入数据```sqlCREATE TABLE myemp2ASSELECT employee_id,last_name,salaryFROM employees;DESC myemp2;
- 说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称
- 说明2:此时的查询语句可以结构比较丰富,使用各种select
CREATE TABLE myemp3ASSELECT e.employee_id emp_id,e.last_name lname,d.department_nameFROM employees e JOIN departments dON e.department_id = d.department_id;
- 练习:创建一个表employees_blank,实现对employees表的复制,不包括表数据
CREATE TABLE employees_blankASSELECT *FROM employeesWHERE 1 = 2
修改表 — ALTER TABLE
DESC myemp1
添加一个字段
ALTER TABLE myemp1 # 默认添加到表中的最后一个字段的位置ADD salary DOUBLE(10.2) # 10位,小数点后有2位
ALTER TABLE myemp1ADD phone_number VARCHAR(20) FIRST;ALTER TABLE myemp1ADD email VARCHAR(45) AFTER emp_name; //添加到emp_name后面
修改一个字段:
- 修改数据类型、长度、默认值等
ALTER TABLE myemp1ADD emp_name VARCHAR(25)ALTER TABLE myemp1ADD emp_name VARCHAR(25) DEFAULT 'aaa' # 设置默认值为aaa
重命名一个字段
ALTER TABLE myemp1CHANGE salary monthly_salary DOUBLE(10,2)# 也可以在改名的同时改变其字符串长度ALTER TABLE myemp1CHANGE email my_email VARCHAR(50)
删除一个字段
ALTER TABLE myemp1DROP COLUMN email
重命名表-RENAME
RENAME TABLE myemp1TO myemp11
删除表-DROP
不光将表结构删除掉,同时表中的数据也删除了,释放表空间
DROP TABLE IF EXISTS myemp2
清空表-TRUNCATE
清空表中的所有数据,但是表结构保留
TRUNCATE TABLE employees_copy
DCL中 COMMIT和ROLLBACK
- COMMIT:提交数据。一旦执行COMMIT,则数据就被永久保存在了数据库中,意味着数据不可以回滚
- ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近一次的COMMIT之后。
对比TRUNCATE TABLE 和 DELETE FROM
- 相同点:都可以实现对表中所有数据的删除,同时保留表结构
- 不同点:
- TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的
- DELETE FROM:一旦执行此操作,表数据全部清除。(不带WHERE)。同时,数据是可以实现回滚的
DCL和DML的说明
- DDL的操作一旦执行,就不可以回滚(因为在执行完DDL操作之后,一定会执行一次COMMIT。而COMMIT操作不受 SET autocommit = FALSE影响)
- DML的操作默认情况,一旦执行,也是不可回滚的。但是如果在执行DML之前,执行了 “SET autocommit = FALSE”,则执行的DML操作就可以实现回滚
- 演示:DELETE FROM ```sql SELECT * FROM myemp3
SET autocommit = FALSE;
DELETE FROM myemp3
SELECT * FROM myemp3
ROLLBACK;
SELECT * FROM myemp3
<a name="BEilD"></a># 课后练习1. 创建数据库test01_office,指明字符集为utf8,并在此数据库下执行操作```sqlCREATE DATABASE IF NOT EXISTS test01_office CHARACTER SET 'uft8'USE test01_office
创建表dept01
CREATE TABLE dept01(id INT(7)`NAME` VARCAHR(25));
将表departments表中的数据插入新表dept02中
