MySQL实战系列2:你不可不知的数据库操作

栏目: 数据库 · Mysql · 发布时间: 6年前

内容简介:MySQL实战系列2:你不可不知的数据库操作

作者介绍

索宁 擅长 Python 开发、 MySQL 、前端等众多技术领域,曾负责众多企业安全架构解决方案 ,涉猎行业有媒体、出版社、航空运输、医疗、军队、政府、教育等。

一、数据库操作

1 、查看数据库

SHOW DATABASES;

# 默认数据库:

mysql - 用户权限相关数据

test - 用于用户测试数据

information_schema - MySQL本身架构相关数据

2 、创建数据库

# utf-8 编码

CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

# gbk 编码

CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

3 、使用数据库

USE db_name;

# 可以不使用分号

4 、用户管理

# 创建用户

create user '用户名'@'IP地址' identified by '密码';

# 删除用户

drop user '用户名'@'IP地址';

# 修改用户

rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;

# 修改密码

set password for '用户名'@'IP地址' = Password('新密码')

PS: 用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

# 查看当前用户

select user();

# 查看所有用户

select host,user from mysql.user;

# 人性化显示所有用户

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

# 查看用户的所有权限

show grants for 'nick'@'%';

  • View Code

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

5 、授权管理

# 查看权限

show grants for '用户'@'IP地址'

# 授权

grant  权限 on 数据库.表 to   '用户'@'IP地址'

# 取消权限

revoke 权限 on 数据库.表 from '用户'@'IP地址'

常用权限:

all privileges   除grant外的所有权限

select              仅查权限

select,insert    查和插入权限

usage              无访问权限

对于目标数据库以及内部其他:

MySQL实战系列2:你不可不知的数据库操作

对于用户和IP:

MySQL实战系列2:你不可不知的数据库操作

  • 更多权限

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

  • 添加额外管理员

MySQL实战系列2:你不可不知的数据库操作

  • 简单示例

MySQL实战系列2:你不可不知的数据库操作

  • 创建用户一般流程

MySQL实战系列2:你不可不知的数据库操作

6、授权局域网内主机远程连接数据库

#百分号匹配法

grant all on *.* to 'test'@'192.168.200.%' identified by 'test123';

#子网掩码配置法

grant all on *.* to 'test'@'192.168.200.0/255.255.255.0' identified by 'test123';

#刷新权限

flush privileges;

#远程登陆连接

mysql -utest -ptest123 -h 192.168.200.96

二、表操作

1 、创建表

# 基本语法:

create table 表名(

列名  类型  是否可以为空  默认值  自增  主键,

列名  类型  是否可以为空

)ENGINE=InnoDB DEFAULT CHARSET=utf8

not null                # 不可以为空

default 1              # 默认值为1

auto_increment   # 自增

primary key         # 主键

constraint 外键名 foreign key (从表字段’自己‘) references 主表(主键字段)    # 外键

是否可空,null表示空,非字符串

not null    - 不可空

null          - 可空

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create table tb1(

nid int not null defalut 2,

num int not null

)

自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

create table tb1(

nid int not null auto_increment primary key,

num int null

)

create table tb1(

nid int not null auto_increment,

num int null,

index(nid)

)

注意:1、对于自增列,必须是索引(含主键)。

2、对于自增可以设置步长和起始值

MySQL实战系列2:你不可不知的数据库操作

主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

MySQL实战系列2:你不可不知的数据库操作

外键,一个特殊的索引,只能是指定内容

MySQL实战系列2:你不可不知的数据库操作

2 、删除表

drop table 表名

3 、清空表

# 表还存在,表内容清空

delete from 表名

truncate table 表名

4 、修改表

# 添加列:

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;

# 更改表名

rename table 原表名 to 新表名;

  • 增删改表的字段

#增加表字段,altertable法。

1>    语法: altertable 表名 add 字段 类型 其他;

2>    插入列,名为sex。

MySQL实战系列2:你不可不知的数据库操作

3>    插入名为suo列在name后面。

MySQL实战系列2:你不可不知的数据库操作 4>    插入名为qq列在第一。

MySQL实战系列2:你不可不知的数据库操作

#更改表名字,rename法。

