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,挺巧的吧哈哈哈哈