数据库刷题笔记2

创建视图

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
  1. 使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字。

  2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,decimal(18,2) 指定要保留的有效数字。

这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的变为0 ,成 2.3300。但 Convert() 函数就不会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值