创建数据库

  • 创建数据库的几种方法
CREATE DATABASE 数据库名;

# 创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;

# 判断数据库是否已经存在,不存在则创建数据库( 推荐)
CREATE DATABASE IF NOT EXISTS 数据库名;
  • 注意事项: DATABASE 不能改名.一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的

使用数据库,常见的几个命令

# 查看当前所有的数据库
SHOW DATABASES; #有一个S,代表多个数据库

# 查看当前正在使用的数据库
SELECT DATABASE(); #使用的一个 mysql 中的全局函数

# 查看指定库下所有的表
SHOW TABLES FROM 数据库名;

# 查看数据库的创建信息
SHOW CREATE DATABASE 数据库名;
# 或者: "\g"等同于';','\G'在'\g'的基础上,多了'垂直展示'功能而已
SHOW CREATE DATABASE 数据库名\G

# 使用/切换数据库
USE 数据库名;

修改数据库

# 更改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等

# 删除指定的数据库
DROP DATABASE 数据库名;

# 删除指定的数据库( 推荐)
DROP DATABASE IF EXISTS 数据库名;

创建表

  • 语法格式
CREATE TABLE [IF NOT EXISTS] 表名(
    字段1, 数据类型 [约束条件] [默认值],
    字段2, 数据类型 [约束条件] [默认值],
    字段3, 数据类型 [约束条件] [默认值],
    ……
    [表约束条件]
);
-- 创建表
CREATE TABLE emp (
    -- int类型
    emp_id INT,
    -- 最多保存20个中英文字符
    emp_name VARCHAR(20),
    -- 总位数不超过15位
    salary DOUBLE,
    -- 日期类型
    birthday DATE
);

......

CREATE TABLE dept(
    -- int类型,自增
    deptno INT(2) AUTO_INCREMENT,
    dname VARCHAR(14),
    loc VARCHAR(13),
    -- 主键
    PRIMARY KEY (deptno)
);
  • 使用子查询返回的数据,来创建表,语法格式
CREATE TABLE table_name [(column,column...)] as subquery;
CREATE TABLE emp1 AS SELECT * FROM employees;

CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 创建的emp2是空表

CREATE TABLE dept80
AS
SELECT employee_id, last_name, salary*12 ANNSAL, hire_date
FROM employees
WHERE department_id = 80;

查看数据表结构,以及查看数据表如何创建

# 查看结构
desc table_name

# 查看表如何创建
SHOW CREATE TABLE table_name

修改表

  • 实质就是对'列'的,增/删/改 操作
## 追加一个列
# ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;
ALTER TABLE dept80
ADD job_id varchar(15);

## 修改一个列
# ALTER TABLE 表名 MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名2】;
ALTER TABLE dept80
MODIFY last_name VARCHAR(30);
# 或者
ALTER TABLE dept80
MODIFY salary double(9,2) default 1000;

## 重命名一个列
# ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;
ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);

## 删除一个列
# ALTER TABLE 表名 DROP 【COLUMN】字段名

删除表

- 在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除

- 数据和结构都被删除

- 所有正在运行的相关事务被提交

- 所有相关索引被删除
  • 语法格式
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
  • 举例
DROP TABLE dept80; # DROP TABLE 语句不能回滚

清空表

  • TRUNCATE TABLE语句:

    • 删除表中所有的数据

    • 释放表的存储空间

    • TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚

TRUNCATE TABLE detail_dept;


DELETE FROM emp2;
#TRUNCATE TABLE emp2;
SELECT * FROM emp2;
ROLLBACK;
SELECT * FROM emp2;

往表中插入数据

  • 一次只能向表中插入一条数据,语法格式
INSERT INTO 表名
VALUES (value1,value2,....);
INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);

INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
  • 注意事项: 值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同

  • 插入的时候,加入'列名'demo演示

INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');
  • 同时插入多条记录,语法格式
INSERT INTO table_name
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
# 或者
INSERT INTO table_name(column1 [, column2, …, columnn])
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
mysql> INSERT INTO emp(emp_id,emp_name)
-> VALUES (1001,'shkstart'),
-> (1002,'atguigu'),
-> (1003,'Tom');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
  • INSERT 配合 子查询使用
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
  • 注意事项

    • 不必书写 VALUES 子句

    • 子查询中的值列表应与 INSERT 子句中的列名对应

INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;


INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

更新数据

  • 使用 WHERE 子句指定需要更新的数据
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
  • 如果省略 WHERE 子句,则表中的所有数据都将被更新
UPDATE copy_emp
SET department_id = 110;
  • 注意事项

    • 可以一次更新多条数据。

    • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;

删除数据

DELETE FROM table_name [WHERE <condition>];
# 使用 WHERE 子句删除指定的记录
DELETE FROM departments
WHERE department_name = 'Finance';

# 如果省略 WHERE 子句,则表中的全部数据将被删除
DELETE FROM copy_emp;