mysql快速入门基本使用以及命令大全

RDBMS
Relational Database Management System

通过表来表示关系型

当前主要使用两种类型的数据库:关系型数据库、非关系型数据库,本部分主要讨论关系型数据库,对于非关系型数据库会在后面学习

所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

查看数据库排名:https://db-engines.com/en/ranking

关系型数据库的主要产品:

oracle:在以前的大型项目中使用,银行,电信等项目
mysql:web时代使用最广泛的关系型数据库
ms sql server:在微软的项目中使用
sqlite:轻量级数据库,主要应用在移动平台

RDBMS和数据库的关系
在这里插入图片描述
在这里插入图片描述
SQL
Structured Query Language

SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库

SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询,如select
DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete
TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
DCL:数据控制语言,进行授权与权限回收,如grant、revoke
DDL:数据定义语言,进行数据库、表的管理等,如create、drop
CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
对于web程序员来讲,重点是数据的crud(增删改查),必须熟练编写DQL、DML,能够编写DDL完成数据库、表的操作,其它语言如TPL、DCL、CCL了解即可
SQL 是一门特殊的语言,专门用来操作关系数据库
不区分大小写
学习要求
熟练掌握数据增删改查相关的 SQL 语句编写
在 Python代码中操作数据就是通过 SQL 语句来操作数据
# 创建Connection连接
conn = connect(host=‘localhost’, port=3306, user=‘root’, password=‘mysql’, database=‘python1’, charset=‘utf8’)
# 得Cursor对象
cs = conn.cursor()
# 更新
# sql = 'update students set name=“刘邦” where id=6’
# 删除
# sql = 'delete from students where id=6’

# 执行select语句,并返回受影响的行数:查询一条学生数据
sql = ‘select id,name from students where id = 7’
# sql = 'SELECT id,name FROM students WHERE id = 7’
count=cs.execute(sql)
# 打印受影响的行数
print(count)
MySQL 简介
点击查看MySQL官方网站

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品

特点
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性

支持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等

为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等

支持多线程,充分利用CPU资源

优化的SQL查询算法,有效地提高查询速度
提供多语言支持,常见的编码如GB2312、BIG5、UTF8
提供TCP/IP、ODBC和JDBC等多种数据库连接途径
提供用于管理、检查、优化数据库操作的管理工具
大型的数据库。可以处理拥有上千万条记录的大型数据库
支持多种存储引擎
MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
MySQL使用标准的SQL数据语言形式
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统
在线DDL更改功能
复制全局事务标识
复制无崩溃从机
复制多线程从机
开源 免费 不要钱 使用范围广,跨平台支持性好,提供了多种语言调用的 API

是学习数据库开发的首选
**

服务器端安装

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

sudo apt-get install mysql-server

当前使用的ubuntu镜像中已经安装好了mysql服务器端,无需再安装,并且设置成了开机自启动
服务器用于接收客户端的请求、执行sql语句、管理数据库
服务器端一般以服务方式管理,名称为mysql
启动服务
sudo service mysql start
查看进程中是否存在mysql服务
ps ajx|grep mysql
在这里插入图片描述

停止服务
sudo service mysql stop
重启服务
sudo service mysql restart
配置
配置文件目录为/etc/mysql/mysql.cnf
在这里插入图片描述

进入conf.d目录,打开mysql.cnf,发现并没有配置
进入mysql.conf.d目录,打开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

**

**数据完整性

**

一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束
数据类型
可以通过查看帮助文档查阅所有支持的数据类型
使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间
常用数据类型如下:
整数:int,bit
小数:decimal
字符串:varchar,char
日期时间: date, time, datetime
枚举类型(enum)
特别说明的类型如下:
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ’
varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
字符串text表示存储大文本,当字符大于4000时推荐使用
对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
更全的数据类型可以参考http://blog.csdn.net/anxpp/article/details/51284106
约束
主键primary key:物理上存储的顺序
非空not null:此字段不允许填写空值
惟一unique:此字段的值不允许重复
默认default:当不填写此值时会使用默认值,如果填写时以填写为准
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
说明:虽然外键约束可以保证数据的有效性,但是在进行数据的crud(增加、修改、删除、查询)时,都会降低数据库的性能,所以不推荐使用,那么数据的有效性怎么保证呢?答:可以在逻辑层进行控制
数值类型(常用)

