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 |
+--------------------+
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 '' with grant option;
Query OK, rows affected, 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)
- )
- create table fruit(
- 默认值:
在创建表时,可以为列指定默认值,当插入数据时如果未设置值,则自动添加默认值。
2.删除表
mysql> drop table 表名;
3.清空表中的数据delete和truncate两种方法清空表,truncate效率更高。
mysql> delete from 表名;
mysql> truncate table 表名;
4.修改表
(1)修改表名
mysql> alter table 表名 rename 新表名;
(2)添加列
mysql> alter table 表名 add 列名 类型;
(3)删除列
mysql> alter table 表名 drop column 列名;
(4)修改列
mysql> alter table 表名 modify column 列名 类型; #仅修改列的类型
mysql> alter table 表名 change 原列名 新列名 类型; #修改列名和类型
(5)添加主键
mysql> alter table 表名 add primary key(列名);
(6)删除主键
mysql> alter table 表名 drop primary key;
(7)添加外键
mysql> alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
(8)删除外键
mysql> alter table 表名 drop foreign key 外键名称
(9)修改默认值
mysql> alter table 表名 alter 列名 set default 默认值;
(10)删除默认值
mysql> alter table 表名 alter 列名 drop default;
5.查看表结构
mysql> desc 表名;
数据操作:
1.插入数据
insert into 表 (列名,列名...) values (值,值,值...) #插入单条数据
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) #插入多条数据
insert into 表1 (列名,列名...) select (列名,列名...) from 表2 #将表2中查询到的数据插入到表1
2.删除数据
delete from 表 #清空表中的数据
delete from 表 where id=1 and name='oliver' #删除符合条件的数据
3.更新数据
update 表 set name = 'oliver' where id=1
4.查询数据
select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1
(1)条件
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 表)
(2)通配符(模糊查询)
select * from 表 where name like 'oliv%' # oliv开头的所有(多个字符串)
select * from 表 where name like 'oliv_' # oliv开头的所有(一个字符)
(3)限制
可用来做分页。
select * from 表 limit 5; - 前5行
select * from 表 limit 4,5; - 从第4行开始的5行
select * from 表 limit 5 offset 4 - 从第4行开始的5行
(4)排序
select * from 表 order by 列 asc - 根据 “列” 从小到大排列
select * from 表 order by 列 desc - 根据 “列” 从大到小排列
select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
(5)分组(去重)
group by 必须在where之后,order by之前。
聚合函数:count(),sum(),max(),min(),avg()
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 select num from 表 group 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
Mysql(一)的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
- LINUX篇,设置MYSQL远程访问实用版
每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
随机推荐
- php 目录函数和日期函数
continue . break . exit目录函数opendir(); 打开一个文件夹is_file 只判断文件是否存在: file_exists 判断文件是否存在或者是目录是否存在: is_di ...
- [C++中级进阶]001_C++0x里的完美转发到底是神马?
[C++中级进阶]001_C++0x里的完美转发到底是神马? 转载至:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/01/10/285 ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-02
一步一步搭框架(asp.netmvc+easyui+sqlserver)-02 我们期望简洁带前台代码,如下: <table id="dataGrid" class=&quo ...
- 解决protobuf不能直接在IOS上使用,利用protobuf-net在IOS上通讯
---------------------------------------------------------------------------------------------------- ...
- C++ const
在程序中经常遇到const,但是对他还不是非常了解,今天看到一篇文章讲挺好的,所以复制过来了.... 原文链接:http://blog.csdn.net/Eric_Jo/article/details ...
- C++ 四种类型转换
在写代码中经常会有很多的隐式类型转换或显式类型转换. 对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换 ...
- Best Coder Round#25 1003 树的非递归访问
虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”. 但这棵树的搭建堪忧 ...
- django文件批量上传-简写版
模板中创建表单 <form method='post' enctype='multipart/form-data' action='/upload/'> <input type='f ...
- 开源框架中常用的php函数
类的自动加载后直接实例化 //自动加载类 function my_autoloader($class) { include $class . 'Class.php'; } spl_autoload_r ...
- JAVA深入研究——Method的Invoke方法。
在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java ...