笔记-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
笔记-mysql-管理及基础操作的更多相关文章
- git的工作管理和基础操作
git的工作管理和基础操作 在本地创建git仓库管理我们的代码 初次使用git,先在本地配置一些基础信息 $ git config -l $ git config --global user.name ...
- 涂抹mysql笔记-mysql管理工具
五花八门的mysql管理工具<>mysql提供的命令行工具 mysql_install_db:mysql建库工具,在源码安装mysql环节我们使用过. mysql_safe:mysql启动 ...
- [笔记]SciPy、Matplotlib基础操作
NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...
- MySQL常用命令基础操作
MySQL启动与更改密码 mysql启动基本原理说明: /etc/init.d/mysqld是一个shell启动脚本,启动后最终会调用,mysqld_safe脚本,最后调用mysqld服务启动mysq ...
- MySQL关系型数据库基础操作
MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...
- MySQL 视图的基础操作(五)
1.为什么使用视图: 为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的 ...
- 《Pro Git》笔记2:Git基础操作
第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...
- 记录MySQL的一些基础操作
MySQL建表操作 root@localhost 08:05:22> create table stu( -> id int(4) not null, -> name char(20 ...
- mysql数据库的基础操作
注 : 本文中注释因为方便写了# ,mysql中规范应为 -- 创建用户 通过root管理员权限可以创建各种用户,并为他们分配权限及可以操作的数据库. 语法:create user '用户名'@'ip ...
随机推荐
- The sixteenth day
It is a against the law to drive without a driver's license 翻译: 没有驾照,开车是违法的 注意点: 1.It(连读)is; witout( ...
- css float布局--右侧上部固定下部自适应大小
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android studio 安装与配置【Android学习入门】
终于下定决心认真学习Android开发了. 之前在很多平台看到很多大牛们学习Android的经验和心得,纸上得来终觉浅. 这里推荐stormzhang老师总结的Android学习之路. 为了防止电脑卡 ...
- HashWithIndifferentAccess
The params method returns the parameters passed to the action, such as those fromthe form or query p ...
- Js 数据类型 Number()转型函数
alert(Number(true)); //转换为1,如果为false为0 alert(Number()); //25,数值型直接返回 alert(Number(null)); //0,空对象返回0 ...
- Nodejs事件监听模块
nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露 ...
- Centos 5.2下安装多个mysql数据库
一.编译安装第一个MySQL 5.1.33 cd /opt/usr/sbin/groupadd mysql/usr/sbin/useradd -g mysql mysql -s /bin/nologi ...
- R 多线程和多节点并行计算
一:R本身是单线程的,如何让其多线程跑起来,提高运算速度? 用Parallel和foreach包玩转并行计算 看完上面这篇文章就会了.说白了,要加载parallel包,再改写一下自己的代码就ok了. ...
- with(){}方法
<html><head><script type="text/javascript">function validate_email(field ...
- C语言结构体排序
定义学生信息结构体和结构体数组,包括学号.两门百分制成绩和姓名;键盘输入 学生不多于 30 人的信息,以输入成绩为负数或大于 100 作为输入结束;按照学号和平均成绩排序,并输出学生信息 //输入学生 ...