[关闭]
@mrz1 2018-01-25T08:19:59.000000Z 字数 9513 阅读 668

2017-1-22(MySQL)

笔记


MySQL体系结构

MySQL体系结构

安装MySQL

  1. 安装方式:
  2. 1、源代码:编译安装
  3. 2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
  4. 3、程序包管理器管理的程序包
  5. CentOS安装光盘
  6. 项目官方:https://downloads.mariadb.org/mariadb/repositories/
  7. 4、安装和使用MariaDB
  8. CentOS 7直接提供
  9. CentOS6

MariaDB的特性

  1. MariaDB的特性:
  2. 单进程,多线程
  3. 插件式存储引擎:存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择
  4. 存储引擎也称之为“表类型”
  5. (1) 更多的存储的存储引擎
  6. MyISAM==> Aria
  7. InnoDB==> XtraDB
  8. Mysql5.5.8开始innoDB引擎是MYSQL默认引擎,InnoDB对比MyISAM的最大特点就是InnoDB支持事务
  9. (2) 诸多扩展和新特性
  10. (3) 提供了较多测试组件
  11. (4) 开源

MariaDB包组

  1. Centos7MariaDB数据库包括两个包组:
  2. Mariadb mariadb-client
  3. mariadb组包括下面包:
  4. mariadb-servermandatory package
  5. mariadb-benchoptional package
  6. mariadb-testoptional package
  7. mariadb-client组包括下面包:
  8. Mariadbmandatory package
  9. MySQL-pythondefault package
  10. mysql-connector-odbcdefault package
  11. libdbi-dbd-mysqloptional package
  12. mysql-connector-javaoptional package
  13. perl-DBD-MySQLoptional package
  14. 配置文件:
  15. /etc/my.cnf和/etc/my.cnf.d/*.cnf

MariaDB安装

  1. 安装
  2. yum groupinstall mariadb mariadb-client
  3. systemctl start mariadb
  4. systemctl enable mariadb
  5. 提高安全性
  6. mysql_secure_installation(执行此脚本)
  7. 设置数据库管理员root口令
  8. 禁止root远程登录
  9. 删除anonymous用户帐号
  10. 删除test数据库

MariaDB配置

  1. 侦听3306/tcp端口可以在绑定有一个或全部接口IP
  2. vim /etc/my.cnf
  3. [mysqld]加一行:
  4. skip-networking=1 关闭网络连接,只侦听本地客户端,所有和服务器的交互都通过一个socket实现,socket的配置存放在/var/lib/mysql/mysql.sock)可在/etc/my.cnf修改
  5. firewall-cmd --permanent --add-service=mysql
  6. firewall-cmd --reload

二进制安装MariaDb

MariaDB程序

  1. MariaDB的程序组成:
  2. Client:
  3. mysqlCLI交互式客户端程序
  4. mysqldump, mysqladmin...
  5. Server:
  6. mysqld_safe
  7. mysqld
  8. mysqld_multi:多实例
  9. 服务器监听的两种socket地址:
  10. ip socket: 监听在tcp3306端口,支持远程通信
  11. unix sock: 监听在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),仅支持本机通信
  12. server: localhost, 127.0.0.1 自动使用unix sock

客户端工具

  1. 命令行交互式客户端程序mysql选项:
  2. --print-defaults 默认选项
  3. --verbose 显示祥细信息
  4. -uUSERNAME: 用户名;默认为root
  5. -hHOST: 服务器主机; 默认为localhost
  6. -pPASSWORD:用户的密码;建议使用-p,默认为空密码
  7. mysql用户账号由两部分组成:
  8. 'USERNAME'@'HOST'
  9. HOST用于限制此用户可通过哪些远程主机连接mysql服务
  10. 支持使用通配符:
  11. % 匹配任意长度的任意字符
  12. 172.16.0.0/255.255.0.0 172.16.%.%
  13. _ 匹配任意单个字符

执行命令

  1. 运行mysql命令:默认空密码登录
  2. show databases; 数据库列表
  3. use mysql 进入mysql数据库
  4. select user();查看当前用户
  5. create user wang@'172.18.2.%' identified by 'centos' 创建用户
  6. select user,host,password from mysql.user; //表状查看用户和密码
  7. select * from mysql.user\G 列表查看用户和密码等详细信息
  8. show processlist; 查看当前进程
  9. show databases; 查看数据库列表
  10. update mysql.user set host='172.18.2.27' where user='wang' 修改用户列表
  11. flush privileges; 刷新权限
  12. 安全初始化
  13. /usr/local/mysql/bin/mysql_secure_installatoin
  14. 登录系统:mysql uroot p
  15. 客户端命令:本地执行
  16. mysql> help
  17. 每个命令都完整形式和简写格式
  18. mysql> status \s
  19. 服务端命令:通过mysql协议发往服务器执行并取回结果
  20. 每个命令都必须命令结束符号;默认为分号
  21. SELECT VERSION();

关系型数据库的常见组件

组件 解释
数据库 database
table行:row列:column
索引 index
视图 view
用户 user
权限 privilege
存储过程 procedure,无返回值
存储函数 function,有返回值
触发器 trigger
事件调度器 event scheduler,任务计划

SQL语言的兴起与语法标准

SQL语句构成

  1. Keyword(关键词)组成clause(语句)
  2. 多条clause组成语句
  3. SELECT * SELECT子句
  4. FROM products FROM子句
  5. WHERE price>400 WHERE子句
  6. 这是一组语句,由三个子句构成,SELECT,FROMWHERE都是关键字

SQL语句分类

  1. SQL语句:
  2. DDL: Data Defination Language(数据定义语言)
  3. CREATE, DROP, ALTER //创建,删除,更改
  4. DML: Data Manipulation Language(通过数据操作语句)
  5. INSERT, DELETE, UPDATE //插入、删除、更新
  6. DCLData Control Language (授权)
  7. GRANT, REVOKE //批准,撤销 授权
  8. DQLData Query Language (数据查询:数据查询语言)
  9. SELECT //选择

SQL语言规范

  1. 在数据库系统中,SQL语句不区分大小写(建议用大写)
  2. 但字符串常量区分大小写
  3. SQL语句可单行或多行书写,以“;”结尾
  4. 关键词不能跨多行或简写
  5. 用空格和缩进来提高语句的可读性
  6. 子句通常位于独立行,便于编辑,提高可读性
  7. 注释:
  8. SQL标准:
  9. /*注释内容*/ 多行注释
  10. --注释内容单行注释,注意有空格
  11. MySQL注释:#