类型 字节大小 有符号范围(Signed) 无符号范围(Unsigned)
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32768 ~ 32767 0 ~ 65535
MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215
INT/INTEGER 4 -2147483648 ~2147483647 0 ~ 4294967295
BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615
字符串

类型 字节大小 示例
CHAR 0-255 类型:char(3) 输入 ‘ab’, 实际存储为’ab ‘, 输入’abcd’ 实际存储为 ‘abc’
VARCHAR 0-255 类型:varchar(3) 输 ‘ab’,实际存储为’ab’, 输入’abcd’,实际存储为’abc’
TEXT 0-65535 大文本
日期时间类型

类型 字节大小 示例
DATE 4 ‘2020-01-01’
TIME 3 ‘12:29:59’
DATETIME 8 ‘2020-01-01 12:29:59’
YEAR 1 ‘2017’
TIMESTAMP 4 ‘1970-01-01 00:00:01’ UTC ~ '2038-01-01 00

**

命令行连接

**
在工作中主要使用命令操作方式,要求熟练编写
打开终端,运行命令
mysql -uroot -p
回车后输入密码,当前设置的密码为mysql
连接成功后如下图
在这里插入图片描述

退出登录
quit 和 exit

ctrl+d
登录成功后,输入如下命令查看效果
查看版本:select version();
显示当前时间:select now();
修改输入提示符
prompt python>
\D 完整日期
\U 使用用户

**

数据库

**
查看所有数据库
show databases;
使用数据库
use 数据库名;
查看当前使用的数据库
select database();
创建数据库
create database 数据库名 charset=utf8;
例:
create database python charset=utf8;
删除数据库
drop database 数据库名;
例:
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 表名 add 列名 类型;
例:
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;
删除表
drop table 表名;
例:
drop table students;
查看表的创建语句
show create table 表名;
例:
show create table classes;

**

增删改查(curd)

**
curd的解释: 代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)

查询基本使用
查询所有列
select * from 表名;
例:
select * from classes;
查询指定列
可以使用as为列或表指定别名
select 列1,列2,… from 表名;
例:
select id,name from classes;
增加
格式:INSERT [INTO] tb_name [(col_name,…)] {VALUES | VALUE} ({expr | DEFAULT},…),(…),…

说明:主键列是自动增长,但是在全列插入时需要占位,通常使用0或者 default 或者 null 来占位,插入成功后以实际数据为准
全列插入:值的顺序与表中字段的顺序对应
insert into 表名 values(…)
例:
insert into students values(0,’郭靖‘,1,‘蒙古’,‘2016-1-2’);
部分列插入:值的顺序与给出的列顺序对应
insert into 表名(列1,…) values(值1,…)
例:
insert into students(name,hometown,birthday) values(‘黄蓉’,‘桃花岛’,‘2016-3-2’);
上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信
全列多行插入:值的顺序与给出的列顺序对应
insert into 表名 values(…),(…)…;
例:
insert into classes values(0,‘python1’),(0,‘python2’);
insert into 表名(列1,…) values(值1,…),(值1,…)…;
例:
insert into students(name) values(‘杨康’),(‘杨过’),(‘小龙女’);
修改
格式: UPDATE tbname SET col1={expr1|DEFAULT} [,col2={expr2|default}]…[where 条件判断]

update 表名 set 列1=值1,列2=值2… where 条件
例:
update students set gender=0,hometown=‘北京’ where id=5;
删除
DELETE FROM tbname [where 条件判断]

delete from 表名 where 条件
例:
delete from students where id=5;
逻辑删除,本质就是修改操作
update students set isdelete=1 where id=1;
**

备份

**
运行mysqldump命令
mysqldump –uroot –p 数据库名 > python.sql;

# 按提示输入mysql的密码
恢复
连接mysql,创建新的数据库
退出连接,执行如下命令
mysql -uroot –p 新数据库名 < python.sql
根据提示输入mysql密码

**

查询

**
创建数据库、数据表

– 创建数据库
create database python_test_1 charset=utf8;

– 使用数据库
use python_test_1;

– students表
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(‘男’,‘女’,‘中性’,‘保密’) default ‘保密’,
cls_id int unsigned default 0,
is_delete bit default 0
);

