MYSQL----基础函数

1.了解SQL

1.1数据库基础

  • 数据库是保存有组织的数据的容器(通常是一个文件或一组文件)
    注意:区别数据库软件,数据库软件应成为DBMS(数据库管理系统)。
  • 主键:一列(或一组列),其值能够唯一区分表中每个行。
  • 注意:主键并不是必须的;
  • 条件(MySql本身强制实施):1.任一两行都不具有相应的主键值;
    2.每行都必须具有一个主键值(主键列不允许NULL值)

1.2什么是SQL

  • Structured Query Language的缩写,结构化查询语言

2.MySql简介

2.1什么是MySql

  • MySQL是一种DBMS,数据库软件。
  • List item
  • 客户机-服务器软件
    DBMS可分为两类:1.基于共享文件系统的DBMS;2.基于客户机-服务器的DBMS。(MYSQL基于后者)

3.使用MySql

3.1链接

  • 登录到DBMS
  • 打开数据库: use 数据库名
  • 显示数据库的表:show databases
  • 获得一个数据可内的表的列表:show tables
  • 显示表的列表:show columns from 表名;快捷方式是 describe 表名

4.检索数据

4.1 SELECT语句

  • 检索列:
    SELECT 列名1,列名2
    FROM 表名;
    (mysql必须用;结束,列名中间用,英文字符下)

  • 检索所有列:
    SELECT *
    FROM 表名;

  • 使用DISTINCT +列名,只保留不重复的列

  • LIMIT m ,只显示签m行

  • LIMIT m,n 返回从行m开始的n行。注意:第一行为行0

  • 限定列名:表名.列名

5.排序检索数据

5.1 排序数据

  • 对单个列排序:
    SELECT 列名
    FROM 表名
    ORDER BY 列名;
    数字从小到大排序,英文字符按字母顺序(A-Z)默认是升序

  • 多个列排序
    SELECT 列名1,列名2,列名3
    FROM 表名
    ORDER BY 列名1,列名2;
    首先按列名1排序,若列名1有重复值时再按照列名2排;若列名1唯一,则不会按列名2排序。

  • 降序排序:
    ORDER BY 列名 DESC;
    ORDER BY 列名1 DESC,列名2 ASC ;表名按照列名1降序,列名2升序。

  • 最高
    ORDER BY 列名 DESC
    LIMIT1;

6.过滤数据

WHERE 子句

注意:如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。

  • 空值检查:
    IS NULL

  • 大小比较,范围内:BETWEEN 最小值 AND 最大值

7.数据过滤

7.1 组合WHERE子句

  • AND
    多个过滤条件用AND组合,结果需同时满足多个条件。

  • OR
    多个条件是需要匹配任一一个。

  • AND 和OR组合使用
    条件1 OR 条件2 AND 条件3 .计算次序为优先处理AND操作符,所以第一步是满足条件2和条件3,然后是满足条件1,容易出错。
    使用圆括号明确分组:
    优先级:圆括号>AND>OR

7.2 IN操作符

  • IN 与OR有相同功能

7.3 NOT 操作符

  • NOT IN ()
    e.g.:
    esex not in(0,1)等价于:
    esex != ANY(0,1),也等价于
    esex != 0 AND esex != 1
    注意:当查询的列有NULL值时,结果可能是空集。
    not exists 避免
    在这里插入图片描述

  • NOT BETWEEN AND

  • NOT EXISTS

8. 使用通配符进行过滤

8.1 LIKE操作符

  • 百分号(%)通配符
    %表示任意字符出现任意次数
    ‘%abc’–以abc开头的词
    ‘%d%’–含有d的词
    ‘e%g’–以e开头g结尾的词
  • 下划线(_)通配符
    和%用途一样,但值匹配单个字符而不是多个字符
    区别:%可以匹配0个和多个,_只能是一个
    建议通配符不要过度使用,搜索时间过长。

9. 用正则表达式进行搜索

