sql题解及笔记233-244

233 强制索引

SELECT * FROM salaries FORCE INDEX (idx_emp_no)
WHERE emp_no = 10005;

234 新增列

ALTER TABLE actor 
ADD COLUMN create_date datetime NOT NULL DEFAULT '2020-10-01 00:00:00';

ALTER TABLE <表名> ADD COLUMN <新字段名> <数据类型> [约束条件] [FIRST|AFTER 已存在的字段名];

235 构造触发器

CREATE TRIGGER audit_log AFTER INSERT
ON employees_test
FOR EACH ROW
BEGIN
    INSERT INTO audit (EMP_no, NAME)
    VALUES (NEW.ID, NEW.NAME); --NEW特殊关键字,指代操作中插入或更新的新数据
END;

语法

create trigger triggerName       
    after/before/        // 触发时间 trigger_time
    insert/update/delete // 监视事件 trigger_event
    on table_name        // 监视地点 table
    for each row         // 这句话在mysql中是固定的
    begin
    sql语句(insert/update/delete);             // 触发事件  trigger_stmt 注意这里要有分号 
    end;

236 删除指定行

DELETE FROM titles_test --删除除T1里记录的所有数据
WHERE id NOT IN (
    SELECT * FROM( --临时表,不要删去的数据  
        SELECT MIN(id) --找出每个emp_no里对应的最小id
        FROM titles_test
        GROUP BY emp_no
    ) AS T1
);

MySQL 不允许在同一个查询中既对表进行 DELETE 或 UPDATE 操作,又在 FROM 子句中使用该表

DELETE FROM titles_test
WHERE id NOT IN (
    SELECT MIN(id)
    FROM titles_test
    GROUP BY emp_no
);

237 UPDATE 更新表

UPDATE titles_test
SET to_date = NULL, from_date = '2001-01-01'
WHERE to_date = '9999-01-01';

238 REPLACE 更新表

UPDATE titles_test
SET emp_no = REPLACE(emp_no, 10001, 10005)
WHERE id = 5;

239 更改表名

ALTER TABLE titles_test
RENAME TO titles_2017;
-- ALTER TABLE 表名 RENAME TO/AS 新表名

240 外键约束

在audit表上创建外键约束,其emp_no对应employees_test表的主键id

ALTER TABLE audit
ADD CONSTRAINT FOREIGN KEY (emp_no)
REFERENCES employees_test(id);

创建外键语句结构

ALTER TABLE <表名>
ADD CONSTRAINT FOREIGN KEY (<列名>)
REFERENCES <关联表>(关联列)

242 更新语句

--子查询
UPDATE salaries AS s
SET s.salary = 1.1 * s.salary
WHERE s.to_date = '9999-01-01'
  AND s.emp_no IN( --判断 salaries 表中的 emp_no 是否存在于子查询返回的结果列表中
    SELECT emp_no FROM emp_bonus);
  --emp_bonus存在的员工编号

--连接查询
UPDATE salaries s 
JOIN emp_bonus e ON s.emp_no = e.emp_no
SET salary = salary * 1.1
WHERE s.to_date = '9999-01-01';

244 拼接字段

SELECT CONCAT(last_name,"'",first_name) FROM employees;

题外话:233-244,挺巧的吧哈哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值