一、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服务端

  1. sudo apt-get install mysql-server

2.安装mysql客户端

  1. sudo apt-get install mysql-client

三、登陆Mysql

1.从本机登录mysql

  1. mysql -u root -p

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

2.从其它主机登录到mysql

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

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

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

  1. #bind-address = 127.0.0.1

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

  1. mysql> show databases;  
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | school |
  9. | sys |
  10. | test |
  11. +--------------------+
  12. rows in set (0.03 sec)
  13.  
  14. mysql> use mysql;
  15. Reading table information for completion of table and column names
  16. You can turn off this feature to get a quicker startup with -A
  17.  
  18. Database changed
  19. mysql> grant all privileges on *.* to root@'%' identified by '' with grant option;
  20. Query OK, rows affected, warning (0.03 sec)
  21.  
  22. mysql>

从其它主机登录mysql。

  1. mysql -u root -h 192.168.40.1 -p

四、操作mysql数据库

数据库命令:

1.显示数据库

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

默认数据库:

mysql:用户权限相关数据

information_schema:mysql本身框架相关数据

2.创建数据库

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

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

3.使用数据库

  1. mysql> use 数据库名称;

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

  1. mysql> show 数据库名称;

5.删除数据库

  1. mysql> drop database 数据库名称;

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

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

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

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

表操作:

1.创建表

基本格式:

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

例:

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

    注意:

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

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

  • 主键:是一种索引

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

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

    1.        create table tb1(
    2. nid int not null,
    3. num int not null,
    4. primary key(nid,num)
    5. )
  • 外键

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

    • 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.删除表

  1. 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 from where id1 and name'oliver'  #删除符合条件的数据

3.更新数据

  1. update set name 'oliver' where id=1

4.查询数据

  1. select * from
  2. select * from where id > 1
  3. select nid,name,gender as gg from where id > 1

(1)条件

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

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

  1. select * from where name like 'oliv%' # oliv开头的所有(多个字符串)
  2. select * from where 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 * from order by asc - 根据 “列” 从小到大排列
  2. select * from order by desc - 根据 “列” 从大到小排列
  3. select * from order by 1 desc,列2 asc - 根据 “列1 从大到小排列,如果相同则按列2从小到大排序

(5)分组(去重)

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

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

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

(6)连表

  1. select A.num, A.name, B.name
  2. from A,B
  3. where A.nid = B.nid  #指定两张表的对应关系

无对应关系则不显示:

  1. select A.num, A.name, B.name
  2. from A inner join B
  3. on A.nid = B.nid

A表所有显示,如果B中无对应关系,则值为null:

  1. select A.num, A.name, B.name
  2. from A left join B
  3. on A.nid = B.nid

B表所有显示,如果B中无对应关系,则值为null:

  1. select A.num, A.name, B.name
  2. from A right join B
  3. on A.nid = B.nid

(7)组合

组合,自动处理重合

  1. select nickname
  2. from A
  3. union
  4. select name
  5. from B

组合,不处理重合

  1. select nickname
  2. from A
  3. union all
  4. select name
  5. from B

Mysql(一)的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  3. LINUX篇,设置MYSQL远程访问实用版

    每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...

  4. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  10. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

随机推荐

  1. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

  2. C语言程序设计第十一次作业

    同学们,一晃一个学期就过去了,第一节课时,我曾做过一个调查,没有一个同学在中学阶段接触过程序设计,也就是说,那时,大家都是零基础,或许只是听说过"C语言"这个词,但其他便一无所知了 ...

  3. JPA 各种基本用法

    查询部分属性 通常来说,都是针对 Entity 类的查询,返回的也是被查询的 Entity 类的实体.J P QL 也允许我们直接查询返回我们需要的属性,而不是返回整个 Entity .在一些 Ent ...

  4. HTTP协议用的TCP但是只建立单向连接

    作者:IronTech链接:https://www.zhihu.com/question/20085992/answer/71742030来源:知乎著作权归作者所有,转载请联系作者获得授权. 下面的解 ...

  5. 面试题12:打印1到最大的n位数

    // 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...

  6. 虚机centos和本机Windows之间文件的拷贝无法用xftp时用FileZilla也行

    步骤如下: 1.如果Centos没有安装ssh,则需要先安装: 2.查看虚拟机中IP地址,命令如下: ifconfig 3.在windows中安装ftp软件 FileZilla启动软件如图: 6  这 ...

  7. [解决方案] pythonchallenge level 0

    http://www.pythonchallenge.com/pc/def/0.html 问题: 2^38 >>> 2**38 >>>274877906944L 输 ...

  8. 自定义Toast解决快速点击时重复弹出,排队无止尽

    解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 * ...

  9. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)

    1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...

  10. Canvas基础

    1.1. 什么是 Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提 ...