数据库对象的命名规则

数据库操作

  1. 创建数据库:
  2. CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
  3. show variables like "%character_set%";//查看字符集
  4. CHARACTER SET 'character set name' //指定字符集
  5. COLLATE 'collate name'
  6. show create database feidb //查看这个数据库当时怎么创建的
  7. 删除数据库
  8. DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME'; 查看支持所有字符集:
  9. SHOW CHARACTER SET;
  10. 查看支持所有排序规则:SHOW COLLATION;
  11. 获取命令使用帮助:HELP KEYWORD;
  12. 查看数据库列表:SHOW DATABASES;

创建表

  1. CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修饰符, col2 type2 修饰符, ...)
  2. 字段信息
  3. col type1
  4. PRIMARY KEY(col1,...)
  5. INDEX(col1, ...)
  6. UNIQUE KEY(col1, ...)
  7. 表选项:
  8. ENGINE [=] engine_name
  9. SHOW ENGINES;查看支持的engine类型
  10. ROW_FORMAT [=]
  11. {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}获取
  12. 帮助:HELP CREATE TABLE;

表操作

  1. 查看所有的引擎:SHOW ENGINES;
  2. 查看表:SHOW TABLES [FROM db_name];
  3. 查看表结构:DESC [db_name.]tb_name;
  4. 删除表:DROP TABLE [IF EXISTS] tb_name;
  5. 查看表创建命令:SHOW CREATE TABLE tbl_name;
  6. 查看表状态:SHOW TABLE STATUS LIKE 'tbl_name'\G

