关于mysql的基础知识

Posted 小太阳8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mysql的基础知识相关的知识,希望对你有一定的参考价值。

 

一、数据库的简介

什么是数据库?

数据的仓库,如:在atm的实例中我们创建一个db目录称之为数据库

什么是 mysql、Oracle、SQLite、Access、MS SQL Server等 ?

他们是数据库软件,主要功能为两部分:1、讲数据保存到内存或者文件。2、接受特定的命令对数据进行操作

什么是SQL?

上述问题说过,数据库要接受特定的命令,这个命令就是用SQL编写,他是结构化查询语言(Structured Query Language)的缩写,一种专门与数据库交互的语言。

二、数据库的安装

windows版本

1、下载

MySQL Community Server 5.7.16
 
http://dev.mysql.com/downloads/mysql/

2、解压

如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\\mysql-5.7.16-winx64

3、初始化

MySQL解压后的 bin 目录下有一大堆的可执行文件,执行如下命令初始化数据:

cd c:\\mysql-5.7.16-winx64\\bin
 
mysqld --initialize-insecure

4、启动MySQL服务

执行命令从而启动MySQL服务

# 进入可执行文件目录
cd c:\\mysql-5.7.16-winx64\\bin
 
# 启动MySQL服务
mysqld

5、启动MySQL客户端并连接MySQL服务

由于初始化时使用的【mysqld --initialize-insecure】命令,其默认未给root账户设置密码

复制代码
复制代码
# 进入可执行文件目录
cd c:\\mysql-5.7.16-winx64\\bin
 
# 连接MySQL服务器
mysql -u root -p
 
# 提示请输入密码,直接回车
复制代码
复制代码

输入回车,见下图表示安装成功:

到此为止,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。但是,在4、5步骤中重复的进入可执行文件目录比较繁琐,如想日后操作简便,可以做如下操作。

 添加环境变量

将MySQL可执行文件添加到环境变量中,从而执行执行命令即可

复制代码
复制代码
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】
 
如:
C:\\Program Files (x86)\\Parallels\\Parallels Tools\\Applications;%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\;C:\\Python27;C:\\Python35;C:\\mysql-5.7.16-winx64\\bin
复制代码
复制代码

如此一来,以后再启动服务并连接时,仅需:

# 启动MySQL服务,在终端输入
mysqld
 
# 连接MySQL服务,在终端输入:
mysql -u root -p

. 将MySQL服务制作成windows服务

上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:

# 制作MySQL的Windows服务,在终端执行此命令:
"c:\\mysql-5.7.16-winx64\\bin\\mysqld" --install
 
# 移除MySQL的Windows服务,在终端执行此命令:
"c:\\mysql-5.7.16-winx64\\bin\\mysqld" --remove

注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:

 

# 启动MySQL服务
net start mysql
 
# 关闭MySQL服务
net stop mysql

linux版本

安装

yum install mysql-server  

启动

mysql.server start

链接

复制代码
复制代码
连接:
    mysql -h host -u user -p
 
    常见错误:
        ERROR 2002 (HY000): Can\'t connect to local MySQL server through socket \'/tmp/mysql.sock\' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出:
    QUIT 或者 Control+D
复制代码
复制代码

三、数据库的操作

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表中,所以也可以直接对其进行操作(不建议)
复制代码
复制代码

5、授权管理

show grants for \'用户\'@\'IP地址\'                  -- 查看权限
grant  权限 on 数据库.表 to   \'用户\'@\'IP地址\'      -- 授权
revoke 权限 on 数据库.表 from \'用户\'@\'IP地址\'      -- 取消权限
对于权限
对于数据库
对于ip
实例

注:flush privileges,将数据读取到内存中,从而实现不重启即可生效。

四、数据表的处理

1、创建表

View Code
创建表时的参数说明

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;
复制代码
复制代码

5、基本数据类型

MySQL的数据类型大致分为:数值、时间和字符串

View Code

更多参考:

  • http://www.runoob.com/mysql/mysql-data-types.html
  • http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html

五、表内容操作

1、增

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

2、删

delete from 表
delete from 表 where id=1 and name=\'alex\'

3、改

update 表 set name = \'alex\' where id>1

4、查

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

5、其他

复制代码
复制代码
a、条件
    select * from 表 where id > 1 and name != \'alex\' 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、通配符
    select * from 表 where name like \'ale%\'  - ale开头的所有(多个字符串)
    select * from 表 where name like \'ale_\'  - ale开头的所有(一个字符)
 
c、限制
    select * from 表 limit 5;            - 前5行
    select * from 表 limit 4,5;          - 从第4行开始的5行
    select * from 表 limit 5 offset 4    - 从第4行开始的5行
 
d、排序
    select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
    select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
    select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
 
e、分组
    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之前
 
f、连表
    无对应关系则不显示
    select A.num, A.name, B.name
    from A,B
    Where A.nid = B.nid
 
    无对应关系则不显示
    select A.num, A.name, B.name
    from A inner join B
    on A.nid = B.nid
 
    A表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A left join B
    on A.nid = B.nid
 
    B表所有显示,如果B中无对应关系,则值为null
    select A.num, A.name, B.name
    from A right join B
    on A.nid = B.nid
 
g、组合
    组合,自动处理重合
    select nickname
    from A
    union
    select name
    from B
 
    组合,不处理重合
    select nickname
    from A
    union all
    select name
    from B
复制代码
复制代码

 -转载自 www.3cscool

以上是关于关于mysql的基础知识的主要内容,如果未能解决你的问题,请参考以下文章

关于代码片段的时间复杂度

关于片段生命周期

关于react16.4

关于js----------------分享前端开发常用代码片段

关于在各浏览器中插入音频文件的html代码片段

部分代码片段