管理库

  1. CREATE DATABASE IF NOT EXISTS c_db CHARACTER SET 'gbk';
  2. 创建 数据库 如果相同的库名不存在的话 库名 设置字符集为 gbk
  3. # 查看数据库信息
  4. SHOW CREATE DATABASE c_db;
  5. # 使用指定数据库
  6. USE c_db;
  7. # 查看当前库中的所有表
  8. SHOW TABLES;
  9. # 查看指定库中的所有表
  10. SHOW TABLES FROM c_db;
  11. # 查看当前使用use 的库
  12. SELECT DATABASE();
  13. # 修改库字符集
  14. ALTER DATABASE c_db CHARACTER SET 'utf8mb4';
  15. # 删除库
  16. DROP DATABASE IF EXISTS tdt;

管理表

  1. # 先指定数据库
  2. USE atguigudb;
  3. # 在当前使用的库中创建表 创建表方式【1】
  4. CREATE TABLE IF NOT EXISTS c_tb
  5. (
  6. id INT COMMENT 'id',
  7. name VARCHAR(66) COMMENT '姓名',
  8. weight DECIMAL(6, 6) COMMENT '体重',
  9. create_date DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  10. ) COMMENT '测试表-创建表' CHARACTER SET 'utf8mb4';
  11. # 基础格式
  12. /*
  13. CREATE TABLE IF NOT EXISTS c_tb
  14. 创建 表 如果不存在相同表名 表名
  15. (
  16. id INT COMMENT 'id'
  17. 字段名 类型及长度 字段备注 。。。。 其他限定
  18. ) COMMENT '测试表-创建表' CHARACTER SET 'utf8mb4';
  19. 表备注 使用字符集
  20. */
  21. # 查看表
  22. DESC c_tb;
  23. # 基于表 创建表 并复制查询到的数据 可用别名 创建表方式【2】 但不能复制部分约束[外键]
  24. CREATE TABLE copy_c_tb
  25. SELECT id, name AS c_name
  26. FROM c_tb;
  27. ###### 修改
  28. # 加字段 AFTER 字段 将字段加到指定字段后面
  29. ALTER TABLE c_tb
  30. ADD create_user BIGINT(14) COMMENT '创建人' AFTER weight;
  31. # 加字段 加最前面 默认不写加最后面
  32. ALTER TABLE c_tb
  33. ADD c BIGINT FIRST;
  34. # 改字段
  35. ALTER TABLE c_tb
  36. MODIFY id BIGINT(14) COMMENT 'id' FIRST;
  37. # 删字段
  38. ALTER TABLE c_tb
  39. DROP COLUMN create_user;
  40. # 重命名字段 并可以修改其他内容
  41. ALTER TABLE c_tb
  42. CHANGE create_by create_by BIGINT(14) COMMENT '创建人';
  43. # 重命名表
  44. RENAME TABLE c_db2 TO c_tb;
  45. # 重命名表2
  46. ALTER TABLE c_tb RENAME c_db2;
  47. # 删表
  48. DROP TABLE IF EXISTS c_tb;
  49. # 清空表数据
  50. TRUNCATE TABLE atguigudb.c_tb;

提交 和 回滚

提交 COMMIT 提交后数据写入到库中 不可回滚

回滚 ROLLBACK 回滚到上一个提交节点COMMIT 不一定成功

TRUNCATE TABLE 和 delete from 都可以删除数据
TRUNCATE TABLE 不能回滚
delete from 可以回滚

DCL DML

DCL 一旦执行 不可回滚 set AUTOCOMMIT = FALSE; 无用 必定自动提交
DML 默认不可回滚 但如果再执行前 开启了 set AUTOCOMMIT = FALSE; 之后 若 不执行COMMIT 则可回滚

示例:

  1. # 关闭自动提交
  2. SET AUTOCOMMIT = FALSE;
  3. INSERT INTO atguigudb.c_tb(id, name, weight, create_by)
  4. VALUES (1, 'xxx', 2.2, 1);
  5. # 添加后查询
  6. SELECT *
  7. FROM atguigudb.c_tb;
  8. # 回滚
  9. ROLLBACK;
  10. # 回滚后查询
  11. SELECT *
  12. FROM atguigudb.c_tb;

了解: MySQL 8 之后出现了 ddl的原子操作
例如
在 8之前 使用
DROP TABLE a,b,c; 删除多张表时 a删除成功 b删除成功 c失败 那么 即使c删除失败 a,b也被删除了
但在 8后 删除多张表的操作具有原子性 成功则全部成功 失败则全部回滚

数据管理

DML 可开关自动提交设置

  1. # 增加【1】
  2. INSERT INTO atguigudb.c_tb
  3. VALUES (1, 'andm', 3.6, 1, '2020-10-10');
  4. # 增加【2】
  5. INSERT INTO atguigudb.c_tb (id, weight, create_by, create_date, name)
  6. VALUES (4, 4.63, 14, '2021-10-14', '4anxdm'),
  7. (3, 6.63, 16, '2021-10-11', 'anxdmxx');
  8. # 不建议使用的增加【2.2】
  9. INSERT INTO atguigudb.c_tb (id, weight, create_by, create_date, name)
  10. SELECT 4, 4.63, 14, '2021-10-14', '4anxdm'
  11. UNION ALL
  12. SELECT 3, 6.63, 16, '2021-10-11', 'anxdmxx';
  13. # 增加【3】 需保持数据长度是 查询表的字段长度 < 目标表的字段长度 否则有可能添加失败
  14. INSERT INTO c_tb (id, name, weight, create_by)
  15. SELECT department_id, last_name, salary, manager_id
  16. FROM employees
  17. WHERE department_id > 90;
  18. # 查看
  19. SELECT *
  20. FROM atguigudb.c_tb;
  21. # 修改
  22. UPDATE atguigudb.c_tb
  23. SET atguigudb.c_tb.weight = 36.5,
  24. atguigudb.c_tb.name = CONCAT(atguigudb.c_tb.name, ' _copy')
  25. WHERE id > 90;
  26. # 同时修改相关表数据
  27. UPDATE user_info
  28. left join dept_info ON user_info.dept_id = dept_info.dept_id
  29. SET user_info.dept_id = 16,
  30. dept_info.dept_id=16
  31. WHERE
  32. dept_info.dept_id = 1
  33. ;
  34. # 删除
  35. DELETE
  36. FROM atguigudb.c_tb
  37. WHERE id = 110
  38. AND atguigudb.c_tb.name LIKE '%Gie%';
  39. # 同时删除 两个相关表中的数据
  40. DELETE j, t
  41. FROM t_jsl AS j
  42. INNER JOIN atguigudb.c_tb t ON t.id = j.a
  43. WHERE t.id = 1
  44. ;

特殊 了解

MySQL8 新特性 计算列 例如 c列字段 由 a列和b列经过计算得来的

  1. CREATE TABLE t_jsl
  2. (
  3. a INT,
  4. b INT,
  5. c INT GENERATED ALWAYS AS (a * b) VIRTUAL
  6. # 创建字段c 类型INT 是计算列 并且是由 a列和b列做乘法得到的
  7. );
  8. # 添加a b 值时将自动计算 c 值
  9. INSERT INTO t_jsl(a, b)
  10. VALUES (1, 2),
  11. (2, 3),
  12. (3, 4),
  13. (4, 5),
  14. (5, 6),
  15. (6, 7),
  16. (7, 8),
  17. (8, 9);
  18. # 查询
  19. SELECT *
  20. FROM t_jsl;