mysql视图 外键 索引

您所在的位置:网站首页 mysql哈希索引 mysql视图 外键 索引

mysql视图 外键 索引

2023-03-14 13:19| 来源: 网络整理| 查看: 265

mysql之索引

一、什么是索引 ?

索引是一种数据结构

一个索引是存储的表中数据结构;

索引是咋表的字段上创建的

索引包含了一列值,这个值保存在一个数据结构中

二、索引的作用?

1、保证数据记录的唯一性

2、实现表与表之间的参照性

3、减少排序和分组的时间(order by 或group by 查询语句进行检索)

4、可以引用索引快速访问数据库中特定信息

三、索引的缺点?

1、索引要占物理内存

2、索引对表进行增删改查,索引页要动态维护,降低数据的维护速度

四、索引的分类?

1、普通索引 index 简称:mul

2、主键索引 primary key 简称:pri

3、唯一索引 unique 简称 uni

4、全文 索引

5、组合索引

6、单列索引

7、聚焦索引

8、非聚焦索引

=============================================

索引的使用

1、索引查询方法

方法一:

格式:how index from 表名 ;

案例:how index from emp ;

方法二:

格式:show keys from 表名 ;

案例:show keys from emp ;

方法三:

desc 表名

2、创建索引

(1)创建普通索引

定义:最基本的索引,没有任何限制

格式1:索引名和列名不同

alter table emp add index aa(job) ;

格式2:索引名和列名相同

alter table emp add index (sal) ;

(2)创建主键索引

primary key 简称pri 保证 唯一,不能为空, 一个表中只用一个

案例:

格式:alter table 表名 add primary key(字段)

alter table student add primary key(stu_no)

(3)创建唯一索引

unique 简称:unl 保证唯一,可以为空, 一个表中有多个

a、索引名和字段名不同

格式:alter table 表名 add unique 索引名(字段名)

案例:alter table student add unique n(stu_name)

b、索引名和字段名相同

格式:alter table 表名 add unique (字段名)

alter table student add unique (age)

(4)删除索引

a、普通索引和唯一删除方式一样:

格式:ALTER table 表名 drop index 索引名;

ALTER table student drop index n ;

b、主键索引的删除方法

格式:ALTER table 表名 drop PRIMARY key ;

ALTER table student drop PRIMARY key ;

================

创建索引的方法:

格式:

create index 索引名 on 表名 (字段名)

create index aa on student(age)

================

建表时创建约束

create table ss(id int(10) PRIMARY key , name char(20) UNique)

=================================================

1、你知道索引吗?

2、什么是索引?

3、索引的作用?

4、如何创建索引?

5、如何删除索引?

6、主键索引和唯一索引的区别?

一、什么是视图?

视图是一个虚拟表(逻辑表),它不在数据库中以存储的形式保存(本身不包含数据),视图是在动态中生成

二、视图的作用?

1、解决数据库中的非常复杂的数据查询

比如:将多表合成一个视图,在视图中查询数据

2、安全,保护公司的保密字段

比如:创建视图,现在对某些字段的操作

三、视图的优点?

1、提高查询效率

2、安全

保护字段,创建视图来现在用户对某些字段进行操作

3、简单

不需要关心表结构

四、视图的缺点?

1、性能差

视图查询结果转换对表的查询

2、修改限制

修改视图数据,必须把它转化为基础表修改

==================================================

视图实战:

(1)show tables ; 显示所有的表

(2)创建视图

格式:create view 视图名称 as (sql语句)

案例:create view aa1 as(select dept.dname,dept.loc,emp.* from dept,emp where dept.deptno=emp.deptno)

(3)查看视图

格式:select * from 视图名 ;

案例:select * from aa1 ;

(4)查看创建的视图

格式: show create view 视图名;

案例:show create view aa2;

(5)删除视图

格式:drop view 视图名

案例:drop view aa1

(6)视图的特点:

a、视图是由基础表产生的虚拟表

