zoukankan      html  css  js  c++  java
  • Mysql(一)

    一、Mysql简介

    Mysql是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下。特点:其体积小、速度快、开源。

    分为社区办和商业版,其社区版性能卓越。

    二、Ubuntu 16.04下安装mysql

    Windows下安装mysql:http://www.cnblogs.com/HurryXin/p/6181661.html

    解决1820错误:http://www.cnblogs.com/bigshow1949/p/5522427.html

    1.安装mysql服务端

    sudo apt-get install mysql-server

    2.安装mysql客户端

    sudo apt-get install mysql-client

    三、登陆Mysql

    1.从本机登录mysql

    mysql -u root -p

    然后输入root用户密码,进入mysql命令行。

    2.从其它主机登录到mysql

    登录之前,需要对mysql进行设置,允许其它主机登录。

    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

    编辑mysql配置文件,注释或删除bind-address行。

    #bind-address           = 127.0.0.1

    设置允许所有主机连接到mysql。

    mysql> show databases;  
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | school             |
    | sys                |
    | test               |
    +--------------------+
    6 rows in set (0.03 sec)
    
    mysql> use mysql;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> grant all privileges on *.* to root@'%' identified by '123456' with grant option;
    Query OK, 0 rows affected, 1 warning (0.03 sec)
    
    mysql> 

    从其它主机登录mysql。

    mysql -u root -h 192.168.40.1 -p

    四、操作mysql数据库

    数据库命令:

    1.显示数据库

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+

    默认数据库:

    mysql:用户权限相关数据

    information_schema:mysql本身框架相关数据

    2.创建数据库

    创建数据库并指定默认字符集为UTF8。

    mysql> create database 数据库名称 default charset utf8 collate utf8_general_ci;

    3.使用数据库

    mysql> use 数据库名称;

    4.查看当前数据库中所有的表

    mysql> show 数据库名称;

    5.删除数据库

    mysql> drop database 数据库名称;

    6.导出现有数据库数据:

    • mysqldump -u用户名 -p密码 数据库名称 >导出文件路径           # 结构+数据
    • mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径       # 结构 

    7.导入现有数据库数据:

    mysqldump -uroot -p密码  数据库名称 < 文件路径

    表操作:

    1.创建表

    基本格式:

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

    例:

    create table class(
         cid int not null auto_increment primary key,
         caption varchar(20)
    )engine=innodb default charset=utf8;
    • 是否可以为空:不指定,默认可以为空。null表示可空,not null表示不能为空。
    • 自增:auto_increment,如果该列为自增列,则在插入数据时,无需设置此列数据,一张表中只能有一个自增列。

        注意:

        (1)自增列必须是索引。

        (2)自增列可以设置步长和起始值。

    • 主键:是一种索引

      主键为单列,则该列的值必须唯一,不能重复。

          主键为多列,则多列组合必须唯一。

             create table tb1(
                      nid int not null,
                      num int not null,
                      primary key(nid,num)
                  )
    • 外键

      限制该列只能插入所参考表指定内容。

      • 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)
        • )
    • 默认值

        在创建表时,可以为列指定默认值,当插入数据时如果未设置值,则自动添加默认值。

    2.删除表

    mysql> drop table 表名;

    3.清空表中的数据delete和truncate两种方法清空表,truncate效率更高。

    1 mysql> delete from 表名;
    2 mysql> truncate table 表名;

    4.修改表

    (1)修改表名

    1 mysql> alter table 表名 rename 新表名;

    (2)添加列

    1 mysql> alter table 表名 add 列名 类型;

    (3)删除列

    1 mysql> alter table 表名 drop column 列名;

    (4)修改列

    1 mysql> alter table 表名 modify column 列名 类型;  #仅修改列的类型
    2 mysql> alter table 表名 change 原列名 新列名 类型;  #修改列名和类型

    (5)添加主键

    1 mysql> alter table 表名 add primary key(列名);

    (6)删除主键

    1 mysql> alter table 表名 drop primary key;

    (7)添加外键

    1 mysql> alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);

    (8)删除外键

    1 mysql> alter table 表名 drop foreign key 外键名称

    (9)修改默认值

    1 mysql> alter table 表名 alter 列名 set default 默认值;

    (10)删除默认值

    1 mysql> alter table 表名 alter 列名 drop default

    5.查看表结构

    1 mysql> desc 表名;

    数据操作:

    1.插入数据

    1 insert into 表 (列名,列名...) values (值,值,值...)  #插入单条数据
    2 insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)  #插入多条数据
    3 insert into 表1 (列名,列名...) select (列名,列名...) from 表2  #将表2中查询到的数据插入到表1

    2.删除数据

    1 delete from 表    #清空表中的数据
    2 delete fromwhere id=1 and name='oliver'  #删除符合条件的数据

    3.更新数据

    1 updateset name = 'oliver' where id=1 

    4.查询数据

    1 select * from2 select * fromwhere id > 1
    3 select nid,name,gender as gg fromwhere id > 1

    (1)条件

    1 select * fromwhere id > 1 and name != 'alex' and num = 12;
    2  
    3 select * fromwhere id between 5 and 16;
    4  
    5 select * fromwhere id in (11,22,33)
    6 select * fromwhere id not in (11,22,33)
    7 select * fromwhere id in (select nid from 表)

    (2)通配符(模糊查询)

    1 select * fromwhere name like 'oliv%'  # oliv开头的所有(多个字符串)
    2 select * fromwhere name like 'oliv_'  # oliv开头的所有(一个字符)

    (3)限制

    可用来做分页。

    1 select * from 表 limit 5;            - 前5行
    2 select * from 表 limit 4,5;          - 从第4行开始的5行
    3 select * from 表 limit 5 offset 4    - 从第4行开始的5行

    (4)排序

    1 select * fromorder byasc              - 根据 “列” 从小到大排列
    2 select * fromorder bydesc             - 根据 “列” 从大到小排列
    3 select * fromorder by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序

    (5)分组(去重)

    group by 必须在where之后,order by之前。

    聚合函数:count(),sum(),max(),min(),avg()

    1 select num fromgroup by num
    2 select num,nid fromgroup by num,nid
    3 select num,nid fromwhere nid > 10 group by num,nid order nid desc
    4 select num,nid,count(*),sum(score),max(score),min(score) fromgroup by num,nid
    5  
    6 select num fromgroup by num having max(id) > 10

    (6)连表

    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

    (7)组合

    组合,自动处理重合

    select nickname
    from A
    union
    select name
    from B

    组合,不处理重合

    select nickname
    from A
    union all
    select name
    from B

     

  • 相关阅读:
    表的相关操作
    存储引擎介绍
    库的相关操作
    初始数据库
    linux版本的mysql安装
    mysql在windows上的安装即配置
    线程实际操作篇
    用户模板和用户场景
    顶会热词统计
    移动端疫情展示
  • 原文地址:https://www.cnblogs.com/pyramid1001/p/5988891.html
Copyright © 2011-2022 走看看