mysql-primary

[TOC]

服务器端安装

  • 安装服务器端:在终端中输入如下命令,回车后,然后按照提示输入

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表示自动增长
1
2
3
4
5
6
7
8
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;

  • 修改表-修改字段:重命名版
table 表名 change 原名 新名 类型及约束;
1
2
例:
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

本文地址:https://tonysteven.github.io/2016/12/10/mysql-primary/
转载请注明出处,谢谢!

坚持原创技术分享,您的支持将鼓励我继续创作!