b、视图的创建和删除表不影响基础表

c、视图的数据更新,删除,直接影响基础表

d、视图不能修改字段

===========================================

面试题:

1、什么是视图?

2、视图的作用?

3、视图的特点?

4、如何创建一个视图?

5、我们工作用视图做什么?

a、查询语句复杂,可以简化语句

b、保护隐秘性字段

mysql之外键

一、外键

外键的定义:

让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。

二、外键的作用?

保持数据的一致性和完整性

三、mysql 数据库中的存储引擎

myisam(默认)

innodb (外键需要这种innodb存储格式)

四、查看存储引擎

格式:show table status from 库名 where name=”表名”

案例:show table status from dcs where name=”student”

外键实战

(1)创建engine=innodb 格式 的表格

(2)外键,创建的表必须有主键 (子表可以不设主键)

a、建表时建外键

父表:create table s (sid int(10) PRIMARY key ,sname varchar(10)) engine=innodb;

子表:CREATE table c (id int(10) PRIMARY key ,name varchar(10),CONSTRAINT f foreign key(id) REFERENCES s1(sid) )engine=innod

CONSTRAINT 外键名

foreign key(子表关联字段) id是子表字段 外键

REFERENCES 父表(父表关联字段) 引用

b、表建好,在新建外键

mm表:create table mm (sid int(10) PRIMARY key ,sname varchar(10)) engine=innodb;

nn 表:create table nn (id int(10) PRIMARY key ,name varchar(10)) engine=innodb;

案例:alter table nn add constraint fk_wj FOREIGN key (id) REFERENCES mm(sid) ;

语法: alter table 子表add [constraint] [外键名称] foreign key (子表外键字段名) references父表(父表的主键); [外键名称]用于删除外键约束的,-般建议”fk”结尾alter table从表drop foreign key外键名称

查询外键是否存在

1)设计表查看

2)格式:show create table 表名 ;

show create table nn ;

删除外键:

格式:alter table 表名 drop foreign key 外键名

alter table nn drop foreign key fk_wj

外键中的一些特性:

1、父表不存在的数据,子表无法插入数据

2、父表中存在的数据,子表就可以插入数据

3、父表和子表都是空数据,子表无法插入数据,父表可以插入数据

4、父表和子表都存在的数据,无法删除父表

5、父表和子表都存在的数据,先删除子表,在删除父表

1、如何创建外键?alter table 子表add [constraint] [外键名称] foreign key (子表外键字段名) references父表(父表的主键);

2、什么是外键? 让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。

3、外键的作用? 保证数据的一致性和完整性

4、外键中子表和父表的关系?

5、公司中为什么用外键?

(1)保存数据的一致性和完整性

(2)公司数据量大,造成数据重复新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表上,子表单一化,这样可以避免数据的冗余

show table status from dcs where name=”student”

Original: https://blog.csdn.net/WAKANDAFOAIWA/article/details/122166152Author: WAKANDAFOAIWATitle: mysql视图 外键 索引

相关阅读 Title: 【Hive】函数(UDF篇)

UDF函数可以直接应用于select语句,对查询结构做格式化处理输出内容。自定义UDF需要继承org.apache.hadoop.hive.ql.UDF,实现evaluate函数。

1.继承UDF类 2.重写evaluate方法 3.把项目打成jar包 4.hive中执行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar;

5.创建函数create temporary function get_pro as ‘jd.Get_Property’//jd.jd.Get_Property为类路径;

1、hdfs dfs -put udftimestamp.jar /udf/

2、add jar hdfs://nameservice1:8020/udf/udftimestamp.jar; 3、CREATE FUNCTION dm_lots.udftimestamp AS ‘mytimestamp.MyUDFTimestamp’ using jar ‘hdfs://nameservice1:8020/udf/udftimestamp.jar’;

drop function dm_lots.udftimestamp;

show functions

例1:日志切割

