• DDL:数据定义语言
    • create
    • alter
    • drop
    • rename
    • truncate

创建和管理数据库

创建数据库

  • 方式1:
  • 方式2:显式的指明了要创建的数据库的字符集 ```sql CREATE DATABASE mytest2 CHARACTER SET ‘gbk’;

//查看创建数据库的结构 SHOW CREATE DATABASE mytest2

  1. - 方式3:如果要创建的数据库已经存在,则创建不成功,但不会报错
  2. ```sql
  3. CREATE DATABASE IF NOT EXIST mytest2 CHARACTER SET 'uft8'

使用数据库

  • 查看当前连接中的数据库有哪些

    1. SHOW DATABASES;
  • 切换数据库

    1. USE mytest2
  • 查看当前数据库中保存的数据表

    1. SHOW TABLES;
  • 查看当前使用的数据库

    1. SELECT DATABASE() FROM DUAL;
  • 查看指定数据库下保存的数据表

    1. SHOW TABLES FROM mysql;

    修改数据库

  • 更改数据库字符集 ```sql SHOW CREATE DATABASE mytest2

ALTER DATABASE mytest2 CHARCTER SET ‘utf8’

  1. <a name="PxNvE"></a>
  2. ## 删除数据库
  3. - 方式1:
  4. ```sql
  5. DROP DATABASE mytest1
  • 方式2:推荐,如果要删除的数据库存在,则删除成功。如果不存在,则结束,不会报错

    1. DROP DATABASE IF EXISTS mytest1

    创建和管理数据表

    创建数据表

    1. 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

  1. - 方式2:基于现有的表,同时导入数据
  2. ```sql
  3. CREATE TABLE myemp2
  4. AS
  5. SELECT employee_id,last_name,salary
  6. FROM employees;
  7. DESC myemp2;
  • 说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称
  • 说明2:此时的查询语句可以结构比较丰富,使用各种select
    1. CREATE TABLE myemp3
    2. AS
    3. SELECT e.employee_id emp_id,e.last_name lname,d.department_name
    4. FROM employees e JOIN departments d
    5. ON e.department_id = d.department_id;
  • 练习:创建一个表employees_blank,实现对employees表的复制,不包括表数据
    1. CREATE TABLE employees_blank
    2. AS
    3. SELECT *
    4. FROM employees
    5. WHERE 1 = 2

修改表 — ALTER TABLE

  1. DESC myemp1

添加一个字段

  1. ALTER TABLE myemp1 # 默认添加到表中的最后一个字段的位置
  2. ADD salary DOUBLE(10.2) # 10位,小数点后有2位
  1. ALTER TABLE myemp1
  2. ADD phone_number VARCHAR(20) FIRST;
  3. ALTER TABLE myemp1
  4. ADD email VARCHAR(45) AFTER emp_name; //添加到emp_name后面

修改一个字段:

  • 修改数据类型、长度、默认值等
  1. ALTER TABLE myemp1
  2. ADD emp_name VARCHAR(25)
  3. ALTER TABLE myemp1
  4. ADD emp_name VARCHAR(25) DEFAULT 'aaa' # 设置默认值为aaa

重命名一个字段

  1. ALTER TABLE myemp1
  2. CHANGE salary monthly_salary DOUBLE(10,2)
  3. # 也可以在改名的同时改变其字符串长度
  4. ALTER TABLE myemp1
  5. CHANGE email my_email VARCHAR(50)

删除一个字段

  1. ALTER TABLE myemp1
  2. DROP COLUMN email

重命名表-RENAME

  1. RENAME TABLE myemp1
  2. TO myemp11

删除表-DROP

  • 不光将表结构删除掉,同时表中的数据也删除了,释放表空间

    1. DROP TABLE IF EXISTS myemp2

    清空表-TRUNCATE

  • 清空表中的所有数据,但是表结构保留

    1. TRUNCATE TABLE employees_copy

DCL中 COMMIT和ROLLBACK

  • COMMIT:提交数据。一旦执行COMMIT,则数据就被永久保存在了数据库中,意味着数据不可以回滚
  • ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近一次的COMMIT之后。

对比TRUNCATE TABLE 和 DELETE FROM

  • 相同点:都可以实现对表中所有数据的删除,同时保留表结构
  • 不同点:
    • TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的
    • DELETE FROM:一旦执行此操作,表数据全部清除。(不带WHERE)。同时,数据是可以实现回滚的

DCL和DML的说明

  1. DDL的操作一旦执行,就不可以回滚(因为在执行完DDL操作之后,一定会执行一次COMMIT。而COMMIT操作不受 SET autocommit = FALSE影响)
  2. 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

  1. <a name="BEilD"></a>
  2. # 课后练习
  3. 1. 创建数据库test01_office,指明字符集为utf8,并在此数据库下执行操作
  4. ```sql
  5. CREATE DATABASE IF NOT EXISTS test01_office CHARACTER SET 'uft8'
  6. USE test01_office
  1. 创建表dept01

    1. CREATE TABLE dept01(
    2. id INT(7)
    3. `NAME` VARCAHR(25)
    4. );
  2. 将表departments表中的数据插入新表dept02中