正则表达式的作用是匹配文本,可以弥补使用通配符而过慢的缺点。

  • 基本字符匹配
    where 列名 regexp ‘1000’–表示包含文本1000的所有行
    注意:LIKE 和REGEXP的区别:
    比如:LIKE’1000’, LIKE 匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行不被返回,除非使用通配符。
    REGEXP’1000’,REGEXP在列值内进行匹配,如果被配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。
    简单来说就是,LIKE 匹配整个串而REGEXP匹配子串。

  • 区分大小写

  • 进行OR匹配
    搜索两个串之一使用|隔开,

  • 匹配几个字符之一
    【123】ton 匹配1 ton 2 ton 3 ton
    【】是另一种形式的OR语句,是【1|2|3】 ton

  • 否定字符
    ^ 【^123】–匹配除这些字符外的任何东西

  • 匹配范围
    【0-9】–表示0-9之内的所有数字

  • 查找特殊符号
    前加//(转义)

  • 元字符
    \f 换页;
    \n 换行;
    \r 回车;
    \t 制表;
    \v 纵向制表;

  • 匹配多个实例
    |元字符| 说明 |
    |* |0个或多个匹配|
    | + |1个或多个匹配(等于{1,}) |
    |? |0个或1个匹配(等于{0,1}) |
    |{n} |指定数目的匹配|
    | {n,m} | 匹配数目的范围(m不超过255) |
    例:REGEXP’\\([0-9] sticks?\\)’
    匹配连在一起的4位数字
    REGEXP ‘【【:digit:】】{4}’
    等同于REGEXP ‘【0-9】【0-9】【0-9】【0-9】’

  • 定位符
    元字符 说明
    ^ 文本的开始
    $ 文本的结尾
    【【:<:】】词的开始
    【【:>:】】词的结尾

10.创建计算字符

10.1 计算字段

  • 拼接字段
    concat()函数
    concat(连接1,连接2)中间用,隔开,结果为连接1连接2
    RTrim(字段)删除数据右侧对于的空格
    LTrim(字段) 去掉串左边的空格
    Trim(去掉串左右两边的空格)
    计算完起别名生成新的列

10.2 执行算数计算

加+ ,减-,乘*,除/

11.使用数据处理函数

注:函数不具有可移植性,SQL实现之间有差异

11.1 使用函数

  • 文本处理函数
    left() 返回串左边的字符
    length()返回串的长度
    locate()找出串的一个子符
    lower()将串转换为小写
    ltrim() 去掉串左边的空格
    right()返回串右边的字符
    rtrim()去掉串右边的空格‘
    soundex()返回串的soundex值
    substring() 返回子串的字符(返回发音一样的字符,防止错别字)
    upper()将串转换为大写

  • 日期和时间处理函数
    adddate() 增加一个日期(天/周等)
    addtime()增加一个时间(时/份等)
    curdate() 返回当前日期
    curtime()返回当前时间
    date()返回日期时间的日期部分
    datediff() 计算两个日期之差
    date_add()高度灵活的日期运算函数
    date_format() 返回一个格式化的日期或时间串
    day()返回一个日期的天数部分
    dayofweek() 对于一个日期,返回对应的星期几
    hour()返回一个时间的小时部分
    minute()返回一个数据的分钟部分
    month()返回一个日期的月份部分
    now()返回当前日期和时间
    second() 返回一个时间的秒的部分
    time()返回一个日期时间的时间部分
    year()返回一个日期的年份部分
    例:检索出2005年9月的数据
    方法1:where date(时间) between ’2005-09-01‘ and ’2005-09-30‘;
    方法2:where year(时间)=2005 and month(时间)=9;

  • 数值处理函数
    abs()返回一个数的绝对值
    cos()返回一个角度的余弦
    exp()返回一个数的指数值
    mod()返回除操作的余数
    pi()返回圆周率
    rand() 返回一个随机数
    sin()返回一个角度的正弦
    sqrt()返回一个数的平方根
    tan()返回一个角度的正切

12.汇总函数

avg() 返回某列的平均值,忽略了列值为null的行
count() 返回某列的行数
count(*)对表中行的数目进行计数,不忽略空值
count(列名)忽略空值
max()返回某列的最大值,忽略值是NULL的行
min() 返回某列的最小值,忽略值是NULL的行
sum() 返回某列值之和,忽略值是NULL的行

13.分组数据

13.1 数据分组

group by
注意:group by 子句中列出的每个列都必须的hi检索列或有效的表达式(但不能是聚集函数)。是表达式时不能使用别名。除聚集计算语句外,select语句中的每个列都必须在group by子句中给出。

13.3 过滤分组

having

  • having 和 where区别:
    where是过滤行,而having过滤分组
    也可以理解为:where在数据分组前进行过滤,having在数据分组后进行分组。

14.使用子查询

14.1 利用子查询进行过滤

where 列 in(select 子查询)
注意:where 后的列与select语句中的列数目相同,通常使用单个列,可以使用 where 连接条件代替。

14.2 作为计算字段使用子查询

在selct 后使用子查询,需要有主键约束;可以用left join 替代

15.联结表

