• (一)MySQL基础


    一.实操教程

    基础介绍:https://www.runoob.com/mysql/mysql-tutorial.html

    安装部署:https://www.cnblogs.com/Agent9527/p/13194128.html

    命名规范:https://cloud.tencent.com/developer/article/1054482

    1.创建数据库

    create databases 库名;  # 所有mysql语句小写默认为大写,一定要小写时可加个双引号

    普通用户创建

    [root@host]# mysqladmin -u root -p create 库名
    Enter password:******

    2.切换数据库

    use 库名;

     3.创建表

    create table [if not exists] 表名
    (
    字段名1 数据类型 [列级完整性约束条件] [默认值],
    [字段名2 数据类型 [列级完整性约束条件] [默认值]],
    [... ...],
    [表级完整性约束条件]
    )[engine=引擎类型];

    3.1 [ ]

      解释:根据情况选。

      " [ ] "为可选框

    3.2 字段名

      解释:根据命名规范给列取名。

      由编译者自命名

    3.3 数据类型

      解释:插入该列的元素为指定的类型

      数值类型【只列现学常见,不排除后续更新】

        int[(m)][unsigned][zerofill]:普通大小的整数。带符号范围(-2 147 483 648,2 147 483 647)无符号范围(0,4 294 967 295)。

        float(m,d):m表示最大长度,d表示小数位数。float(5,2) 浮点数最大长度为5位数,小数部分为2位。范围无符号0.0 ~99999.9有符号-99999.9~99999.9

      日期和时间类型  

        date:范围‘1000-01-01’到‘999-12-31’,MySQL以‘YYY-MM-DD’格式显示DATE值。

        datetime:日期和时间的组合。范围‘1000-01-01 00:00:00’到‘9999-12-31 23:59:59’,MySQL以‘YYY-MM-DD HH:SS’格式显示datetime值。

        time:时间类型,范围是‘-838:59:59’到‘838:59:59’。MySQL以‘HH:MM:SS’格式显示time值。

      字符串类型

        char[(m)]或character[(m)]:固定长度的字符数据类型,m的范围是0~255,用于保存文本信息。

        varchar(m):可变长的字符数据类型,m的范围是0~65 535。

    3.4 列级完整性约束条件

      解释:制定一系列条件,在插入数据时是否满足该列的制定的条件。这就是约束条件

      primary key主键:每个表只能定义一个主键,主键值必须唯一标识表中的每一行,且不能为 NULL。注意:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。这用到联合主键:primary key(列1,列2)放表级完整性约束条件位置,所谓的联合主键,就是这个主键是由一张表中多个字段组成的。约束就是多行数据中字段1、字段2的值不能同时一样。

      unique候选键:能唯一标识表(关系)中行(元组)的列(属性)。AB(行)元素可重复(列)中元素不能重复。

      foreign key外键:用于多表外连接时的标识列,同时存在表1和表2中,它不是表1的主键,而是表2的主键,就可以说他是表1的外键。

      unsigned:禁用负值,用此类型可以增加数据长度

      auto_increment自增属性:每个表只能定义一个auto_increment,并且必须在该列定义主键或候选键约束。默认为1,当插入null数据或数值0时默认1、0+1。

      null:元素可以为空值。注意这里空串也属于一个有效的值。例:‘’ 中间无字符。

      not null: 该列元素值不能为空。不设默认null。

      default默认值:  指在向数据表中插入一行数据时没有给其中默认的一列赋值。那么该列就会默认为default指定的值。default '汉'。

    3.5 引擎类型

      解释:存储引擎就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。可参考https://www.cnblogs.com/yinjw/p/11831702.html学习

      命令:show engines; 可以查看系统支持的引擎类型和默认引擎。其中InnoDB是系统默认的引擎,支持事务处理,是事物型数据库的首选引擎。

    4.查看表

    4.1查看表名称

    show tables [{form | in} 库名];  使用{form | in}可显示非当前数据库中的数据库表名称

    4.2查看数据表基本结构

    desc 表名;

    4.3查看数据表详细结构

    show create table 表名;

    5.增-插入数据

    5.2方法一、不指定数据字段

    insert intovalues('数据1',null,'数据3','数据4'...);

    5.3方法二、指定字段

    insert into tbs(字段1,字段2,字段3,字段4) values('数据1','数据2','数据3','数据4');  # 指定字段主键必须是排第一

    a.同时插入多条数据

    insert into 表(字段1,字段2,字段3) values('数据1','数据2','数据3'),('二行数据1','数据2','数据3')...('n行数据1');

    b.插入查询数据

    insert into 表(字段2,字段2,字段3) select 字段1,字段2,字段3 from 表;

    c.使用replace插入数据

    replace into 表('主键字段1','字段2','字段3') values('数据1','数据2','数据3');   # 即使有主键约束也可以覆盖原来的数据,某个字段定义外码时会出错。

    6.删数据

    6.1删除特定数据

    delete from 表名 where 字段名='指定数据';

    6.2带子查询删除

    delete from 库.表1 where 字段=(select 字段1 from 表2 where 字段2='程序设计');   # 当删除数据的表与设置删除条件的表不相同可以使用

    6.3删除所有数据

    delete from 库.表;    # 表仍存在 

    a.使用truncate删除数据

    truncate 库.表;    # 直接删除原来的表并重新创建一个新表,速度比delete快

    7.改数据

    a.修改特定数据记录

    updateset 字段2='修改数据1',字段3='修改数据2', where 字段1='指定数据1';

    b.修改所有数据记录

    update 库.表 set 字段1=字段1*数值;    # 修改字段1的全部值;字段1类型必须是数值类型可进行+-*/

    c.带子查询的修改

    update 库.表1 set 字段1='0' where 字段2=(select 字段2 from 表2 where='指定条件');    # 字段1满足字段2的条件时设为 0

    8.查数据

    总查询结构

    select [all | distinct | distinctrow] 字段1 [as] 字段1别名,[字段2]    # 查 [所有、去重、去重] 指定字段1 指定字段2
    from 表1或视图1,[表2或视图2]    # 从表1或视图1,表2或视图2
    [where<条件表达式>]    # 设置筛选条件
    [ group by 字段1 [having<条件表达式>] ]    # 指定字段1分组,having分组结果设置筛选
    [ order by 字段2 [asc | desc] ]   # 根据字段2升序降序 
    [ limit [m,] n ]    # 从第m+1行开始显示,共显示n行

    a.单表查询

    a1.select 指定字段

    select 字段1,字段2,字段3...n字段 from 表名;

    a2.select 去重后的字段

    select distinct 字段1,[字段2],...[n字段] from 表名;

    a3.select 所有字段

    select * from 表名;

    a4.select 经过计算的值

    select 字段1,字段2,'新增字段3', year(now()-year(1998-11-13))
    from 表名;    # 新增字段3中在表中是不存在的,now()获取当前日期+时间减去当前的年月时间。再用()括号按年取得到年龄

    a5.select 字段的别名

    注意:另外字段不能出现where中

    select 字段1 as 1,字段2 2 from 表名;  # 将字段as取为更短更通俗的名称as可选可不选

    a6.where 比较大小的查询

    比较:>、<、>=、<=、=、[ !=、<> ]、!>、!<、NOT+含比较运算符的公式例:"NOT 字段 = " 与 "字段!=" 是一样的。

    select 字段1,字段2
    from 表名
    where 字段1>=22;    # 查字段1大于等于22的值

    a7.where 带between...and关键字的范围查询

    select 字段1,字段2
    from 表名
    where 字段2 [not] between 2 and 10; # 无not参数,值在范围[2,10]闭区间内;有not参数,那么这个值不在[2,10]闭区间内

    a8.where 带in关键字的集合查询

    select *
    from 表名
    where 字段2 [not] in('北京','天津','上海');    # 查字段2里边包含北京、天津、上海的数据。用了not那么就是不包含的意思

    a9.where 带like关键字的字符串匹配查询

    模糊搜索:%:包括0以及任意长度的字符。另外不能匹配空值null  _:代表任意单个字符

    要查询的元素本身包含%_:需要用到escape换码字符。例如:信息系统_分析与设计

    select 字段1,字段2
    fromwhere 字段1 [not] like '王%';    # 查询字段1中含"王"的数据
    where 字段1 [not] like '%#_%' escaps '#';  # 将#后面的"_"转换为普通字符

    a10.where 正则表达式

    select 字段1,字段2
    from 表名
    where 字段1 [not] [regexp|rlike] '正则表达式';    # 匹配字段1含系统等价于 like '%正则表达式%' 

    <字符串>:匹配包含指定字符串的文本。例 'fa',匹配:fan,afa,faad。拓展" | " : 例'fa|fb|fc',匹配:fadi,sfbxs,dsfca

    [ ]:匹配[ ]中的任何一个字符。例 '[ab]',匹配:bay,big,app

    [^]:匹配不在[ ]中的任何一个字符。例 '[^ab]',匹配:desk,coll,six

    ^:匹配文本的开始字符。例 '^b',匹配:bed,bridge,book

    $:匹配文本的结尾字符。例 'er $',匹配:driver,worker,farmer

    .:匹配任意单个字符。例 'b.t',better,bit,bite

    *:匹配0个或多个 * 前面指定的字符。例 'f*n',匹配:fn,fan,begin

    +:匹配+前面的字符1次或多次。例'ba+',匹配:bat,baa,battle,bala

    {n}:匹配前面的字符至少n次。例'b{2}',匹配:bb,bbbb,bbbbbbb

    a11.where 带 is null 关键字的空值查询

    select * fromwhere 字段 is null;  # 查看字段为NULL的数据

    a12.where 带andor的多条件查询

    select 字段1,字段2,字段3
    fromwhere (字段1 >or 字段1 < 值) and 字段3==值;

    a13.对查询结果进行ASC | DESC 排序

    order by 字段1 [ asd | desc ]:对查询结果集中记录,按指定字段1升降序

    select *
    fromorder by 字段1 [ ASC |DESC ];  # 升降序

    a14.限制查询结果的数量

    select 字段1,字段2,字段3
    fromorder 字段1
    limit n,m;  # 从第n+1行开始显示;m表示显示的行数

    b.聚合函数查询

    select 函数 from 表;

    函数说明

    注意:distinct为去重,all为默认值

    count([ distinct | all ] * ) : 统计数据表中的行数

    count([ distinct | all ] <列> ) : 统计数据表的一列中值的个数

    max([ distinct | all ] <列> ) : 求数据表的一列值中的最大值

    min([ distinct | all ] <列> ) : 求数据表的一列值中的最小值

    sum([ distinct | all ] <列> ) : 计算数据表的一列值中的总和

    avg([ distinct | all ] <列> ) : 计算数据表的一列值中的平均值

    c.分组+聚合查询

    说明:把指定的A列中相同元素进行分组;求B列countsumminavg...值

    select 字段1,函数1(字段2),函数2(字段3)
    from 表1
    group by 字段1  # 分组
    having [ 函数1(字段2) | 函数2(字段3) ] 操作符 值;  # 筛选操作符:><==!=<=>=

    d.连接查询

    说明:查询涉及到两以上,称之为“连接查询”

    d1.交叉查询

    交叉查询又称“笛卡儿积”。原理:返回的记录行数等于两张表行数的乘积,其连接结果会产生一些没有意义的记录

    [select * from 表1 join 表2][select * from 表1,表2];

    d2.内连接

    内连接[inner join]:在交叉连接基础上设置条件过滤一些没有意义的数据。

    1.等值连接

    select 表1.字段1,表2.字段4,表3.字段6
    from 表1 [inner join] 或 [,] 表2 [inner join] 或 [,] 表3
    on 表1.字段1=表2.字段1 and 表2.字段2=表3.字段2
    and 字段4="值";

    2.自连接

    注意使用自连接时需要为表指定多个不同的别名,对所有查询的字段得用引用的表名限定,否则select操作会失败

    select c1.*
    from 表1 c1 join 表2.c2
    on c1.字段1=c2.字段1
    where c2.字段2=值;

    3.自然连接

    注意:只有两表列名相同的同时才可以使用,否则返回的是笛卡尔积

    select a.字段1,b.字段2
    from 表1 a natural join 表2 b;

    e.子查询

    f.联合查询

  • 相关阅读:
    异常处理
    弹出对话框
    ef——存储过程
    事务
    linq——常用方法
    Linq
    asp get与post获取的区别
    Web服务的调用
    AJAX控件——多层弹出Accordion
    数据绑定
  • 原文地址:https://www.cnblogs.com/Agent9527/p/14129777.html
Copyright © 2020-2023  润新知