– classes表
create table classes (
id int unsigned auto_increment primary key not null,
name varchar(30) not null
);
准备数据
– 向students表中插入数据
insert into students values
(0,‘小明’,18,180.00,2,1,0),
(0,‘小月月’,18,180.00,2,2,1),
(0,‘彭于晏’,29,185.00,1,1,0),
(0,‘刘德华’,59,175.00,1,2,1),
(0,‘黄蓉’,38,160.00,2,1,0),
(0,‘凤姐’,28,150.00,4,2,1),
(0,‘王祖贤’,18,172.00,2,1,1),
(0,‘周杰伦’,36,NULL,1,1,0),
(0,‘程坤’,27,181.00,1,2,0),
(0,‘刘亦菲’,25,166.00,2,2,0),
(0,‘金星’,33,162.00,3,3,1),
(0,‘静香’,12,180.00,2,4,0),
(0,‘郭靖’,12,170.00,1,4,0),
(0,‘周杰’,34,176.00,2,5,0);

– 向classes表中插入数据
insert into classes values (0, “python_01期”), (0, “python_02期”);
查询所有字段
select * from 表名;
例:
select * from students;
查询指定字段
select 列1,列2,… from 表名;
例:
select name from students;
使用 as 给字段起别名
select id as 序号, name as 名字, gender as 性别 from students;
可以通过 as 给表起别名

– 如果是单表查询 可以省略表明
select id, name, gender from students;

– 表名.字段名
select students.id,students.name,students.gender from students;

– 可以通过 as 给表起别名
select s.id,s.name,s.gender from students as s;
消除重复行
在select后面列前使用distinct可以消除重复的行
select distinct 列1,… from 表名;
例:
select distinct gender from students;

**

条件

**
使用where子句对表中的数据筛选,结果为true的行会出现在结果集中

语法如下:
select * from 表名 where 条件;
例:
select * from students where id=1;
where后面支持多种运算符,进行条件的处理
比较运算符
逻辑运算符
模糊查询
范围查询
空判断
比较运算符
等于: =
大于: >
大于等于: >=
小于: <
小于等于: <=
不等于: != 或 <>
例1:查询编号大于3的学生

select * from students where id > 3;
例2:查询编号不大于4的学生

select * from students where id <= 4;
例3:查询姓名不是“黄蓉”的学生

select * from students where name != ‘黄蓉’;
例4:查询没被删除的学生

select * from students where is_delete=0;
逻辑运算符
and
or
not
例5:查询编号大于3的女同学

select * from students where id > 3 and gender=0;
例6:查询编号小于4或没被删除的学生

select * from students where id < 4 or is_delete=0;
模糊查询
like
%表示任意多个任意字符
_表示一个任意字符
例7:查询姓黄的学生

select * from students where name like ‘黄%’;
例8:查询姓黄并且“名”是一个字的学生

select * from students where name like ‘黄_’;
例9:查询姓黄或叫靖的学生

select * from students where name like ‘黄%’ or name like ‘%靖’;
范围查询
in表示在一个非连续的范围内
例10:查询编号是1或3或8的学生

select * from students where id in(1,3,8);
between … and …表示在一个连续的范围内
例11:查询编号为3至8的学生

select * from students where id between 3 and 8;
例12:查询编号是3至8的男生

select * from students where (id between 3 and 8) and gender=1;
**

空判断

**
注意:null与’'是不同的
判空is null
例13:查询没有填写身高的学生

select * from students where height is null;
判非空is not null
例14:查询填写了身高的学生

select * from students where height is not null;
例15:查询填写了身高的男生

select * from students where height is not null and gender=1;
优先级
优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
and比or先运算,如果同时出现并希望先算or,需要结合()使用

排序
为了方便查看数据,可以对数据进行排序

语法:
select * from 表名 order by 列1 asc|desc [,列2 asc|desc,…]
说明
将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
默认按照列值从小到大排列(asc)
asc从小到大排列,即升序
desc从大到小排序,即降序
例1:查询未删除男生信息,按学号降序

select * from students where gender=1 and is_delete=0 order by id desc;
例2:查询未删除学生信息,按名称升序

select * from students where is_delete=0 order by name;
例3:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序

select * from students order by age desc,height desc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值