# DML

CREATE TABLE IF NOT EXISTS t1_user (
  `user_id`     bigint(20)     NOT NULL        AUTO_INCREMENT COMMENT '用户ID',
  `dept_id`     bigint(20)     DEFAULT NULL    COMMENT '部门ID',
  `user_name`   varchar(30)    NOT NULL        COMMENT '用户账号',
  `email`       varchar(50)    DEFAULT ''      COMMENT '用户邮箱',
  `password`    varchar(100)   DEFAULT ''      COMMENT '密码',
  PRIMARY KEY (`user_id`)
) COMMENT = '用户信息表';

# 1、插入数据

  批量插入可以一次性解决多条数据插入,但 MySQL8 以后默认有事务安全,即批量要么都成功要么都失败。所以数据不多的情况下还是逐条插入,便于排查错误。

批量插入数据--for 循环
const mysql = require('mysql2')
const connection = mysql.createConnection({
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: 'mysql666.',
  database: 'coderhub'
})

const statement = `INSERT INTO products SET ?;`
const phoneJson = require('./phone.json')

for (let phone of phoneJson) {
  connection.query(statement, phone, (err, results, fields) => {
    console.log(results) // results contains rows returned by server
    console.log(fields) // fields contains extra meta data about results, if available
  })
}
-- 需顺序插入
INSERT INTO t1_user VALUES(20857,4,'dingding','[email protected]','123456');

-- 可乱序插入
INSERT INTO t1_user(user_id,dept_id,user_name,email,password) VALUES(20857,4,'dingding','[email protected]','123456');

-- 批量插入
-- 略

# 2、更新数据

  更新数据时,非特殊情况下一定要携带条件,不然会一次新修改所有数据。

-- 修改所有
UPDATE t1_user SET password = '123456';

-- 修改部分
UPDATE t1_user SET user_name = 'hanghang' WHERE user_id = 20858;

-- 高级更新
update t1_user set account = account + 10 limit 3; # 对会员选3个发送10元红包(添加到账户)

# 3、清除数据

拓展:truncate t1_user; 也可以删除所有数据,不过它是 DDL 语句

-- 删除所有
DELETE FROM t1_user;

-- 删除部分
DELETE FROM t1_user WHERE dept_id = 3;

# 4、建立副本

  副本可以用于数据备份或者迁移场景中。

-- 1、使用 as select
-- 结构 + 数据
CREATE TABLE t2_user AS SELECT * FROM db_1.t1_user;
ALTER TABLE t2_user COMMENT '用户信息表-副本';

-- 2、使用 like
-- 结构
CREATE TABLE t3_user like db_1.t1_user;
-- 数据
INSERT INTO t3_user SELECT * FROM db_1.t1_user;
更新于 : 8/7/2024, 2:16:31 PM