笔记-mysql-管理及基础操作

笔记-mysql使用-管理及基础操作

1.      简介

mysql是一个免费的关系型数据库,不过好像被oracle收购了。。。。

希望它继续免费。

1.1.    相关术语

数据库,表,列,行,冗余,主键,外键,复合键,索引,参照完整性;

1.2.    数据类型

MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:

数字类型

整数: tinyint、smallint、mediumint、int、bigint

浮点数: float、double、real、decimal

日期和时间: date、time、datetime、timestamp、year

字符串类型

字符串: char、varchar

文本: tinytext、text、mediumtext、longtext

二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

2.      环境配置/配置文件/其它相关配置参数

默认端口 3306

超级用户 root

MySql数据库的数据文件存储在目录"/opt/mysql/var"中(因为我的mysql就安在/opt下面),每个数据库对应一个目录,用于存储数据表文件。每一个数据表对应为三个文件,后缀名分别为“.frm”、".MYD"和“.MYI”。

3.      数据库系统管理

3.1.    登录/连接数据库

mysql –h <hostname> -D <database>  -u <username> -p

-h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;

-u : 所要登录的用户名;

-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

-D 指定连接的数据库

3.2.    创建/删除数据库

create database <database name> default character set utf8 collate utf8 __general_ci;

drop database <database name>;

3.3.    其它命令

show databases;

status;

show create database <database_name>

show engines; # 查看支持的engines

show warnings;

use <database> #select and access database

变量管理

show global variables;

show session variables;

作为MYSQL编码规范,MYSQL中的系统变量以2个@@开头

有一些特殊的全局系统变量()在服务实例运行期间不能使用set命令进行重新设置,一般称为静态变量;

3.4.    执行脚本/source 命令

将命令写入文本文件<a.sql>,在MYSQL命令行下执行source <path\a.sql>

4.      数据库管理

4.1.    表的创建

创建表