import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class SalaryUDF extends UDF{ public Text evaluate(Text salaryText){ //1.if salary is null if (salaryText == null) { return null; } String salaryStr = salaryText.toString(); //2.if salary is not double type double salary = 0.0; try { salary = Double.valueOf(salaryStr); } catch (NumberFormatException e) { e.printStackTrace(); return null; } Text text = new Text(); //3.panduan salary return string if (salary > 10000) { text.set("you are rich"); return text; }else if (salary 5000) { text.set("income is normal"); return text; }else { text.set("income is pool"); return text; } } }

例2:日期转化

package com.rainbow.udf; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class TestDate extends UDF{ private SimpleDateFormat inputdateFormat = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss",locale.ENLISH); private SimpleDateFormat outputdateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); public Text exvaluate(Text input){ Text output = new Text(); if(null==input){ return null; } if(null==input.toString()){ return null; } try { String inputDate=input.toString().trim(); Date perseDate = inputdateFormat.parse(inputDate); String outputDate = outputdateFormat.format(perseDate); output.set(outputDate); }catch(Exception e){ e.printStackTrace(); return output; } return output; } }

打jar包上传到hdfsCREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE’file_uri’ [, JAR|FILE|ARCHIVE’file_uri’] ];

Hive的函数分为三类,分别是UDF、UDAF、UDTF,简单区分这三类函数就是, UDF是单行输入,单行输出;UDAF是多行输入,单行输出;UDTF是单行输入,多行或多列输出。

另: 所有的hive函数,都可以使用 desc function 函数名 查看使用方法,若想查看更详细的使用方法,则可以使用 desc function extended 函数名

UDF

返回值类型用法描述stringconcat(string|binary A, string|binary B…)拼接多个字符串stringconcat_ws(string SEP, string A, string B…)拼接多个字符串并按指定分隔符拼接stringconcat_ws(string SEP, array)另一种用法,可以直接拼接数组的元素 (as of Hive 0.9.0)stringdecode(binary bin, string charset)从 (one of ‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16′). 中指定解码格式,解码二进制 (As of Hive 0.12.0.)stringelt(N int,str1 string,str2 string,str3 string,…)示例:elt(2,’hello’,’world’) 返回 ‘world’.binaryencode(string src, string charset)从 (one of ‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’). 指定编码格式,编码字符串. (As of Hive 0.12.0.)intfield(val T,val1 T,val2 T,val3 T,…)示例: field(‘world’,’say’,’hello’,’world’) 返回 3. 否则返回 0intfind_in_set(string str, string strList)示例:find_in_set(‘ab’, ‘abc,b,ab,c,def’) 返回 3,参数是null返回null,没找到返回 0stringget_json_object(string json_string, string path)示例:get_json_object(‘{“name”:”zs”,”id”:”2″}’,’$.id’) 返回 2

get_json_object(‘{“name”:”zs”,”id”:”2″}’,’$.name’) 返回 zsintinstr(string str, string substr)示例:instr(‘substr’, ‘str’) 返回 4,

instr(‘substr’, ‘astr’) 返回 0

参数带null返回nullintlength(string A)返回字符串长度stringlower(string A) lcase(string A)字符串转小写,示例:lower(‘fOoBaR’) 返回 ‘foobar’.stringlpad(string str, int len, string pad)字符串左补齐,示例:lpad(‘str’, 5, ‘0’) 返回 00str

lpad(‘str’, 2, ‘0’) 返回 st

参数带null返回nullstringltrim(string A)字符串去空格 ,示例:ltrim(‘ foobar ‘) 返回 ‘foobar ‘.stringregexp_extract(string subject, string pattern, int index)字符串则模板提取,示例:regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) 返回 barstringregexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)字符串正则替换,示例:regexp_replace(“foobar”, “oo|ar”, “”) 返回 ‘fb.’stringrepeat(string str, int n)重复字符串,示例:repeat(‘str’, 2) 返回 strstrstringreplace(string A, string OLD, string NEW)字符串替换,示例:replace(“ababab”, “abab”, “Z”)返回 “Zab”.stringreverse(string A)字符串翻转stringrpad(string str, int len, string pad)字符串右补齐stringrtrim(string A)字符串去空格 示例:rtrim(‘ foobar ‘) results in ‘ foobar’.stringspace(int n)返回一个 n 个空格的字符串arraysplit(string str, string pat)指定分隔符分割字符串,返回数组mapstr_to_map(text[, delimiter1, delimiter2])指定两个分隔符分割字符串,返回map,默认元素分隔符 ‘,’ 默认键值分隔符 ‘:’stringsubstr(string|binary A, int start) substring(string|binary A, int start)字符串截取 示例:substr(‘foobar’, 4) 返回 ‘bar’stringsubstr(string|binary A, int start, int len) substring(string|binary A, int start, int len)字符串截取,另一种用法 示例:substr(‘foobar’, 4, 1) 返回 ‘b’stringsubstring_index(string A, string delim, int count)字符串截取,示例: substring_index(‘www.apache.org’, ‘.’, 2) 返回’www.apache’.stringtranslate(string|char|varchar input, string|char|varchar from, string|char|varchar to)字符串替换,可做到字符级别,示例:translate(‘abcdeab’, ‘abc’, ‘olcc’) 返回 olcdeolstringtrim(string A)字符串去空格 示例:trim(‘ foobar ‘) 返回 ‘foobar’stringupper(string A) ucase(string A)字符串转大写 示例 upper(‘fOoBaR’) 返回 ‘FOOBAR’.

