SQL233 针对上面的salaries表emp no字段创建索引idx emp no
- 强制索引(force index),即指定本次查询使用某个特定的索引,这样就可避免MySQL优化器使用低效的索引。
select *
from salaries
force index (idx_emp_no)
where emp_no=10005
SQL234 在last update后面新增加一列名字为create date
ALTER TABLE actor
ADD (create_date datetime NOT NULL DEFAULT '2020-10-01 00:00:00');
SQL235 构造一个触发器audit log
- 创建触发器:create trigger 触发器名称
- 用after指定触发条件:在表1中每插入一行 after insert on 表1 for each row
(注意insert后用on,for each row不能少否则会报错) - 触发的指令写在begin和end之间,分号写在指令后,end后不用加分号
create trigger audit_log
after insert on employees_test
for each row
begin
insert into audit values(new.id,new.name);
end
SQL236 删除emp no重复的记录,只保留最小的id对应的记录
DELETE FROM titles_test
WHERE id NOT IN(
SELECT * FROM(
SELECT MIN(id)
FROM titles_test
GROUP BY emp_no)a); -- 把得出的表重命名那就不是原表了
SQL237 将所有to date为9999-01-01的全部更新为NULL
- 基本的数据更新语法,UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
update titles_test set to_date = null , from_date = '2001-01-01'
where to_date = '9999-01-01'
SQL238 将id=5以及emp no=10001的行数据替换成id=5以及emp no=10005
- REPLACE INTO当遇到primary 或者 unique key 的时候,会首先进行update
REPLACE INTO titles_test
VALUES(5, 10005 ,'Senior Engineer', '1986-06-26', '9999-01-01') ;
SQL239 将titles test表名修改为titles 2017
- ALTER TABLE 表名 ADD 列名/索引/主键/外键等;
- ALTER TABLE 表名 DROP 列名/索引/主键/外键等;
- ALTER TABLE 表名 ALTER 仅用来改变某列的默认值;
- ALTER TABLE 表名 RENAME 列名/索引名 TO 新的列名/新索引名;
- ALTER TABLE 表名 RENAME TO/AS 新表名;
- ALTER TABLE 表名 MODIFY 列的定义但不改变列名;
- ALTER TABLE 表名 CHANGE 列名和定义都可以改变。
alter table titles_test rename titles_2017
SQL240 在audit表上创建外键约束,其emp no对应emplovees test表的主键id
ALTER TABLE audit
ADD CONSTRAINT FOREIGN KEY (emp_no)
REFERENCES employees_test(id);
SQL242 将所有获取奖金的员工当前的薪水增加10%
update salaries
set salary=salary*1.1
where to_date='9999-01-01'
and salaries.emp_no in(select emp_no from emp_bonus)
SQL244 将employees表中的所有员工的last name和first name通过引号连接起来
select concat(last_name, '''', first_name) as name
from employees;