外键:为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
inner join 内链接也叫等值连接。

16.创建高级联结

使用别名,对表和列都可以

16.1 不同类型的联结

  • 自联结

  • 自然联结,每个内部联结都是自然联结

  • 外部联结:outer join
    right join–保留右边所有行
    left join–保留左边所有的行

17 组合查询

17.1 union操作符

  • 对单个表进行操作,不同条件返回相同的列名,使用union相当于两个条件使用OR连接。
  • union中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
  • union all保留所有行(此时,完成了where 无法完成的任务);union重复的行被自动取消;

17.2 对组合查询结果排序

只能在union组合之后,出现在最后一条select语句之后,只能只用一个order by

注:union也可以应用不同的表

18.全文本搜索

两个最常用的引擎:MyISAM和InnoDB,前者支持全文本搜索,后者不支持。
特点:不需要分别查看每个行,不需要分别分析和处理每个词。mysql创建指定列中各词的一个索引,搜索可以针对这些词进行。

  • 增加索引:FULLTEXT(列名) ,对列进行索引
    可以在创建时指定,或者在稍后指定。不要在导入数据时使用FULLTEXT,先导入,再修改表定义FULLTEXT。

  • MACTH()指定被搜索的列

  • AGAINST()指定要使用的搜索表达式

  • 列:SELECT note_text
    FROM productnotes
    WHERE Match(note_text) Against(‘rabbit’);
    对note_text进行搜索,指定rabbit作为搜索文本,

  • 搜索不区分大小写:除非使用BINARY方式,否则全文本搜索不区分大小写。

  • 使用LIKE代替:
    SELECT note_text
    FROM productnotes
    WHERE note_text LIKE ‘%rabbit%’;

  • 全文本搜索与LIKE加通配符的区别:
    结果上顺序不同,全文本搜索返回以文本匹配的良好程度排序的数据,LIKE
    以不是特别有用的顺序返回。

  • 使用位置:1.可以像上述例子一样跟在where后面;
    2.在select后,生成词的优先等级,等级为0的结果是不包含指定词的。

  • 优先级:只有一个词是,词越靠前等级越高;有多个搜索项时,包含词越多等级越高。

  • 使用查询扩展:即在有搜索词的结果之外,还想要其他线管的所有行,返回的行会更多。
    步骤:先基于搜索项进行基本的全文本搜索;
    其次,mysql检查这些匹配行并选择所有有用的词;
    在其次,mysql再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词。
    例:SELECT note_text
    FRPM productnotes
    WHERE Match(note_text) against(‘anvils’ WITH QUERY EXPANSION);

18.2 布尔文本搜索

与全文本搜索的区别:即使不定义FULLTEXT索引,也可以使用,但是是一种非常缓慢的操作。

  • 优点:可以提供:要匹配的词;要排斥的词;排列提示;表达式分组;另外一些内容。

  • 例子:WHERE Match(note_text) against(‘heavy -rope*’ IN BOOLEAN MODE);
    表示匹配heavy,但排除rope*(任何以repo开始的词)

  • 全文本布尔操作符
    +包含,此必须存在
    –排除,词必须不出现
    >包含,而且增加等级值
    <包含,且减少等级值
    ()把词组成子表达式
    ~ 取消一个词的排序值
    * 词尾的通配符(截断)
    ""定义一个短句(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)

  • 说明:
    在搜索全文本数据时,短词被忽略(字符小于等于3个)
    mysql带有一个内建的非用词列表,这些词的索引总被忽略。
    高频词(出现在50%以上的行中)则作为一个非用词被忽略。
    表中的行数少于三行,则全文本搜索不返回结果。
    忽略词中的单引号。
    不具有词分隔符。
    仅MyISAM数据库引擎中支持全文本搜索。

19.插入数据

19.1数据插入

  • INSERT:
    1.插入完整行
    insert into 表名 values(),以列的次序填充,没有值时填充NULL。(比较不安全)
    2.插入行的一部分
    insert into 表名(列名) values(相应的值)
    注意:省略列的条件是允许有NULL值,或者表定义中给出默认值。
    3.插入多行
    插入列名相同时:
    insert into 表名(列名) values(相应的值1),(相应的值2),……
    插入表不同时,就吧插入2的方式重复使用,每次用分号隔开。
    4.插入某些查询的结果
    比如两个表合并:
    insert into customers(列名)
    select 列名 from 表名
    将表中的数据导入到需要插入的表里,要求列之间对应,两个表的主键不要相同。

20 更新和删除数据

