mysql从零开始学随笔

一 数据库

 1)数据库基本操作

      数据库安装完成连接(MySQL -u root -p)

      显示已有数据库(show databases)

      创建数据库(create database ***)

      切换数据库(use database ***)


2)表基本操作

    显示所有已存在表(show tables)

    约束:主键(primary key)唯一且非空,

             外键(foreign key),保证数据一致性,完整性

             唯一(unique),默认(default),不为空(not null),自增(auto_increment)

    创建表(create table ***(字段名  子段类型,,,,,字段名  子段类型);)

    显示表信息(desc ***)

    修改表信息:

  • 修改表名:alter table tablename rename newtablename
  • 修改列名:alter table tablename change oldcolname newcolname 
    newcoltype
  • 修改列类型:alter table tablename modify oldcolname newcoltype
  • 修改列位置:alter table tablename modify oldcolname oldcoltype after 
    col2name|first
  • 添加列:alter table tablename add newcolname newcoltype 
    (constraints)(after col2name|first)
  • 删除列:alter table tablename drop colname
  • 删除约束:alter table tablename drop constrainttype constraintname

     删除表:drop table ***;

二 数据类型

     


    

    

注意敲黑板:数值类型后的数字只显示长度,不影响精度。字符串类型后的数字,限制了最大字符数。

三 数据库函数

  • 绝对值 : ABS(x)
  • 四舍五入:(round(x,y))进位 truncate(x,y)直接舍去小数点后y位 不进位
  • 计算字符长度:char_length(str) 字符串自负的个数length(str)字符串字节个个数(不同编码下,不同)
  • 删除空格:ltrim(str) rtrim(str)删除左右空格trim(str)删除开头结尾空格
  • 合并字符串:concat(s1,s2…..),若有参数为null,则返回null;
  • 字符串相连concat_ws(x,s1,s2…..)字符串间用x相连,若x为null,则返回null,若其它参数为null,忽略该参数
  • 格式化函数:format(x,n)四舍五入format(N,frombase,tobase)不同进制之间的转换
  • 当前日期 : curdate()和current_date()
  • 当前时间 : current_timestamp()、localtime()、now()、sysdate()
  • 获取日期:月month(date)周几dayname(date)一年的第几周week(date)一周内的第几天dayofweek() 一年内的第几周weekofyear()
  • 条件判断:if(expr,v1,v2) ifnull(v1,v2)v1是null则v2否则v1
  • 加密函数 : password(str);MD5(str);encode(str,pswd_str)
  • 解密函数 : decode(crypt_str,pwd_str)
  • 获取最后一个自动生成id值的函数:last_insert_id 返回最后一个insert或update为auto_increment设置的第一个发生的值,一次性插入多个值时,返回第一个
  • 等等就不一一列举了,反正函数多多

四  查询数据(important)

  1. 基本查询语句 : select  字段名 from 表名;
  2. 单表查询 : 查询指定记录  : select 列名 from  表名  where   条件;

      带in关键字查询 :in操作符用来查询满足指定范围内的条件的记录,使用in操作符,将所有检索条件用括号括起来,并用逗号分隔,只要满足条件范围内的一个值即为匹配项。与之相反,检索不在条件范围的用not;

      带between  and的范围查询  : 范围查询,需要两个参数

      带LIKE的字符匹配查询  : 可以和LIKE一起使用的通配符有“%”“_”;百分号通配符‘%’匹配指定的位置任意长度的字符,甚至包括零字符,下划线通配符‘_’一次只能匹配任意一个字符

      查询是否为空值 : null 和 not null;

      带OR的多条件查询 : 满足其中一个条件的记录即可返回,与关键字IN作用一样(IN执行的速度快于OR,使用IN可执行更复杂的嵌套查询);

      查询结果不重复  : select distinct 字段名  from 表名;

      对查询结果排序 : ORDER BY(ASC 升序, DESC 降序)

      分组查询 : GROUP BY 字段【HAVING<条件表达式>】GROUP BY关键字通常和集合函数一起使用,例如:MAX(), MIN(), COUNT(), SUM(), AVG()。

       在GROUP BY字句中使用WITH ROLLUP,在所有查询出的分组纪录之后增加一条记录,计算查询出的所有记录总和。使用WITH ROLLUP时,不能同时使用ORDER BY子句进行结果排序。

       使用limit限制查询结果的数量:limit 【位置偏移量】行数;位置偏移量,可选参数,指示MySQL从哪一行开始显示,第二个参数指示返回的的记录条数。

        注意哦:limit放在order by之后,否则报错

   3.  集合函数查询:
  • COUNT()函数:COUNT(*)计算总行数,不管是否有数值或空值;COUNT(字段名)计算行数忽略空值的行。
  • SUM()函数:求总和的函数,返回指定列值的总和。
  • AVG()函数:指定数据的平均值
  • MAX()函数:返回指定列的最大值
  • MIN()函数:返回指定列的最小值
   4.  连接查询:关系数据库最主要的查询
  • 内连接查询(INNER JOIN)使用比较运算符进行表间某列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组成新的记录,在内连接查询中,只有满足条件的记录才能出现在结果关系中
  • 外连接查询:连接查询将查询多个表中相关联的行,内连接时返回查询结果集合中的仅是符合查询条件和连接条件的行。外连接时需要包含没有关联的行中数据,即返回查询结果集中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)的所有数据行
  • left join :左连接,包括left outer子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表所有选择列表列均为空值。A左连接B的记录=图3公共部分记录集C+表A记录集A1
  • right join:右连接,返回右表中的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。A右连接B的记录=图3公共部分记录集C+表B记录集B1 

   5.  子查询:一个查询语句嵌套在另一个查询语句内部的查询,先计算子查询,结果作为外层另一个查询条件
  • 带ANY、SOME关键字的子查询:只要满足内层子查询中的任何一个比较条件,就返回一个结果作为条件
  • 带ALL关键字的子查询:使用ALL需要同时满足所有内层查询的条件
  • 带EXISTS关键字的子查询:参数是一个人一多子查询,判断它是否返回行,如果至少返回一行,那么EXISTS结果为true,外层将进行子查询。
  • 带IN关键字的子查询:内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
   6. 合并查询结果:利用UNION关键字,可以给出多条select语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个select语句之间使用UNIONUNION ALL关键字分隔。UNION不使用关键字ALL,执行时删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。格式如下:

       SELECT column...FROM 表1

        UNION [ALL]

       SELECT  column...FROM 表2;

   7.  为表取别名: 表名 【AS】 表别名

   8.  正则匹配:REGEXP关键字指定字符匹配模式