数据类型

  1. 1、整型
  2. tinyint(m) 1个字节 范围(-128~127)
  3. smallint(m) 2个字节 范围(-32768~32767)
  4. mediumint(m) 3个字节 范围(-8388608~8388607)
  5. int(m) 4个字节 范围(-2147483648~2147483647)
  6. bigint(m) 8个字节 范围(+-9.22*1018次方)
  7. 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~255)
  8. int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围
  9. MySQL可以为整型类型指定宽度,例如Int(11),对绝大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1)和Int(20)是相同的
  10. 2、浮点型(floatdouble),近似值
  11. float(m,d)单精度浮点型8位精度(4字节) m总个数,d小数位
  12. double(m,d)双精度浮点型16位精度(8字节) m总个数,d小数位
  13. 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6
  14. 3、定点数
  15. 在数据库中存放的是精确值,存为十进制
  16. decimal(m,d) 参数m<65 是总个数,d<30d<m 是小数位
  17. MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如,decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节
  18. 浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用8个字节
  19. 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal——例如存储财务数据。但在数据量比较大的时候,可以考虑使用bigint代替decimal
  20. 4、字符串(char,varchar,_text)
  21. char(n)固定长度,最多255个字符
  22. varchar(n)可变长度,最多65535个字符
  23. tinytext可变长度,最多255个字符
  24. text可变长度,最多65535个字符
  25. mediumtext 可变长度,最多224次方-1个字符
  26. longtext可变长度,最多232次方-1个字符
  27. BINARY(M) 固定长度,可存二进制或字符,允许长度为0-M字节
  28. VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
  29. 内建类型:ENUM枚举, SET集合
  30. charvarchar:、
  31. 1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
  32. 2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将占用4个字节。
  33. 3.char类型的字符串检索速度要比varchar类型的快
  34. varchartext
  35. 1.varchar可指定ntext不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255),text是实际字符数+2个字节。
  36. 2.text类型不能有默认值•3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text
  37. 5、二进制数据:BLOB
  38. BLOBtext存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写
  39. BLOB存储的数据只能整体读出
  40. TEXT可以指定字符集,BLOB不用指定字符集
  41. 6、日期时间类型
  42. date 日期'2008-12-2'
  43. time 时间'12:25:36'
  44. datetime 日期时间'2008-12-2 22:06:44'
  45. timestamp自动存储记录修改时间
  46. YEAR(2), YEAR(4):年份
  47. timestamp字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间

修饰符

  1. 所有类型:
  2. NULL数据列可包含NULL
  3. NOT NULL数据列不允许包含NULL
  4. DEFAULT默认值
  5. PRIMARY KEY主键
  6. UNIQUE KEY 唯一键
  7. CHARACTER SET name指定一个字符集
  8. 数值型
  9. AUTO_INCREMENT自动递增,适用于整数类型
  10. UNSIGNED无符号

示例:

  1. CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR20NOT NULL,age tinyint UNSIGNED);
  2. DESC students;
  3. CREATE TABLE students2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));

表操作

  1. DROP TABLE [IF EXISTS] 'tbl_name';
  2. ALTER TABLE 'tbl_name'
  3. 字段:
  4. 添加字段:add
  5. ADD col1 data_type[FIRST|AFTER col_name]
  6. 删除字段:drop
  7. 修改字段:
  8. alter(默认值), change(字段名), modify(字段属性)
  9. 索引:
  10. 添加索引:add index
  11. 删除索引: drop index
  12. 表选项
  13. 修改:
  14. 查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;
  15. 查看帮助:Help ALTER TABLE

修改表示例

  1. ALTER TABLE students RENAME s1;
  2. ALTER TABLE s1 ADD phone varchar(11) AFTER name;
  3. ALTER TABLE s1 MODIFY phone int;
  4. ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);
  5. ALTER TABLE s1 DROP COLUMN mobile;
  6. Help ALTER TABLE 查看帮助
  7. ALTER TABLE students ADD gender ENUM('m','f')
  8. ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
  9. ALTER TABLE students ADD UNIQUE KEY(name);
  10. ALTER TABLE students ADD INDEX(age);
  11. DESC students;
  12. SHOW INDEXES FROM students;ALTER TABLE students DROP age;

索引

  1. 索引是特殊数据结构;定义在查找时作为查找条件的字段
  2. 优点:提高查询速度
  3. 缺点:占用额外空间,影响插入速度创建索引必须要有索引名称
  4. 创建索引:
  5. CREATE INDEX index_nameON tbl_name(index_col_name,...);
  6. help CREATE INDEX
  7. 删除索引:DROP INDEX index_nameON tbl_name;
  8. 查看索引:SHOW INDEXES FROM [db_name.]tbl_name;