日期类

返回值类型用法描述stringfrom_unixtime(bigint unixtime[, string format])Unix时间戳(秒)转格式化日期bigintunix_timestamp(string date)格式为uuu MM-dd HH:MM:ss的时间字符串转换为Unix时间戳(秒)bigintunix_timestamp(string date, string pattern)指定时间格式转换为Unix时间戳(秒)pre 2.1.0: string2.1.0 on: dateto_date(string timestamp)返回字符串的日期 示例: to_date(“1970-01-01 00:00:00”) = “1970-01-01”.intyear(string date)返回年份,示例:year(“1970-01-01 00:00:00”) = 1970, year(“1970-01-01”) = 1970.intquarter(date/timestamp/string)返回季度,示例:quarter(‘2015-04-08’) = 2. (as of Hive 1.3.0).intmonth(string date)返回月份,示例:month(“1970-11-01 00:00:00”) = 11, month(“1970-11-01”) = 11.intday(string date) dayofmonth(date)返回日期,示例: day(“1970-11-01 00:00:00”) = 1, day(“1970-11-01”) = 1.inthour(string date)返回小时,示例:hour(‘2009-07-30 12:58:59′) = 12, hour(’12:58:59’) = 12.intminute(string date)返回分钟intsecond(string date)返回秒数intweekofyear(string date)返回日期在对应年份的周数,示例: weekofyear(“1970-11-01 00:00:00”) = 44, weekofyear(“1970-11-01”) = 44.intextract(field FROM source)支持的第三个参数 date格式, timestamp格式, interval 或 一个date或timestamp的格式字符串. 支持的第一个参数: day, dayofweek, hour, minute, month, quarter, second, week and year.

示例:select extract(month from “2016-10-20”) 返回 10.

select extract(hour from “2016-10-20 05:06:07”)返回 5.

select extract(dayofweek from “2016-10-20 05:06:07”) 返回 5.

select extract(month from interval ‘1-3’ year to month) 返回 3.