CREATE TABLE IF NOT EXISTS `runoob_tbl`(

   `runoob_id` INT UNSIGNED AUTO_INCREMENT,

   `runoob_title` VARCHAR(100) NOT NULL,

   `runoob_author` VARCHAR(40) NOT NULL,

   `submission_date` DATE,

   PRIMARY KEY ( `runoob_id` )

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

show tables;

describe <table name>

desc <table_name>

drop table <table_name>

4.2.    表结构修改

alter table table_name add col_name col_type [after column]

alter table table_name change col_name new_col_name new_type;

alter table table_name drop col_name;

alter table table_name rename new_table_name;

4.3.    其它

数据库参数查询

命令:mysql> select database();

MySQL中SELECT命令类似于其他编程语言里的print或者write,你可以用它来显示一个字符串、数字、数学表达式的结果等等。如何使用MySQL中SELECT命令的特殊功能?

1.显示MYSQL的版本

mysql> select version();

+-----------------------+

| version()             |

+-----------------------+

| 6.0.4-alpha-community |

+-----------------------+

1 row in set (0.02 sec)

2. 显示当前时间

mysql> select now();

+---------------------+

| now()               |

+---------------------+

| 2009-09-15 22:35:32 |

+---------------------+

1 row in set (0.04 sec)

3. 显示年月日

SELECT DAYOFMONTH(CURRENT_DATE);

+--------------------------+

| DAYOFMONTH(CURRENT_DATE) |

+--------------------------+

|                       15 |

+--------------------------+

1 row in set (0.01 sec)

SELECT MONTH(CURRENT_DATE);

+---------------------+

| MONTH(CURRENT_DATE) |

+---------------------+

|                   9 |

+---------------------+

1 row in set (0.00 sec)

SELECT YEAR(CURRENT_DATE);

+--------------------+

| YEAR(CURRENT_DATE) |

+--------------------+

|               2009 |

+--------------------+

1 row in set (0.00 sec)

4. 显示字符串

mysql> SELECT "welecome to my blog!";

+----------------------+

| welecome to my blog! |

+----------------------+

| welecome to my blog! |

+----------------------+

1 row in set (0.00 sec)

5. 当计算器用

select ((4 * 4) / 10 ) + 25;

+----------------------+

| ((4 * 4) / 10 ) + 25 |

+----------------------+

|                26.60 |

+----------------------+

1 row in set (0.00 sec)

6. 串接字符串

select CONCAT(f_name, " ", l_name)

AS Name

from employee_data

where title = 'Marketing Executive';

+---------------+

| Name          |

+---------------+

| Monica Sehgal |

| Hal Simlai    |

| Joseph Irvine |

+---------------+

3 rows in set (0.00 sec)

注意:这里用到CONCAT()函数,用来把字符串串接起来。另外,我们还用到以前学到的AS给结果列'CONCAT(f_name, " ", l_name)'起了个假名。

查看支持的字符集

show character set;

5.      数据操作

5.1.    增删改查

INSERT INTO pet       VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

inert into table_name (field1, field2….) values (value1, value2….)

delete from pet;

update pet set field1=’aaa’, field2=value2  where id=’5’;

select * from pet;

在select 中还有一些方法包括sort,like,in,group by未列出;

6.      用户/权限与控制

6.1.    用户定义

用户的定义:用户名+主机域

用户的作用:1、用户登录;2、用于管理数据库及数据

定义用户:用户名+主机域,密码

定义权限:对不同的对象进行权限(角色)定义

命令:

  grant 权限 on 权限范围  to 用户  identified  by '密码'

权限

        对数据库的读、写等操作

    (insert update、select、delete、drop、create等)

角色:数据库定义好的一组权限的定义

    (all privileges、replication slave等)

权限范围

    全库级别: *.*

    单库级别:clsn.*

    单表级别:clsn.t1

用户名形式案例:

    'clsn'@'localhost'  本地

    'clsn'@'192.168.66.149'

    'clsn'@'192.168.66.%'

    'clsn'@'192.168.66.14%'

6.2.    用户管理操作/命令

创建:create user ‘name’@’host’ identified by ‘password’;

查看:select user,host from msyql.user;

发现host列为%,代表任意主机可登录;

如果在创建用户时后面加上@<主机名/IP>就可指定登录范围

%作为通配符

企业里创建用户一般是授权一个内网网段登录,最常见的网段写法有两种。

方法1:172.16.1.%(%为通配符,匹配所有内容)。

方法2:172.16.1.0/255.255.255.0,但是不能使用172.16.1.0/24,是个小遗憾。

查看用户对应的权限

show grants for oldboy@localhost\G

删除用户

drop user ‘user’@’host’

特殊的删除方法:(慎用,尽量不要直接去修改表)

mysql> delete from mysql.user where  user='clsn' and host='localhost';

Query OK, 1 row affected (0.00 sec)

mysql> flush privileges;

6.3.    权限/授权

授权:grant all on *.* to ‘user’@’host’;

查看权限:show grants for ‘user’@’host’;

刷新权限:flush privileges;

授权和root一样的权限

grant all on *.* to system@'localhost' identified by 'clsn123' with grant option;

授权给用户select,create,insert,update 权限

grant select,create,insert,update on clsn.* to 'clsn'@'10.0.0.%' identified by '123';

权限回收:

REVOKE INSERT ON *.* FROM clsn@localhost;

可以授权的用户权限

INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,

PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER,

CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE,

REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER

ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

6.4.    常用操作

创建用户

create user <> identfied by <>;

修改口令

set password for user=password(‘password’);

SHOW GRANTS FOR dbadmin@localhost;

SELECT user FROM user;

SELECT user,host,account_locked,password_expired FROM mysql.user;

显示当前用户

mysql> SELECT user()

mysql>  SELECT current_user();

SELECT user,host,db,command FROM information_schema.processlist;

6.5.    访问控制

当客户端连接到服务器时,MySQL访问控制有两个阶段:

连接验证:连接到MySQL数据库服务器的客户端需要有一个有效的用户名和密码。此外,客户端连接的主机必须与MySQL授权表中的主机相匹配。

请求验证:当连接成功建立后,对于客户端发出的每个语句,MySQL会检查客户端是否具有足够的权限来执行该特定语句。 MySQL能够检查数据库,表和字段级别的权限。

mysql数据库包含五个主要的授权表。

user表:包含用户帐户和全局权限列。MySQL使用user表来接受或拒绝来自主机的连接。 在user表中授予的权限对MySQL服务器上的所有数据库都有效。

db表:包含数据库级权限。MySQL使用数据库表来确定用户可以访问哪个数据库以及哪个主机。在db表中的数据库级授予的特权适用于数据库,所有对象属于该数据库,例如表,触发器,视图,存储过程等。

table_priv和columns_priv表:包含表级和列级权限。 在table_priv表中授予的权限适用于表及其列,而在columns_priv表中授予的权限仅适用于表的特定列。

procs_priv表:包含存储函数和存储过程的权限。

7.      数据库引擎

7.1.    什么是数据库引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。

这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储信息、如何检索这些信息以及需要数据结合什么性能和功能的时候提供最大的灵活性。

7.2.  3. 常用的 mysql 引擎

引擎有哪些?各引擎间有什么区别?

存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam

一般多用MyISAM 与 InnoDB 两个引擎,其主要区别如下:

1). InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;

2). MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;

3). InnoDB 支持外键,MyISAM 不支持;

4). MyISAM 是默认引擎,InnoDB 需要指定;

5). InnoDB 不支持 FULLTEXT 类型的索引;

6). InnoDB 中不保存表的行数,如 select count(*) from table 时,InnoDB;需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count(*) 语句包含 where 条件时 MyISAM 也需要扫描整个表;

7). 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立联合索引;

8). 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;

9). InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a = 1 where user like '%lee%'

7.3.    怎么修改引擎

方式一:

修改配置文件my.ini

将mysql.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB

方式二:

在建表的时候指定

create table mytbl(  

    id int primary key,  

    name varchar(50)  

)type=MyISAM;

方式三:

建表后更改

alter table table_name type = InnoDB;

(5)怎么查看修改成功?

方式一:

show table status from database_name;

方式二:

show create table table_name

猜你喜欢

转载自www.cnblogs.com/wodeboke-y/p/10388462.html