五.  索引

      索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

  • 创建索引:在create表时添加,在所有列之后 index indexname(col_name(length))
  • /**alter table** tablename add index indexname(colname(length))**/
  • create index** indexname on tablename(colname(length))
  • 普通索引:只有索引加快数据的查询
  • 唯一索引:unique index,索引列值必须唯一,可空,组合唯一索引,所有列的组合唯一
  • 单列索引:在某一列上简历索引
  • 组合索引:index 
    indexname(colname(length),colname2….)在多个列上建立索引,索引的使用遵循最左原则,不能使用局部(A,B,C)可用A,(A,B),(A,B,C),其他均不可用
  • 全文索引:fulltext,只有MyISAM引擎支持,且char,varchar和text类型的字段,适合用于大字段

六. 数据库存储过程与函数

  1. 创建存储过程  CREATE PROCEDURE创建存储过程关键字 sp_name存储过程名称([ proc_paramrter参数列表 ] ) [ characteristics... ] runtine_body代码内容,可用BEGIN...END
  2. 创建存储函数  CREATE  FUNCTION func_name ( [func_parameter] ) RETURNS type [characteristic...] routine_body 
  3. 声明变量:declare var1 int; set var1 = 表达式。

七. 流程控制语句

  1. IF语句
IF expr_condition THEN sratement_list
   [ELSEIF expr_condition THEN state_list]
   [ELSEIF statement_list]
ENDIF
**如果expr_contidion求值为真,相应SQL语句列表被执行;没有则执行ELSE子句列表
    2. CASE语句
CASE case_expr
    WHEN when_value THEN state_list
    [WHEN when_value THEN state_list]...
    [ELSE statement_list]
END CASE
**case_expr表示条件判断的表达式,决定哪一个WHEN子句被执行
    3. LOOP语句
[loop_label]LOOP
   statement_list
END LOOP[loop_label]
**loop_label表示LOOP语句的标注名称,可省略
   4. LEAVE语句
LEAVE label
**用来退出任何被标注的流程控制构造,label参数表示循环的标志
add_num:LOOP
  SET @count=@count+1;
  IF  @count=50 THEN LEAVE add_num;
END LOOP add_num;
   5.ITERATE语句
ITERATE label
**ITERATE只可以出现在LOOP、REPEAT和WHILE语句内。ITERATE表示再次循环
egg:CREATE PROCEDURE doiterate()
    BEGIN
    DECLARE p1 INT DEFAULT 0;
    my_loop:LOOP
    SET p1=p1+1;
    IF p1< 10 THEN ITERATE my_loop;
    ELSEIF p1> 20 THEN LEAC=VE my_loop;
    END IF;
    SELECT 'p1 is between 10 and 20';
    END LOOP my_loop;
    NED
   6. REPEAT语句
【repeat_label:】REPEAT
   statement_list
   UNTIL expr_condition
   END REPEAT[repeat_label]
**创建一个带条件判断的循环过程,每次语句执行完毕之后,会对条件进行判断,条件为真循环结束,否则重复执行
   7. WHILE语句
【while_label】WHILE expr_condition DO
    statement_list
    END WHILE[while_label]
**创建一个带条件判断的循环过程,执行语句执行前,先对指定的表达式判断,如果为真,则执行循环内的语句,否则退出循环

七. 视图

     数据库的视图是一个虚拟表,同真实的表一样,视图包含一系列带有名称的行和列数据,来自于由定义视图查询查询所引用的表,并且在引用视图中动态生成。

  • 视图的作用
  1. 简单化:被经常使用的查询可以定义为视图,从而使用户不必为以后操作每次指定全部条件
  2. 安全性:通过视图用户只能查询和修改能见到的数据。其他数据既看不到也取不到。通过视图,用户可以被限制在数据的不同子集上
  3. 逻辑数据独立性:可帮助用户屏蔽真实表结构变化带来的影响
  •  创建视图
  • CERATE[OR REPLACE] [ALGORITHM = {UNDEFINED| MERGE| TEMPTABLE}]
      VIEW view_name[(column_list)]
    AS SELECT_statement
    [WITH [CASCADED| LOCA] CHECK OPTION]
    **CREATE表示创建新视图
  • 查看视图:DESCRIBE 视图名
  • SHOW TABLE STATUS语句查看视图基本信息
  • SHOW CREATE VIEW语句查看视图详细信息
  • ALTER语句修改视图
  • 删除视图 DROP VIEW IF EXISTS view_name

八. 触发器

  1. 创建只有一个执行语句的触发器
    CREATE TRIGGER trigger_name trigger_time trigger_event ON tab_name FOR EACH ROW trigger_stmt
    **trigger_name触发器名称;tirgger_time触发时机,可以指定为before或after;trigger_event标识触发事件包括INSERT,UPDATE和DELETE
  2. SHOW TRIGGERS语句查看触发器信息
  3. 删除触发器DROP TRTGGER

九. MySQL用户管理








      



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值