zoukankan      html  css  js  c++  java
  • Mysql

    windows服务

    初始化

    mysqld --initialize-insecure

    安装/移除MySQL的windows服务

    mysqld --install    #安装windows服务
    mysqld --remove  #移除windows服务

    启动/停止windows服务

    net start mysql    #启动windows服务
    net stop mysql    #停止windows服务

    破解密码

    跳过授权表来开启服务器

    mysqld --skip-grant-tables

    统一字符串编码

    配置my.ini文件

    [mysqld]
    # 设置mysql的安装目录 **后面的路径一定是安装sql的目录(自己电脑的)**
    basedir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64
    # 设置mysql数据库的数据的存放目录,必须是data
    datadir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64data        
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # mysql端口 port=3306 # 字符集 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 #设置完后使用/s;查看配置结果

    注;若是配置完后,mysql的windows服务无法启动的话,解决方法是将配置信息中的两个路径中的""换成"/"

    管理员登录

    mysql -uroot -p

    创建用户

    create user 'xxx'@'ip地址' indentified by '密码' #可用%代替全部

    授权

    grant 权限
    grant all priviliges on *.* to 'xxx'@'%';    #授予全部权限
    revoke all priviliges on *.* from 'xxx'@'%';  #移除

    sql命令

    选择用户
    select user();
    查看所有的数据库
    show databases;
    创建数据库
    create database 名字;
    创建表
    create table 名字(id int,name char(10));
    为表添加数据
    insert into 表名 (id name) values(1 aaa),(2 bbb);

    sql的基本语法

    查看所有的表
    show tables;
    查看表的详细结构
    desc 表名;
    查看表的内容
    select * from 表名;
    select id,name from 表名;
    select * from 表名 where id=1;
    关系型数据库:mysql db2 oricle sqlite  表中存储                
    非关系型数据库:monogodb redis
        key : value  基于model 模型  obj.insert    

    复制表的结构和数据

    create table 表名 select * from 库名.表名;

    只复制表结构

    create table 表名 select * from 库名.表名 where 1>2;
    create table 表名 like 库名.表名;

    储存引擎

    mysql 5.5版本之后默认为innodb存储引擎
    另外还有mysiam、memory、blackhone
    #memory,在重启mysql或者重启机器后,表内数据清空
    #blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

    数据类型

    数字

    整型
    thinyint int bigint
    小数
    float 在位数比较短的情况下不精准
    double  在位数比较长的情况下不精准
    decimal  推荐使用 精准内部原理是以字符串的形式去存

    字符串

    char(10):浪费空间,存储速度快
    varchar:精准,节省空间,存储速度慢
    sql优化:创建表时,定长的类型往前放,变长的往后放
                比如性别           比如地址或描述信息       
    >255个字符,超了就把文件路径存放到数据库中。
            比如图片,视频等找一个文件服务器,数据库中只存路径或url。 

    时间类型

    语法:
            YEAR
                YYYY(1901/2155)
    
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
    
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59'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 年某时)

    now() sql的内置函数,根据数据类型生成对应的时间格式

    枚举类型与集合类型

    enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

    set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

    create table consumer(
        -> id int,
        -> name varchar(50),
        -> sex enum('male','female','other'),
        -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
        -> fav set('play','music','read','study') #在指定范围内,多选多
        -> );

    整型

    默认是signed 有符号的 范围 -128~127
        sql中没有boolean类型 使用tinyint(1)来表示boolean值 1 表示true 0 表示false
    -- int 类型后面的存储是显示宽度而不是存储宽度,其它的数据类型都是存储宽度
        所以我们来设计表的时候 int类型的字段不用加显示宽度,默认是总长度的位数+1

    函数

    now() 根据字段的数据类型获取当前的时间格式
    char_length: 获取字符长度
    length():获取字节数
                               
    sql中默认是有符号的
        如果设置无符号unsigned
        用0填充 zefofill

    约束

     not null 与 default

    create table tb1(id int not null default 2,name char(20) not null);
    not null #设置不能为空
    default #设置默认值

    unique

    单列唯一

    create table dep(id int not null,name varchar(20) unique);
    # name不能重复

    多列唯一 表示每一列都唯一

    create table dep2(id int unique,name varchar(20) unique);
    # id与name都不能重复

    组合唯一 (联合唯一) 只要有一列不同,就可以插入数据

    create table dep3(
                d int,
                name varchar(20),
                unique(id,name)        
                );

    primary key (索引优化查询)

    sql版本中,一张表中只允许有一个主键,通常都是id,cid,nid,sid

    AUTO_INCREMENT    #标识该字段的值自动增长(整数类型,而且为主键)
    主键 primary key

     primary key (索引优化)

      key 查询优化

    一个表中可以:

    单列做主键
    多列做主键(复合主键)

    约束:等价于 not null unique,字段的值不为空且唯一

    存储引擎默认是(innodb):对于innodb存储引擎来说,一张表必须有一个主键。

     单表查询

    where    指定条件
    group by    分组
    having    过滤(having后面的字段只能是分组之后的字段)
    distinct    去重
    order by     排序(asc升序/desc降序)
    limit    限制显示条数(第一个参数为开始位置,第二个参数为显示数量)

    关键字的执行优先级

    from
    where
    group by
    having
    select
    distinct
    order by
    limit

    聚合函数

    count(1) 计算总个数
    avg()
    sum()
    max()
    min()

    多表查询

    连接匹配的行
        inner join
    优先显示左记录表
        left join
    优先显示右记录表
        right join
    全外连接
         select * from employee left join department on employee.dep_id = department.id
        union
        select * from employee right join department on employee.dep_id = department.id

     

  • 相关阅读:
    在Oracle中计算两个日期间隔的天数、月数和年数
    洛谷P1182 数列分段 Section II(二分+贪心)
    BZOJ1734 [Usaco2005 feb]Aggressive cows 愤怒的牛(二分答案+贪心)
    分治算法
    洛谷P1031 [NOIP2002]均分纸牌
    洛谷P1803 凌乱的yyy / 线段覆盖
    洛谷P1094 [NOIP2007]纪念品分组
    洛谷P1223 排队接水
    洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk
    洛谷P1181 数列分段Section1
  • 原文地址:https://www.cnblogs.com/jiaqi-666/p/9791689.html
Copyright © 2011-2022 走看看