• Python-Basis-21th


    周一,晴,记录生活分享点滴

    参考博客1:https://www.cnblogs.com/wupeiqi/articles/5713315.html

    参考博客2:https://www.cnblogs.com/Eva-J/articles/9676220.html

    MySQL安装、启动、基础配置

    Windows版本   Mac版本   Linux版本

    MySQL数据库操作

    概念

    数据库 --相当于--> 文件夹

    数据库表 --相当于--> 文件

    数据行 --相当于--> 文件中的一行数据

    启动&连接

    启动服务器

    【Windows】net start mysql 或 C:MySQLmysql-5.6.48-winx64mysql

    【Linux 或 Mac】mysql.server start 

    【制作启动文件】/etc/init.d/mysql start 

    客户端连接

    第一步:输入用户名和密码

    C:MySQLmysql-5.6.48-winx64mysql -u root -p 
    #
    mysql -u root -p

    第二步:命令操作

    show databases;  # 查看当前Mysql都有那些数据,根目录都有那些文件夹
    
    create database 数据库名;  # 创建文件夹
    
    use 数据库名;  # 使用选中数据库,进入目录
    
    show tables;  # 查看当前数据库下都有那些表,
    
    create table 表名(nid int,name varchar(20), pwd varchar(64));  # 创建数据库表
    
    select * from 表名;  # 查看表中的所有数据
    
    insert into 表名(nid,name,pwd) values(1,'chung','123');  # 插入数据

    用户&授权

    用户管理特殊命令

    # 创建用户
        create user '用户名'@'IP地址' identified by '密码';
    # 删除用户
        drop user '用户名'@'IP地址';
    # 修改用户
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
    # 修改密码
        set password for '用户名'@'IP地址' = Password('新密码');

    权限

    默认没有权限

    # 授权
    grant 权限 on 数据库.表 to '用户'@'IP地址' 
    
    '''
    1.权限:select 授予查看
    2.数据库.表:
        test.tb1  查看test数据库中的tb1表
        test.*  查看test数据库中的所有表
        *.*  查看所有数据库中的所有表
    3.'用户'@'IP地址':chung@localhost
    '''
    all privileges          # 除grant外的所有权限
    select                  # 仅查权限
    select,insert           # 查和插入权限
    ...
    usage                   # 无访问权限
    alter                   # 使用alter table
    alter routine           # 使用alter procedure和drop procedure
    create                  # 使用create table
    create routine          # 使用create procedure
    create temporary tables # 使用create temporary tables
    create user             # 使用create user、drop user、rename user和revoke  all privileges
    create view             # 使用create view
    delete                  # 使用delete
    drop                    # 使用drop table
    execute                 # 使用call和存储过程
    file                    # 使用select into outfile 和 load data infile
    grant option            # 使用grant 和 revoke
    index                   # 使用index
    insert                  # 使用insert
    lock tables             # 使用lock table
    process                 # 使用show full processlist
    select                  # 使用select
    show databases          # 使用show databases
    show view               # 使用show view
    update                  # 使用update
    reload                  # 使用flush
    shutdown                # 使用mysqladmin shutdown(关闭MySQL)
    super                   # 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
    replication client      # 服务器位置的访问
    replication slave       # 由复制从属使用
    对于权限
    # 对于目标数据库以及内部其他:
    数据库名.*        # 数据库中的所有
    数据库名.表       # 指定数据库中的某张表
    数据库名.存储过程  # 指定数据库中的存储过程
    *.*              # 所有数据库
    对于数据库
    用户名@IP地址        # 用户只能在改IP下才能访问
    用户名@192.168.1.%  # 用户只能在改IP段下才能访问(通配符%表示任意)
    用户名@%            # 用户可以再任意IP下访问(默认IP地址为%)
    对于用户和IP
    grant all privileges on db1.tb1 TO '用户名'@'IP'
    
    grant select on db1.* TO '用户名'@'IP'
    
    grant select,insert on *.* TO '用户名'@'IP'
    
    revoke select on db1.tb1 from '用户名'@'IP'
    示例

    小结

    1.直接将命令发送给mysql服务端,不再重复操作文件,自动操作

    2.客户端连接(MySQL提供的客户端)

    • 第一步:mysql -u root -h 192.168.1.1 -p
    • 第二步:输入密码
    • 第三步:进行命令操作

    3.结尾使用分号;

    SQL语句·重要

    数据库操作

    # 显示数据库
    show databases;
    
    # 创建数据库
    create database 数据库名称;
    create database 数据库名称 default charset utf8 collate utf8_general_ci;
    
    # 使用数据库
    use 数据库名称;
    
    # 删除数据库
    drop database 数据库名称;

    表操作

    # 显示所有表
    show tables;
    
    # 描述表tb1所有的属性
    desc tb1;
    
    # 直接将表tb1删除
    drop table tb1; 
    
    # 清空表tb1的内容
    delete from tb1; 
    
    # 清空表tb1的内容,速度快,自增回到原点
    truncate table tb1;
    
    # 查看表tb1所有数据
    select * from tb1;

    创建表

    create table 表名(
        列名  类型  是否可以为空,
        列名  类型  是否可以为空
    )engine=innodb default charset=utf8

    是否可以为空

    # 是否可空,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)
    )
    
    '''
    主键索引:
    一张表只能有一个主键,唯一不能重复,不能为null,- 一般情况下,自增列设置主键  (1,2,3,4,5,6)
    
    唯一索引:
    可以为null,一张表可以有多个唯一列  (1,2,3,4,5,6,null)
    '''

    外键:foreign key,一对多;使两张表建立约束

    # 外键,一个特殊的索引,只能是指定内容
    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)
    )

    删除表

    drop table 表名

    清空表

    delete from 表名
    truncate table 表名

    修改表

    # 添加列:
    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;  # 给testalter_tbl表里面的i列设置默认值1000
    # 删除默认值:
    ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

    基本数据类型(表操作)

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

    数值

    二进制:bit

    bit[(M)]  
    '''
    二进制位(101001),m表示二进制位的长度(1-64),默认m=1
    '''

    整数:tinyint、int、bigint 区别是范围不一样

    tinyint[(m)] [unsigned] [zerofill]
    '''
    小整数,数据类型用于保存一些范围的整数数值范围:
    有符号:-128 ~ 127  默认有符号
    无符号:0 ~ 255  unsigned表示无符号
    特别的: 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。
    特别的:对于精确数值计算时需要用此类型
    '''

    小数:decimal、FLOAT、DOUBLE 浮点型

    decaimal  # 准确
    # create table tb13(num decmal(6,2))  # 保存数据时最多保存6位有限数字,其中小数占2位,如:8888.17
    '''
    能够存储精确值的原因在于其内部按照字符串存储。
    '''
    
    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

    char (m)  # 定长
    # 查找速度快,浪费空间
    # create table tb13(n char(7))  # 表示在硬盘或内存空间上会有7个字符的位置
    # insert ssss  # 传入4个字符,剩下的3个字符依然占用空间,不会自动减去
    # create table tb13(n char(7), b int, c int) 如果执行b,直接跳过定长的7个字符
    '''
    char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
    PS: 即使数据小于m长度,也会占用m长度
    '''

    变长:varchar、text、mediumtext、longtext

    varchar(m)  # 变长
    # 查找速度相对char慢,节省空间
    # create table tb13(n varchar(7))  # 表示最多占7个字符,如果有4个,就占4个位置
    # create table tb13(n varchar(7), b int, c int) # 变长不确定占的字符数,跳得步数不一定,需要先查看字符数,多增加一个步骤
    '''
    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.
    '''

    特殊的二进制数据:TinyBlob、Blob、MediumBlob、LongBlob(不常用)

    TinyBlob、Blob、MediumBlob、LongBlob
    # 上传文件 强制二进制方式
    # 以字符串方式代替强制二进制方式  varchar(65),"D:hello.avi" 将上传的文件保存在硬盘上 D:hello.avi

    时间

    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 年某时)

    enum(单选)、set(多选)

    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');  
    # 可以选一个或多个
    '''

    数据行操作·重点

    insert into 表 (列名,列名...) values (值,值,值...)
    insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
    insert into 表 (列名,列名...) select (列名,列名...) from

    delete from 表
    delete from 表 where id=1 and name='alex'  # and or

    update 表 set name = 'alex' where id>1

    select * from 表
    select * from 表 where id > 1  # > < >= <= !=
    select nid,name,gender as gg from 表 where id > 1  # 查看nid,name,gender列

    其他

    # a、条件
        select * from 表 where id > 1 and name != 'alex' and num = 12;
        select * from 表 where id between 5 and 16;
        select * from 表 where id in (11,22,33)  # 包含
        select * from 表 where id not in (11,22,33)  # 不包含
        select * from 表 where id in (select nid from 表)
     
    # b、通配符
        select * from 表 where name like 'chung%'  - chung开头的所有(多个字符串)
        select * from 表 where name like 'chung_'  - chung开头的所有(一个字符)
     
    # 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 num from 表 group by num
        select num,nid from 表 group by num,nid
        select num,nid from 表  where nid > 10 group by num,nid order nid desc
        select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
        # 聚合函数:max取最大值、min取最小值、sum取和、count计算个数
        # select num as a,nid as b ... 表示给num起了别名a,nid起了别名b 
        
        select num from 表 group by num having max(id) > 10
        # 对聚合条件进行筛选必须用having
        # 特别的:group by 必须在where之后,order by之前
     
    # f、连表
        # 无对应关系则不显示
        select A.num, A.name, B.name
        from A,B
        
        # where
        select A.num, A.name, B.name
        from A,B
        Where A.nid = B.nid
        
        #【优先用】left...(outer)join 以左边的表为基准
        # A表所有显示,如果B中无对应关系,则值为null
        select A.num, A.name, B.name
        from A left join B
        on A.nid = B.nid
        
        # right...(outer)join 以右边的表为基准
        # B表所有显示,如果B中无对应关系,则值为null
        select A.num, A.name, B.name
        from A right join B
        on A.nid = B.nid
       
        # inner...join 永远不会出现null
        select A.num, A.name, B.name
        from A inner 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
  • 相关阅读:
    3 Steps to Perform SSH Login Without Password Using sshkeygen & sshcopyid
    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
    Ubuntu 取消 Apache及MySQL等自启动
    linux screen 命令详解
    Ubuntu把家目录文件夹名称改为英文
    Ubuntu12.10 下 PPA安装搜狗输入法 for Linux
    VirtualBox虚拟机后台运行
    Ubuntu下安装jdk
    [整理篇]linux加入windows域之完美方案
    pxe 远程安装linux系统
  • 原文地址:https://www.cnblogs.com/chungzhao/p/13124742.html
Copyright © 2020-2023  润新知