• MYSQL(一)


    一,概述:

    1,什么是数据库:

      答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库。

    2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?

    答:他们均是一个软件,都有两个主要的功能:

    • a. 将数据保存到文件或内存
    • b. 接收特定的命令,然后对文件进行相应的操作

      PS:如果有了以上软件,无须自己再去创建文件和文件夹,而是直接传递 命令 给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System)。

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    二,下载安装

    想要使用MySQL来存储并操作数据,则需要做几件事情:
      a. 安装MySQL服务端
      b. 安装MySQL客户端
      b. 【客户端】连接【服务端】
      c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)

    下载方式有以下几种:

    1.   http://dev.mysql.com/downloads/mysql/
    
    2, 在终端直接    pip3  install  mysql
    3,
    
            windows:
                点点点
            Linux:
                yum install mysql-server
            Mac:
                点点点
    
    1、服务端启动
    
    mysql.server start
    
    2、客户端连接  
    mysql -h host -u user -p
    
    3、退出
    
    exit、quit 或者 Control+D
    

    启动: net start MySQL

    停止: net stop MySQL

    卸载: sc delete MySQL

    三  数据库基本操作:

     登录操作: 

    1、连接mysql
    
    mysql  -u  root
    
    2、为root用户设置密码
    
    # mysqladmin -u root -p password "sql123"
    
    3、为用户设置密码后,连接mysql
    
    mysql -u root -p
    

    操作mysql:

    1 显示所有的数据库:
    show databases
      
    2 创建数据库:
    create database 表名
    
    3 进入数据库:
    use 表名
    
    4 查看数据库中所有的表:
    show tables

    5 查看表结构:
    desc 表名   

    用户管理

    创建用户
        create user '用户名'@'IP地址' identified by '密码';
    删除用户
        drop user '用户名'@'IP地址';
    修改用户
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
    修改密码
        set password for '用户名'@'IP地址' = Password('新密码')
      
    PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
    

    授权管理

    show grants for '用户'@'IP地址'                  -- 查看权限
    grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
    revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限

    四  数据表操作:

    是否可空,null表示空,非字符串
                not null    - 不可空
                null        - 可空
    是否可为空
    默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
                create table tb1(
                    nid int not null defalut 2,
                    num int not null
                )
    默认值
     自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                或
                create table tb1(
                    nid int not null auto_increment,
                    num int null,
                    index(nid)
                )
                注意:1、对于自增列,必须是索引(含主键)。
                     2、对于自增可以设置步长和起始值
                         show session variables like 'auto_inc%';
                         set session auto_increment_increment=2;
                         set session auto_increment_offset=10;
    
                         shwo global  variables like 'auto_inc%';
                         set global auto_increment_increment=2;
                         set global auto_increment_offset=10;
    自增
     主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                或
                create table tb1(
                    nid int not null,
                    num int not null,
                    primary key(nid,num)
                )
    主键
    外键,一个特殊的索引,只能是指定内容
                creat table color(
                    nid int not null primary key,
                    name char(16) not null
                )
    
                create table fruit(
                    nid int not null primary key,
                    smt char(32) null ,
                    color_id int not null,
                    constraint fk_cc foreign key (color_id) references color(nid)
                )
    外键

    1  创建表

    1   创建表:
    create table yiduiduo (表名)(    创建表
         nid int     本列整数类型
         not null   不能为空
         auto_increment  设置自增
         primary key,  主键 
         num int null);
    

    2  删除表

    drop table 表名
    

    3 清空表

    delete from 表名
    truncate table 表名   清空表中内容
    

    4、修改表

    添加列:alter table 表名 add 列名 类型
    删除列:alter table 表名 drop column 列名
    修改列:
            alter table 表名 modify column 列名 类型;  -- 类型
            alter table 表名 change 原列名 新列名 类型; -- 列名,类型
      
    添加主键:
            alter table 表名 add primary key(列名);
    删除主键:
            alter table 表名 drop primary key;
            alter table 表名  modify  列名 int, drop primary key;
      
    添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
    删除外键:alter table 表名 drop foreign key 外键名称
      
    修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

    5、基本数据类型

    MySQL的数据类型大致分为:数值、时间和字符串

    整数:
         tinyint    0--255   
         int (m)    m 表示显示的位数
         bigint     大整数
    小数:
         decimal(m,d)  精确的小数值,m是数字总个数(符号不算)d是小数后个数,m最大值是65,d最大为30, 
         flout(m,n)   单精度浮点数,数值越大越不准确
         double(m,n)  双精度浮点数,数值越大越不准确
    字符串:
         char(m)  定长字符串,m表示字符串的总长度。查询速度快
         varchar(m) 变长字符串,m表示字符串的总长度。
         text(m)   保存变长的大字符串
         enum(1,2,3) 枚举,表示自能从里面获取
         set                  集合
    时间:
         data   日期
         time   时间
         datatime 当前日期时间
    布尔值:
              tinyint 1  真
              tinyint 0  假
    常用的数据类型
     bit[(M)]
                二进制位(101001),m表示二进制位的长度(1-64),默认m=1
    
            tinyint[(m)] [unsigned] [zerofill]
    
                小整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -128 ~ 127.
                无符号:
                    0 ~ 255
    
                特别的: MySQL中无布尔值,使用tinyint(1)构造。
    
            int[(m)][unsigned][zerofill]
    
                整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -2147483648 ~ 2147483647
                    无符号:
                        0 ~ 4294967295
    
                特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002
    
            bigint[(m)][unsigned][zerofill]
                大整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -9223372036854775808 ~ 9223372036854775807
                    无符号:
                        0  ~  18446744073709551615
    
            decimal[(m[,d])] [unsigned] [zerofill]
                准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
    
                特别的:对于精确数值计算时需要用此类型
                       decaimal能够存储精确值的原因在于其内部按照字符串存储。
    
            FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
                单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                    无符号:
                        -3.402823466E+38 to -1.175494351E-38,
                        0
                        1.175494351E-38 to 3.402823466E+38
                    有符号:
                        0
                        1.175494351E-38 to 3.402823466E+38
    
                **** 数值越大,越不准确 ****
    
            DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
                双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
    
                    无符号:
                        -1.7976931348623157E+308 to -2.2250738585072014E-308
                        0
                        2.2250738585072014E-308 to 1.7976931348623157E+308
                    有符号:
                        0
                        2.2250738585072014E-308 to 1.7976931348623157E+308
                **** 数值越大,越不准确 ****
    
    
            char (m)
                char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
                PS: 即使数据小于m长度,也会占用m长度
            varchar(m)
                varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
    
                注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
    
            text
                text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
    
            mediumtext
                A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
    
            longtext
                A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.
    
    
            enum
                枚举类型,
                An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
                示例:
                    CREATE TABLE shirts (
                        name VARCHAR(40),
                        size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                    );
                    INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
    
            set
                集合类型
                A SET column can have a maximum of 64 distinct members.
                示例:
                    CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                    INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
    
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
    
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59')
    
            YEAR
                YYYY(1901/2155)
    
            DATETIME
    
                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)
    
            TIMESTAMP
    
                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
    数据类型

     更多参考:

    http://www.runoob.com/mysql/mysql-data-types.html

    http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html

     五、表内容操作

    1、增
    
    insert into 表 (列名,列名...) values (值,值,值...)
    insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
    insert into 表 (列名,列名...) select (列名,列名...) from 表
    2、删
    
    delete from 表
    delete from 表 where id=1 and name='alex'
    3、改
    
    
    update 表 set name = 'alex' where id>1
    4、查
    
    select * from 表
    select * from 表 where id > 1
    select nid,name,gender as gg from 表 where id > 1
    

    其他:

    a、条件
    
    select 列名 from (表名)   查看数据 
    
    select * from (表名)where nid >1 and name!=‘alex’
    
    select * from(表名) where nid between 5 and 12   查找nid 为5-12之间值
    
    select * from yiduiduo where nid in (1,2,3,4)    查找范围
    
    select * from 表名 where nid not in (1,2,3,4) 不再范围内的值
    
    select * from t1 where nid in (select nid from t2 )   相当于动态的创建集合
    
     
    b、通配符
        select * from 表 where name like 'ale%'  - ale开头的所有(多个字符串)
        select * from 表 where name like 'ale_'  - ale开头的所有(一个字符)
     
    c、限制
        select * from 表 limit 5;            - 前5行
        select * from 表 limit 4,5;          - 从第4行开始的5行
        select * from 表 limit 5 offset 4    - 从第4行开始的5行
     
    d、排序
        select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
        select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
        select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
     
    e、分组
         select department from 表名 group by department  获取组
         select department,count(department) from 表名 group by department        以department进行分组,并显示分组后department 中数据种类的个数
    select 字段1 from 表名 group by 字段2--------以字段2进行分组的时候,查询的是字段1中的数据,默认是把字段中小的值取出来
            select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
            select count(字段1),sum(字段1),max(字段1),min(字段1),avg(字段1) from 表名  group by 字段2
    select num,nid from 表  where nid > 10 group by num,nid order by nid desc 获取表中所有大于10 的数据组;
         
         select count(username),sum(username),max(username),min(username) from userinfo group by nid;
    
    
            select count(字段1),sum(字段1),max(字段1),min(字段1),avg(字段1) from 表名  group by 字段2 having  max(字段1)>1;
            ----------->如果想用聚合条件作为条件的话,必须使用having
    
        特别的:group by 必须在where之后,order by之前
     
    f、连表
        无对应关系则不显示
        select A.num, A.name, B.name
        from A,B
        Where A.nid = B.nid
     
        无对应关系则不显示
        select A.num, A.name, B.name
        from A inner join B
        on A.nid = B.nid
     
        A表所有显示,如果B中无对应关系,则值为null
        select A.num, A.name, B.name
        from A left join B
        on A.nid = B.nid
     
        B表所有显示,如果B中无对应关系,则值为null
        select A.num, A.name, B.name
        from A right join B
        on A.nid = B.nid
     
    g、组合
        组合,自动处理重合
        select nickname
        from A
        union
        select name
        from B
     
        组合,不处理重合
        select nickname
        from A
        union all
        select name
        from B
    

    =====

     更多详情 请参考:http://www.cnblogs.com/wupeiqi/articles/5713315.html

  • 相关阅读:
    hdu 1074
    hdu 4091
    hdu 4422
    hdu 3940
    hdu 2831
    hdu 1172
    hdu 3732
    hdu 1250
    hud 2073
    IOS socket基于tcp/udp的通信
  • 原文地址:https://www.cnblogs.com/guokaixin/p/5743799.html
Copyright © 2020-2023  润新知