数据操纵语言

20.1 更新数据

  • UPDATE语句:
    1.更新一列:
    UPDATE 表名
    SET 列名=’‘(赋值)
    where 筛选条件(更新哪一列)
    2.更新多列:
    UPDATE 表名
    SET 列名1=’‘(赋值),
    列名2=’‘(赋值)
    where 筛选条件

  • IGNORE关键字
    在更新多行时一行或多行发生错误,整个操作都取消,为了即使发生错误也继续进行更新,使用:UPDATE IGNORE ……
    3.删除某个列的值
    把列值直接赋值为’NULL’。

20.2 删除数据

  • DELETE语句
    1.删除特定行
    DELETE FROM 表名
    WHERE 筛选条件(锁定行)
    注意:DELETE删除的是整行而不是列,删除指定列,请使用UPDATE语句。
    DELETE删除表的内容而不是删除表。
    2。删除所有行:
    不加where条件
    或者使用TRUNCATE TABLE ,速度更快,时间是删除原来的表并重新创建一个表。

21 创建和操纵表

21.1创建表

CREATE TABLE 新表名(IF NOT EXISTS)
(列名 数据类型 NOT NULL/NULL AUTO_INCREMENT,
列名 数据类型 NOT NULL/NULL DEFAULT 1,–默认值
……
PRIMARY KEY (列名))
ENGINE=InnoDB;

  • last_insert_id() 可以获取最后一个AUTO_INCREMENT值。
  • 每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使他成为主键)
  • 引擎类型:
    1.InnoDB 是一个可靠的事务处理引擎,不支持全文本搜索;
    2.MEMORY在功能等同与MyISAM,但由于数据存储在内存中,速度很快;
    3.MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

21.2 更新表

ALTER

  • 添加一列: ALTER TABLE 表名 DROP COLUMN 列名;

  • 添加外键:ALTER TABLE 表名1 ADD CONSTRAINT 外键名 FOREIGN KEY (列名1)
    REFERENCES 表名2 (列名2);

  • 删除表:drop table 表名;
    注意:永久删除该表。

  • 重命名表:RENAME TABLE 表名(原来) TO 表名(新);
    可一次对多个表名重命名。

22.使用视图

22.1视图

  • 什么是视图:视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

  • 应用:重用SQL语句;
    简化复杂的SQL操作;
    使用表的组合部分;
    更改数据格式和表示;
    保护数据。
    创建好视图后可以当作表一样操作。

  • 视图的规则和限制:
    必须唯一命名;
    数目没有限制;
    必须有足够的访问权限;
    视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
    order by可以用到视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
    视图不能索引,也不能有关联的触发器或默认值。
    视图可以和表一起使用。

22.2使用视图

  • 创建视图:CREATE VIEW(CREATE OR REPLACE VIEW)
  • 查看创建视图的语句:SHOW CREATE VIEW 视图名称;
  • 删除视图:DROP VIEW 视图名;
  • 可更新但有具体条件:含有分组,联结,子查询,并,聚集函数,DISTINCT,导出列时不可更新。

23 使用存储过程

23.1 存储过程

简单来说就是为以后的使用而保存的一条或多条mysql语句的集合。可视为批文件。

23.2使用存储过程

  • 执行存储过程
    CALL 存储过程名称 (@参数,……)

  • 创建存储过程
    CREATE PROCEDURE 存储过程名称()
    BEGIN
    查询语句
    END;
    注:在()中列出参数;
    因为MYSQL语句使用;作为分隔符,所以存储过程结束的时候改一下
    DELIMITER//
    CRATE PROCEDUER 存储过程名称()
    BEGIN
    ……
    END//
    DELIMITER;
    使用//作为新的语句结束分隔符。

  • 删除存储过程
    DROP PROCEDURE (IF EXISTS) 存储过程名称;

  • 使用存储过程
    CALL 存储过程名()

  • 使用参数
    一般不显示结果,而是把结果返回给你指定的变量。
    (变量:临时储存数据)
    CREATE PROCEDURE 存储过程名称(
    OUT 变量名 类型
    )
    BEGIN
    SELCT MIN()
    INTO 变量
    FROM 表
    END;
    结果储存到变量里。
    CALL 存储过程名(@变量名);
    可以直接显示需要的结果。

  • 还可以在存储过程中使用游标。

24.管理事务处理

24.1 事务处理

MYISAM不支持事务处理管理;InnoDB支持。

  • 作用:维护数据库的完整性,保证成批的MySQL操作要么完全执行,要么完全不执行。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值