DML语句

  1. DML: INSERT, DELETE, UPDATE
  2. INSERT
  3. INSERT [INTO] tbl_name[(col_name,...)] {VALUES | VALUE} (val1,...),(...),...
  4. UPDATE:
  5. UPDATE tbl_nameSET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
  6. DELETE:
  7. DELETE FROM tbl_name[WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
  8. 可先排序再指定删除的行数
  9. TRUNCATE TABLE tbl_name; 清空表
  10. DQLSELECT
  11. SELECT col1,col2,... FROM tbl_name[WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];Limit m,n跳过m个,要n
  12. 字段表示法:
  13. *: 所有字段
  14. as:字段别名,col1 AS alias1
  15. WHERE clause:
  16. 操作符:=, != >, <, >=, <=
  17. BETWEEN ... AND ...
  18. LIKE:
  19. %:任意长度的任意字符
  20. _:任意单个字符;
  21. RLIKE:正则表达式模式匹配
  22. IS NULL IS NOT NULL
  23. IN val1,val2,...)NOT INval1,val2,...)条件逻辑操作:
  24. ANDORNOT

示例

  1. DESC students;
  2. INSERT INTO students VALUES(1,'tom''m'),(2,'alice','f');
  3. INSERT INTO students(id,name) VALUES(3,'jack'),(4,'allen');
  4. SELECT * FROM students WHERE id < 3;
  5. SELECT * FROM students WHERE gender='m';
  6. SELECT * FROM students WHERE gender IS NULL;
  7. SELECT * FROM students WHERE gender IS NOT NULL;
  8. SELECT * FROM students ORDER BY name DESC LIMIT 2;
  9. SELECT * FROM students ORDER BY name DESC LIMIT 1,2;
  10. SELECT * FROM students WHERE id >=2 and id <=4
  11. SELECT * FROM students WHERE BETWEEN 2 AND 4
  12. SELECT * FROM students WHERE name LIKE t%’
  13. SELECT * FROM students WHERE name RLIKE '.*[lo].*';
  14. SELECT id stuid,name as stuname FROM students

用户账号

  1. 用户账号:'user'@'host'
  2. user: 用户名
  3. host: 允许用户通过哪些主机远程连接mysqld服务
  4. IP、网络地址、主机名、通配符(%和_)
  5. 创建用户:
  6. CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
  7. 查看当前用户:
  8. SELECT user();
  9. 查看用户:
  10. SELECT User,Host,Password FROM user;
  11. 删除用户:DROP USER 'username'@'host';
  12. 示例:删除默认的空用户DROP USER ''@'localhost';
  13. 更改口令:
  14. 1)SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
  15. 2) UPDATE user SET password=PASSWORD('magedu') WHERE User='root' ;
  16. 注意:上面修改表的命令不会马上生效,需执行FLUSH PRIVILEGES生效
  17. 3) /usr/local/mysql/bin/mysqladmin -u root poldpassword password 'newpassword'

授权

  1. 权限级别:管理权限、数据库、表、字段、存储例程
  2. Help GRANT
  3. GRANT priv_type,... ON [object_type] db_name.tb_nameTO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];
  4. priv_type: ALL [PRIVILEGES]
  5. db_name.tb_name:
  6. *.*: 所有库的所表
  7. db_name.*: 指定库的所有表
  8. db_name.tb_name: 指定库的指定表
  9. db_name.routine_name:指定库的存储过程和函数
  10. 示例:GRANT SELECT,DELETE on testdb.* TO 'testuser'@'%'IDENTIFIEDBY 'testpass';
  11. 查看指定用户获得的授权:
  12. Help SHOW GRANTS
  13. SHOW GRANTS FOR 'user'@'host';
  14. SHOW GRANTS FOR CURRENT_USER[()];
  15. 回收授权:
  16. REVOKE priv_type, ... ON db_name.tb_nameFROM 'user'@'host
  17. 示例:REVOKE DELETE ON testdb.* FROM 'testuser'@'%'
  18. 注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存
  19. (1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
  20. (2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注