Skip to content

CREATE TABLE foo ( id INT, name VARCHAR(15), hire_date DATE, salary DOUBLE(10, 2) );

  • 方式一

    sql
    INSERT INTO foo
    # 字段要对应,VALUES 可以写成 VALUE,但 VALUES 是规范。
    VALUES (1, 'Tom', '2000-07-07', 3400);
    
    # 声明要添加的字段
    # 没有赋值的字段值为 NULL
    INSERT INTO foo (id, hire_date, salary, `name`)
    VALUES (1, '2000-08-08', 5000, 'Ti');
    
    # 插入多条数据
    INSERT INTO foo (id, hire_date, salary, `name`)
    VALUES 
    (1, '2000-08-08', 5000, 'Ti'),
    (2, '2000-09-09', 6000, 'Ti');
    
    # 或者
    INSERT INTO foo (id, hire_date, salary, `name`)
    SELECT 1, '2000-08-08', 5000, 'Ti' UNION ALL
    SELECT 2, '2000-09-09', 6000, 'Ti';
  • 方式二

    sql
    # 查询结果插入到表中
    INSERT INTO foo (id, name, salary, hire_date)
    # 如果结果中的字段的长度大于表中字段的长度,有添加失败的风险。
    SELECT employee_id, last_name, salary, hire_date
    FROM employees
    WHERE department_id = 60;
  • 方式三

    sql
    INSERT INTO `foo` SET `name` = 'bar', `age` = 18;

sql
DELETE
FROM foo
# 不写 WHERE 会删除所有记录
WHERE id = 107;

# 将 userid 为 foo 的 table1 表和 table2 表的记录全部删除
DELETE t1, t2
FROM table1 t1
JOIN table2 t2
ON t2.userid = t1.userid
WHERE t1.userid = 'foo'

sql
UPDATE foo
SET hire_date = CURDATE()
# 不写 WHERE 把修改所有记录的字段
WHERE id = 103;

# 修个多个字段
UPDATE foo
SET hire_date = CURDATE(), salary = 10000
WHERE id = 104;

MySQL8.0 新特性:计算列

如果某一列的值是通过别的列计算得来的,如果 c 列结果为 a 列 + b 列,那么 c 列就是计算 列。CREATE TABLE 和 ALTER TABLE 都支持计算列。

sql
CREATE TABLE bar (
  a INT,
  b INT,
  # 计算列
  c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);

# c 列的值会自动计算出来
INSERT INTO bar (a, b)
VALUES (1, 2)

# c 列的值会自动更新
UPDATE bar
SET a = 10;