1>    语法: rename table 原表名 to 新表名;

2>    更改oldsuo表为oldning。

MySQL实战系列2:你不可不知的数据库操作

#删除表

1>    语法:drop table <表名>;

2>    删除表名为oldsuo表。

MySQL实战系列2:你不可不知的数据库操作

三、表内容操作

1 、增

语法:insert into 表 (列名,列名...) values (值,值,值...)

# 插入单条数据

insert into 表 (列名,列名...) values (值,值,值...)

# 插入多条数据

insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)

# 插入另一条语句的查询结果

insert into 表 (列名,列名...) select 列名,列名... from 表

2 、删

语法:delete from 表

delete from 表;

delete from 表 where id=1;

3 、改

语法:update 表 set name = 'nick' where id>1

update 表 set name = 'nick' where id>1

4 、查

语法:select * from 表

select * from 表

select * from 表 where id > 1

select nid,name,gender as gg from 表 where id > 1

# as 做别名

5 、条件

语法:select * from 表 where id > 1

MySQL实战系列2:你不可不知的数据库操作

6 、通配符

语法:select * from 表 where name like '_n%'

MySQL实战系列2:你不可不知的数据库操作

7 、限制

语法:select * from 表 limit 9,5;

MySQL实战系列2:你不可不知的数据库操作

8 、排序

语法:select * from 表 order by 列1 desc,列2 asc

MySQL实战系列2:你不可不知的数据库操作

9 、分组

语法:select num from 表 group by num

MySQL实战系列2:你不可不知的数据库操作

注:group by 必须在where之后,order by之前

MySQL实战系列2:你不可不知的数据库操作

10 、连表

语法:inner join . on、left join . on、right join . on

MySQL实战系列2:你不可不知的数据库操作

11 、组合

语法:union、union all

MySQL实战系列2:你不可不知的数据库操作

  • 查询表数据

1>    命令语法:select<字段1,字段2,…>from<表名>where<表达式>

2>    查询所有

MySQL实战系列2:你不可不知的数据库操作 3>    查询某列。不用*,查询的列列出来。

MySQL实战系列2:你不可不知的数据库操作 4>    指定条件查询

MySQL实战系列2:你不可不知的数据库操作

#升序

MySQL实战系列2:你不可不知的数据库操作

#倒叙

MySQL实战系列2:你不可不知的数据库操作

  • 表中插入数据

1>    插入单个数据,student为表的名称。

MySQL实战系列2:你不可不知的数据库操作

2>    批量插入数据,student为表的名称。

MySQL实战系列2:你不可不知的数据库操作

  • 表中删除数据

1>    删除所有数据,student为表的名称。

MySQL实战系列2:你不可不知的数据库操作

2>    删除表中的某行或某些

MySQL实战系列2:你不可不知的数据库操作

3>    直接清空某张表

MySQL实战系列2:你不可不知的数据库操作

四、其它命令

1 、查看建表语句

MySQL实战系列2:你不可不知的数据库操作

2 、查看表结构

desc 表名;

MySQL实战系列2:你不可不知的数据库操作

3 、查看是否走索引

explain select * from 表名 where name ='nick' \G 

用此命令查看是否 sql 语句是否还有优化的余地

MySQL实战系列2:你不可不知的数据库操作

五、数据类型

学习新的东西自然离不开数据类型,MySQL中的数据类型还算简单; 大致分为数字、字符串、时间。

那就详细看看吧:

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

六、索引

1 、索引概述

索引是表的索引目录,在查找内容之前先查目录中查找索引位置,从而快速定位查询数据;

可以理解成新华字典中的索引;

索引会保存在额外的文件中。

2 、索引种类

一般的索引种类及功能:

  • 普通索引:仅加速查询

  • 唯一索引:加速查询 + 列值唯一(可以有null)

  • 主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null)

  • 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

  • 全文索引:对文本的内容进行分词,进行搜索 

  • 索引合并:使用多个单列索引组合查询搜索

  • 覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

a 、普通索引

# 创建表 + 索引

MySQL实战系列2:你不可不知的数据库操作

# 创建索引

create index index_name on table_name(column_name)

# 删除索引

drop index_name on table_name;

