创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
例如:
create view actor_name_view as
select first_name first_name_v,last_name last_name_v
from actor
创建强制索引
FORCE INDEX() 强制索引查询
方法)强制索引FORCE INDEX() 强制索引使用方法:force index(字段名) SELECT * FROM salaries FORCE INDEX(idx_emp_no) WHERE emp_no = 10005;
强制索引FORCE INDEX
FORCE INDEX强制查询优化器使用指定的命名索引。查询优化器是MySQL数据库服务器中的一个组件,它为SQL语句提供最佳的执行计划。查询优化器使用可用的统计信息来提出所有候选计划中成本最低的计划。
书写顺序:
SELECT……
FROM ……
FORCE INDEX(index_name)
WHERE……
例如,查询可能会请求价格在10到80之间的产品。如果统计数据显示80%的产品具有这些价格范围,那么它可能会认为全表扫描效率最高。但是,如果统计数据显示很少有产品具有这些价格范围,那么读取索引后跟表访问可能比全表扫描更快,更有效。
如果查询优化器忽略索引,您可以使用FORCE INDEX
提示来指示它使用索引。
以下说明了FORCE INDEX
提示语法:
SELECT * FROM table_name
FORCE INDEX (index_list)WHERE condition;
在此语法中,您将FORCE INDEX
子句放在FROM子句之后,后跟查询优化器必须使用的命名索引列表。
创建触发器
在MySQL中,创建触发器语法如下:
CREATE TRIGGER trigger_name
trigger_time trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
其中:
- trigger_name:标识触发器名称,用户自行指定;
- trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
- trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
- tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
- trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句,每条语句结束要分号结尾。
For each row
每行受影响,触发器都执行,叫行级触发器。
oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。
mysql不支持语句触发器,所以必须写for each row;
Replace
update titles_test
set emp_no=replace(emp_no,10001,10005)
where id=5
语法:replace(object,search,replace)
语义:把object对象中出现的的search全部替换成replace。
Replace into
REPLACE INTO citiesSET id = 4,
name = 'Phoenix',
population = 1768980;
与UPDATE语句不同,如果未在SET子句中指定列的值,则REPLACE语句将使用列的默认值。
改表名
MySQL中可以使用rename table
这个SQL语句来修改表名。
rename table这个SQL语句来修改表名的基本语法是:
RENAME TABLE <旧表名> TO <新表名>;
创建外键约束
ADD CONSTRAINT FOREIGN KEY
方法)创建外键
ALTER TABLE audit
ADD CONSTRAINT FOREIGN KEY (emp_no)
REFERENCES employees_test(id);
创建外键语句结构:
ALTER TABLE <表名>
ADD CONSTRAINT FOREIGN KEY (<列名>)
REFERENCES <关联表>(关联列)
SQL添加一列到表中
在tb_student表额外添加一列 L3VPN,并且该L3VPN列含有默认值 apink,添加的位置在指定的列sex的后面
ALTER TABLE tb_student
ADD l3vpn VARCHAR(10)
DEFAULT 'apink'
AFTER sex
保留小数位
1、使用ROUND()函数,ROUND返回一个数值,舍入到指定的长度或精度,使用示例:
SELECT ROUND(123.9994, 3) --123.9990
SELECT ROUND(123.9995, 3) --124.0000
SELECT ROUND(748.584, -1) --750.000
SELECT ROUND(748.586, -2) --700.000
SELECT ROUND(748.586, -3) --Error 将expression转换为数据类型 numeric 时出现算术溢出错误
SELECT ROUND(748.586, -4) --0.000,如果length为负数,并且大于小数点前的数字个数,则ROUND将返回 0
SELECT ROUND(151.75, 0,0) --152.00 舍入
SELECT ROUND(151.75, 0,1) --151.00 截断
2、使用CONVERT()函数,使用示例:
SELECT CONVERT(DECIMAL(13,2),13.123) --13.12
3、使用CAST()函数,使用示例:
SELECT CAST(13.123 as DECIMAL(13,2)) --13.12
使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字。
更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,decimal(18,2) 指定要保留的有效数字。
这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的变为0 ,成 2.3300。但 Convert() 函数就不会。