select extract(minute from interval ‘3 12:20:30’ day to second) 返回 20.intdatediff(string enddate, string startdate)计算日期差值,示例: datediff(‘2009-03-01’, ‘2009-02-27’) = 2.pre 2.1.0: string2.1.0 on: datedate_add(date/timestamp/string startdate, tinyint/smallint/int days)日期增加天数,示例: date_add(‘2008-12-31’, 1) = ‘2009-01-01’.Prior to Hive 2.1.0 (HIVE-13248)pre 2.1.0: string2.1.0 on: datedate_sub(date/timestamp/string startdate, tinyint/smallint/int days)日期减少天数,示例: date_sub(‘2008-12-31’, 1) = ‘2008-12-30′.Prior to Hive 2.1.0 (HIVE-13248)timestampfrom_utc_timestamp({any primitive type} ts, string timezone)将UTC时间戳转换为指定时区的timestamp格式 (as of Hive 0.8.0).示例: from_utc_timestamp(2592000.0,’PST’), from_utc_timestamp(2592000000,’PST’) and from_utc_timestamp(timestamp ‘1970-01-30 16:00:00′,’PST’) 返回 timestamp 1970-01-30 08:00:00.datecurrent_date返回当前的日期 (as of Hive 1.2.0)timestampcurrent_timestamp返回当前的时间 (as of Hive 1.2.0)stringadd_months(string start_date, int num_months, output_date_format)日期增加月数,示例:add_months(‘2009-08-31’, 1) 返回 ‘2009-09-30’.

add_months(‘2017-12-31 14:15:16’, 2, ‘YYYY-MM-dd HH:mm:ss’) 返回 ‘2018-02-28 14:15:16’.stringlast_day(string date)返回日期所在月的最后一天 (as of Hive 1.1.0). 示例:last_day(‘2022-10-01’) 返回 2022-10-31stringnext_day(string start_date, string day_of_week)返回日期下一周的星期几日期,示例: next_day(‘2015-01-14’, ‘TU’) = 2015-01-20.stringtrunc(string date, string format)返回指定格式的日期值(as of Hive 1.2.0). 支持的格式: MONTH/MON/MM, YEAR/YYYY/YY. 示例: trunc(‘2015-03-17’, ‘MM’) = 2015-03-01.doublemonths_between(date1, date2)返回两个日期之间的月数,示例:months_between(‘1997-03-30’, ‘1997-10-30’) = 7stringdate_format(date/timestamp/string ts, string fmt)格式化日期,支持的格式

. 示例: date_format(‘2015-04-08’, ‘y’) = ‘2015’

集合类

返回值类型用法描述intsize(Map)返回Map的元素个数intsize(Array)返回数组的的元素个数arraymap_keys(Map)以数组的形式返回,Map的所有keyarraymap_values(Map)以数组的形式返回,Map的所有valuebooleanarray_contains(Array, value)如果数组包含对应值的元素返回true,否则返回falsearraysort_array(Array)将数组元素按升序排序后返回

条件类

返回值类型用法描述Tif(boolean testCondition, T valueTrue, T valueFalseOrNull)对一个返回值是boolean类型的表达式进行判断,如果返回值是true就返回 第二个值,其它情况返回第三个值booleanisnull( a )判空,null值返回true,否则返回falsebooleanisnotnull ( a )判非空,非null值返回true,否则返回falseTnvl(T value, T default_value)两个值,如果第一个值是null则返回第二个值,否则返回第一个值 (as of HIve 0.11).TCOALESCE(T v1, T v2, …)上面函数的多值情况,如果前面值为null则取后面的值,可以一直判断下去直到取到非null值TCASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] ENDcase when的一种写法,建议必加elseTCASE WHEN a THEN b [WHEN c THEN d] [ELSE e] ENDcase when的一种写法,建议必加else,推荐Tnullif( a, b )相当于CASE WHEN a=b THEN NULL else a (as of Hive 2.3.0)voidassert_true(boolean condition)表达式结果是true则返回null,否则报错 (as of Hive 0.8.0). 示例: select assert_true (2

Original: https://blog.csdn.net/listeningdu/article/details/127985518Author: 豆虫儿Title: 【Hive】函数(UDF篇)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/424193/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3