# 查看索引

show index from table_name;

#注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。

create index ix_extra on in1(extra(32));

b 、唯一索引

# 创建表 + 唯一索引

MySQL实战系列2:你不可不知的数据库操作

# 创建唯一索引

create unique index 索引名 on 表名(列名)

# 删除唯一索引

drop unique index 索引名 on 表名

c 、主键索引

# 创建表 + 创建主键

MySQL实战系列2:你不可不知的数据库操作

# 创建主键

alter table 表名 add primary key(列名);

# 删除主键

alter table 表名 drop primary key;

alter table 表名  modify  列名 int, drop primary key;

d 、组合索引

组合索引是多个列组合成一个索引来查询

应用场景:频繁的同时使用多列来进行查询,如:where name = 'nick' and age = 18。

# 创建表

MySQL实战系列2:你不可不知的数据库操作

# 创建组合索引

create index ix_name_age on mess(name,age);

如上创建组合索引之后,查询一定要注意:

  • name and email  -- >使用索引,name一定要放前面

  • name         -- >使用索引

  • email         -- >不使用索引

注意:同时搜索多个条件时,组合索引的性能效率好过于多个单一索引合并。

3 、相关命令

# 查看索引

show index from  表名

# 查看执行时间

set profiling = 1;  # 开启profiling

SQL...              # 执行SQL语句

show profiles;      # 查看结果

4 、如何正确使用索引

# like '%xx',避免%_写在开头

select * from tb1 where name like '%n';

# 使用函数

select * from tb1 where reverse(name) = 'nick';

# or

select * from tb1 where nid = 1 or email = '630571017@qq.com';

注:当or条件中有未建立索引的列才失效,否则会走索引

# 类型不一致

如果列是字符串类型,传入条件是必须用引号引起来。

select * from tb1 where name = 999;

# !=,不等于

select * from tb1 where name != 'nick'

注:如果是主键,则还是会走索引

select * from tb1 where nid != 123

# >,大于

select * from tb1 where name > 'nick'

注:如果是主键或索引是整数类型,则还是会走索引

select * from tb1 where nid > 123

select * from tb1 where num > 123

# order by

select email from tb1 order by name desc;

当根据索引 排序 时候,选择的映射如果不是索引,则不走索引

注:如果对主键排序,则还是走索引:

select * from tb1 order by nid desc;

# 组合索引最左前缀

如果组合索引为:(name,email),查询使用:

name and email       -- 使用索引

name                 -- 使用索引

email                -- 不使用索引

5 、注意事项

# 避免使用select *

# count(1)或count(列) 代替 count(*)

# 创建表时尽量时 char 代替 varchar

# 表的字段顺序固定长度的字段优先

# 组合索引代替多个单列索引(经常使用多个条件查询时)

# 尽量使用短索引

# 使用连接(JOIN)来代替子查询(Sub-Queries)

# 连表时注意条件类型需一致

# 索引散列值(重复少)不适合建索引,例:性别不适合

6 、执行计划

explain + 查询SQL  用于显示SQL执行信息参数,根据参考信息可以进行SQL优化

MySQL实战系列2:你不可不知的数据库操作

id

查询顺序标识

如:mysql> explain select * from (select nid,name from tb1 where nid < 10) as B;     

MySQL实战系列2:你不可不知的数据库操作

特别的:如果使用union连接气值可能为null

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作

MySQL实战系列2:你不可不知的数据库操作


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

硅谷之火

硅谷之火

保罗·弗赖伯格、迈克尔·斯韦因 / 张华伟 编译 / 中国华侨出版社 / 2014-11-1 / CNY 39.80

《硅谷之火:人与计算机的未来》以生动的故事,介绍了计算机爱好者以怎样的创新精神和不懈的努力,将计算机技术的力量包装在一个小巧玲珑的机壳里,实现了个人拥有计算机的梦想。同时以独特的视角讲述了苹果、微软、太阳微系统、网景、莲花以及甲骨文等公司的创业者们在实现个人计算机梦想的过程中创业的艰辛、守业的艰难、失败的痛苦,在激烈竞争的环境中奋斗的精神以及在技术上不断前进的历程。一起来看看 《硅谷之火》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具