一、MySQL概述
1、什么是数据库 ?
答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
答:他们均是一个软件,都有两个主要的功能:
- a. 将数据保存到文件或内存
- b. 接收特定的命令,然后对文件进行相应的操作
3、什么是SQL ?
答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。
mysql简单安装方式:
1. sudo apt-get install mysql-server
2. apt-get install mysql-client
3. sudo apt-get install libmysqlclient-dev
安装完成后可以使用如下命令来检查是否安装成功:sudo netstat -tap | grep mysql
查看版本号:mysql --version
设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1: 前面加#即可
连接MySQL
格式: mysql -h 主机地址 -u 用户名 -p 用户密码
1、例1:连接到本机上的MYSQL命令:mysql -uroot -p,回车后输入密码
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h 110.110.110.110 -uroot -p abcd123
用户管理
1
2
3
4
5
6
7
8
9
10
|
创建用户
create user
'用户名'
@
'IP地址'
identified by
'密码'
;
删除用户
drop user
'用户名'
@
'IP地址'
;
修改用户
rename user
'用户名'
@
'IP地址'
; to
'新用户名'
@
'IP地址'
;;
修改密码
set password
for
'用户名'
@
'IP地址'
= Password(
'新密码'
)
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
|
授权管理
1
2
3
|
show grants
for
'用户'
@
'IP地址'
-- 查看权限
grant 权限 on 数据库.表 to
'用户'
@
'IP地址'
-- 授权
revoke 权限 on 数据库.表 from
'用户'
@
'IP地址'
-- 取消权限
|
数据库操作-思路图
库操作
show databases;
(2) 创建数据库
create database 库名;
create database if not exists 库名; 防止创建同名的库出现错误
(3) 查看创库语句
show create database 库名 \G;
(4) 使用数据库(进入到当前的库中)
use 库名
(5) 查看当前所在的数据库
select database();
(6) 数据库的删除
drop database 库名;
drop database if exists 库名; 删除数据库如果该库存在 防止报错
(7) 创建数据库并设置字符集
create database 库名 character set utf8;
(8) 创建数据库 并设置字符集
alter database hzpython1803 character set 字符集;
表操作
表数据类型:
- 1、整型(xxxint)
- 2、浮点型(float和double)
- 3、定点数(decimal)
- 4、字符串(char,varchar,xxxtext)
- 5、二进制数据(xxxBlob)
- 6、日期时间类型
注:浮点数中的m代表当前存储的长度 n代表小数的位数 m-n代表整数的位数 超出则报.
-
-
字符串类型后面给定的长度 则是限制当前存储数据的长度
-
整形默认长度会比本身长度大1,因为是符号位
-
char和varchar的存储长度都为0-255
-
char的执行效率高于varchar
-
varchar要比 char更节省存储空间
-
当char存储的值达不到指定的长度时 则使用空来占位
enum和set区别
-
enum只能选择其中的一个值
- set可以选择多个值 多个值使用逗号来隔开
-
unsigned 无符号 正数
只能用于数值类型 不允许出现负数 存储长度会扩大一倍
-
zerofill 零填充
只能用于数值类型 当指定的位数不足的时候 零填充
-
default 默认值
如果当前字段没有传值 则值为默认值 (不设定默认值 默认为null)
-
null 和 not null
默认为null 当不插入值则插入的为null,当设置当前字段为 not null的时候 则该字段必须传值
-
comment 设置当前字段的说明
-
auto_increment 自增
查看所有的表:show databases;
创建表格式:create table 表名(
列名 类型 是否可以为空,
列名 类型 是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> create table fs( -> id int unsigned primary key auto_increment, -> username varchar(20), -> sex tinyint, -> age tinyint unsigned, -> info varchar(100) -> );
切换表格式:use 表名;
删除表格式:drop table 表名; 例:drop table fs;
表结构操作
查看表结构:desc 表名; 例:desc fs;
清空表:truncate table 表名;
查看表结构: desc 表名 清空表: truncate 表名 添加列: alter table 表名 add 列名 类型 删除列: alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型 添加主键: alter table 表名 add primary key(列名); 删除主键: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外键: alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); 删除外键: alter table 表名 drop foreign key 外键名称 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
表内容操作
1、增
insert into 表 (列名,列名...) values (值,值,...) insert into 表 (列名,列名...) values (值,值,...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表
例:
insert into tab1(name,email) values('zhangyanlin','[email protected]')
2、删
delete from 表 # 删除表里全部数据 delete from 表 where id=1 and name='zhangyanlin' # 删除ID =1 和name='zhangyanlin' 那一行数据
3、改
update 表 set name = 'zhangyanlin' where id>1
4、查
select * from 表 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1
a、条件判断where
select * from 表 where id > 1 and name != 'marong' 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 表)
b、通配符like
select * from 表 where name like 'zhang%' # zhang开头的所有(多个字符串) select * from 表 where name like 'zhang_' # zhang开头的所有(一个字符)
c、限制limit
select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 从第4行开始的5行 select * from 表 limit 5 offset 4 - 从第4行开始的5行
d、排序asc,desc
select * from 表 order by 列 asc - 根据 “列” 从小到大排列 select * from 表 order by 列 desc - 根据 “列” 从大到小排列 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
e、分组group by
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 特别的:group by 必须在where之后,order by之前.如group by后面需使用where 可用having替换where
注:实际开发中,要避免使用通配符"*"(通配符代表所有字段),以及'like',会影响效率。