服务器端安装
- 安装服务器端:在终端中输入如下命令,回车后,然后按照提示输入
sudo apt-get install mysql-server
- 启动服务
sudo service mysql start
- 停止服务
sudo service mysql stop
- 重启服务
sudo service mysql restart
配置
配置文件目录为/etc/mysql/mysql.cnf
主要配置项如下
bind-address表示服务器绑定的ip,默认为127.0.0.1
port表示端口,默认为3306
datadir表示数据库目录,默认为/var/lib/mysql
general_log_file表示普通日志,默认为/var/log/mysql/mysql.log
log_error表示错误日志,默认为/var/log/mysql/error.log
客户端
图形化界面客户端navicat
- 进入解压的目录,运行如下命令
./start_navicat
问题一:中文乱码
解决:打开start_navicat文件
将export LANG="en_US.UTF-8"改为export LANG="zh_CN.UTF-8"
- 问题二:试用期
- 解决:删除用户目录下的.navicat64目录
cd ~
rm -r .navicat64
- 详细连接的命令可以查看帮助文档
命令行连接
在工作中主要使用命令操作方式,要求熟练编写
打开终端,运行命令
mysql -uroot -p
回车后输入密码
或后面直接加您的密码
- 登录成功后,输入如下命令查看效果
查看版本:select version();
显示当前时间:select now();
数据库
- 查看所有数据库
show databases;
- 使用数据库
use 数据库名;
- 查看当前使用的数据库
select database();
- 创建数据库
create database 数据库名 charset=utf8;
- 删除数据库
drop database python;
数据表
- 查看当前数据库中所有表
show tables;
- 查看表结构
desc 表名;
- 创建表
- auto_increment表示自动增长
CREATE TABLE table_name( column1 datatype contrai, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY(one or more columns) );
`– 例:创建班级表
create table classes(
id int unsigned auto_increment primary key not null,
name varchar(10)
);
例:创建学生表
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','人妖','保密'),
cls_id int unsigned default 0
)
- 修改表-添加字段
alter table students add birthday datetime;
- 修改表-修改字段:重命名版
alter table 表名 change 原名 新名 类型及约束;
例:
alter table students change birthday birth datetime not null;
- 修改表-修改字段:不重命名版
alter table 表名 modify 列名 类型及约束;
例:
alter table students modify birth date not null;
- 修改表-删除字段
alter table 表名 drop 列名;
例:
alter table students drop birthday;
- 查看表的创建语句
show create table 表名;
例:
show create table classes;
增删改查(curd)
查询基本使用
- 查询所有列
select * from 表名;
例:
select * from classes;
- 查询指定列
- 可以使用as为列或表指定别名
select 列1,列2,… from 表名;
例:
select id,name from classes;
增加
insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2');
insert into classes values(0,’python1’),(0,’python2’);
insert into students(name) values(‘杨康’),(‘杨过’),(‘小龙女’);
修改
update students set gender=0,hometown=’古墓’ where id=5;
删除
delete from students where id=5;
备份
mysqldump –uroot –p 数据库名 > python.sql;
恢复
mysql -uroot –p 新数据库名 < python.sql
聚合函数
例1:查询学生总数
select count(*) from students;
例2:查询女生的编号最大值
select max(id) from students where gender=0;
例3:查询未删除的学生最小编号
select min(id) from students where isdelete=0;
例4:查询男生的编号之和
select sum(id) from students where gender=1;
例5:查询未删除女生的编号平均值
select avg(id) from students where isdelete=0 and gender=0;
分组
- 例1:查询男女生总数
select gender as 性别,count(*)
from students
group by gender;
对比where与having
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
分页
- 语法
select * from 表名
limit start,count
select * from students
where gender=1
limit 0,3;
子查询(sub query)
标量子查询
- 查询班级学生的平均身高
select * from students where age > (select avg(age) from students);
列级子查询
- 查询还有学生在班的所有班级名字
select name from pythons where id in (select cls_id from students);
行级子查询
- 需求: 查找班级年龄最大,身高最高的学生
select * from students where (height,age) = (select max(height),max(age) from students);
表级子查询
- 查询学生与班级对应的信息
select * from
(select stu.*,pys.name as clsname from students as stu inner join pythons as pys on stu.cls_id = pys.id)
as t1;
子查询中特定关键字使用
in
any|some
SELECT * FROM classes WHERE id = any(SELECT DISTINCT cls_id FROM students);
- all
SELECT * from classes WHERE id != ALL (SELECT DISTINCT cls_id FROM students WHERE cls_id BETWEEN 2 and 4);
完整sql语句
SELECT select_expr [,select_expr,...] [
FROM tb_name
[WHERE 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count