[MySQL]零基础学 MySQL
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MySQL]零基础学 MySQL相关的知识,希望对你有一定的参考价值。
- 初始化 MySQL 服务:
mysqld --initialize --console
- 安装 MySQL 服务:
mysqld --install mysql
- 删除 MySQL 服务:
sc delete mysql
my.ini
配置文件
[mysqld]
port=3306
max_connections=200
max_connect_errors=10
character-set-server=utf8mb4
basedir=D:\\Software\\MySQL\\mysql-8.0.26
datadir=D:\\Software\\MySQL\\mysql-8.0.26\\data
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
- 启动服务:
net start mysql
- 关闭服务:
net stop mysql
- 登录:
mysql -h 主机名 -P 端口 -u 用户名 -p 密码
MySQL Client
的可执行程序是 mysql
,MySQL Server
的可执行程序是 mysqld
2. MySQL 介绍
- mysqld 程序在端口进行监听
- MySQL 数据库表中一行称为一条记录,一列称为一个字段。在 Java 程序中,一行记录往往使用对象表示
- SQL语句分类:
3.1 DDL(数据定义语句)[DEFINE]
3.2 DML(数据操作语句)[INSERT、UPDATE、DELETE]
3.3 DQL(数据查询语句)(SELECT)
3.4 DCL(数据控制语句)[GRANT REVOKE] - NoSQL 的发展历史:
4.1 1970:NoSQL = We have no SQL
4.2 1980:NoSQL = Know SQL
4.3 2000:NoSQL = No SQL!
4.4 2005:NoSQL = Not only SQL
4.5 2013:NoSQL = No,SQL!
- NULL 表示字段数据不存在,通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL
- 层次模型
- 网状模型
- 关系模型
3. 创建、查询、备份数据库
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification]···
[DEFAULT] CHARACTER SET char_set_name
[DEFAULT] COLLATE collation_name
- 查询数据库,为了规避关键字,可以使用反引号 `` 解决
SHOW DATABASES;
SHOW CREATE DATABASE db_name
DROP DATABASE [IF EXISTS] db_name
- 备份恢复数据库
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
mysqldump -u 用户名 -p 数据库 表1 表2 表n > 文件名.sql
Source 文件名.sql
- 创建表,如果表没有指定字符集、校对规则、引擎,则以数据库的设置为准
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
fieldn datatype
) CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎;
4. MySQL 的字段类型
数据类型 | 说明 |
---|
BIT(M) | 位类型。M 指定位数,8位一个字节,默认值是 1,范围[1,64],按二进制显示 |
TINYINT [UNSIGNED] | 占 1 个字节,带符号[-128,127],无符号[0,255],默认带符号 |
SMALLINT [UNSIGNED] | 占 2 个字节,带符号[215,215-1],无符号[0,216-1],默认带符号 |
MEDIUMINT [UNSIGNED] | 占 3 个字节,带符号[223,223-1],无符号[0,224-1],默认带符号 |
INT [UNSIGNED] | 占 4 个字节,带符号[231,231-1],无符号[0,232-1],默认带符号 |
BIGINT [UNSIGNED] | 占 8 个字节,带符号[263,263-1],无符号[0,264-1],默认带符号 |
FLOAT [UNSIGNED] | 浮点数,占 4 个字节 |
DOUBLE [UNSIGNED] | 浮点数,占 8 个字节 |
DECIMAL(M,D) [UNSIGNED] | 定点数,M 指定长度,D 指定小数点位数 |
CHAR(size) | 定长字符串,size 最大 255 个字符 |
VARCHAR(size) | 变长字符串,size 最大 65535 个字节 |
BLOB | 二进制数据,存储位数[0,216-1] |
LONGBLOB | 二进制数据,存储位数[0,232-1] |
TEXT | 文本数据,[0,216-1] |
LONGTEXT | 文本数据,[0,232-1] |
DATE | 日期类型(YYYY-MM-DD),占3个字节 |
TIME | 时间类型(HH:MM:SS),占3个字节 |
YEAR | 年,占1个字节 |
DATETIME | 日期时间类型(YYYY-MM-DD HH:mm:ss),占8个字节 |
TIMESTAMP | 时间戳,可自动记录 INSERT、UPDATE操作时间,占4个字节 |
- 列类型之bit:数据查询显示时,以二进制位的方式显示
- 列类型值小数型:DECIMAL(M,D):若省略 M,则默认值为 10;若省略 D,默认为 0
- 列类型之字符串:CHAR(size):定长字符串,最大 255 个字符
- 列类型之字符串:VARCHAR(size):变长字符串,最大 65535 个字节,实际上不能存放这么多
- MySQL 字符集说明:Unicode编码中一个字符占 3 个字节,GBK编码中一个字符占 2 个字节;UTF8 编码最大存放 21844 个字符,需要用 1~3 个字节用于记录字段大小即(65535字节 - 3字节)/ 3字节每字符 ) ;GBK编码最大存放 32766 个字符,需要用 1~3 个字节用于记录字段大小即(65535字节 - 3字节)/ 2字节每字符 )
- 列类型之字符串:CHAR(4) 数字 4 表示字符数,不管是中文还是英文都存放 4 个;VARCHAR(4) 数字 4 表示字符数,不管是字符还是中文都以定义好的表的编码来存放数据。即不管是中文还是英文字母,最多存放 4 个字符。其中VARCHAR(size) :如果编码为 UTF8,则 size 最大为 21844;如果编码是 GBK,则 size 最大为 32766。CHAR(size) 最大范围是 255
- CHAR(4) 所谓定长,指的是分配的空间是固定的,哪怕你只是插入了 “aa”,占用的空间也是 4 个字符的空间
- VARCHAR(4) 所谓变长,指的是占用的空间是动态大小,即根据实际占用的空间大小进行分配。VARCHAR 本身还需要占用 1~3 个字节来存放内容长度信息
- CHAR 的查询速度高于 VARCHAR。
- 在存放文本时,也可以使用 TEXT 数据类型,可以将 TEXT 列视为 VARCHAR 列,注意 TEXT 不能有默认值。大小范围为 [0,216-1] 字节。如果希望存放更多字符,可以使用 MEDIUMTEXT[0,224-1] 或 LONGTEXT[0,232-1]
5. 日期类型
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
6. 修改表
ALTER TABLE `table_name` ADD column1 datatype,columnn datatype
ALTER TABLE `table_name` ADD column1 datatype AFTER column_name
ALTER TABLE `table_name` MODIFY column1 datatype,columnn datatype
ALTER TABLE `table_name` DROP column1,columnn
ALTER TABLE `table_name` CHANGE old_column_name new_column_name datatype
ALTER TABLE `table_name` CHARSET character_set_name
DESC `table_name`
RENAME TABLE old_table_name TO new_table_name
7. INSERT、UPDATE、DELETE
- 如果是给表中所有字段添加数据,则可以省略字段名称
- 当不给某个字段添加值时,如果有默认值则自动添加默认值,否则报错
- 使用 DELETE 语句不能删除某一列的值,可用 UPDATE 语句将该列设为 NULL
- 使用 DELETE 语句仅删除记录,不能删除表本身。如要删除表,使用 DROP TABLE table_name 语句
INSERT INTO t01 VALUES (),(),()
UPDATE `table_name` SET col_name = exp1,col_name = exp2 WHERE ···
DELETE FROM `table_name` WHERE ···
8. SELECT
- WHERE 子句中常用的运算符
表达式 | 作用 |
---|
BETWEEN···AND··· | 显示在某一区间的值,闭区间 |
IN(set) | 显示在 IN 列表中的值 |
LIKE | 模糊查询 |
NOT LIKE | 模糊查询 |
IS NULL | 是否为空 |
AND | 与 |
OR | 或 |
NOT | 非 |
- ORDER BY 对指定的列进行排序,排序的列既可以是表中的列名,也可以是 SELECT 语句后指定的别名
- COUNT(*) 返回满足条件的的记录的行数;COUNT(列) 统计满足条件的某列有多少个,会排除 NULL
- 使用 HAVING 子句可以对分组后的结果进行筛选
- 不带 FROM 子句的 SELECT 语句有一个有用的用途,就是用来判断当前到数据库的连接是否有效。许多检测工具会执行一条
SELECT 1;
来测试数据库连接 - 投影查询:只选取数据库表中指定的列
- 聚合查询:如果聚合查询的 WHERE 条件没有匹配到任何行,
COUNT()
会返回 0,而 SUM()、AVG()、MAX() 和 MIN()
会返回 NULL - 连接查询:连接查询对多个表进行 JOIN 运算,简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地 “连接” 在主表结果集上
SELECT col1,col2,coln FROM `table_name` GROUP BY col_name HAVING exp
9. 字符串函数
SUBSTRING(str,pos,len)
:如果省略 len,则从 pos 位置开始截取完所有字符。例如:SUBSTRING('SpringBear',1,6)
从位置 1 开始截取 6 个字符,返回结果为:Spring- DUAL 表是系统的亚元表,在无表可用的情况下可以用 DUAL 来进行测试
函数名 | 作用 |
---|
CHARSET(str) | 返回字符串字符集 |
CONCAT(str1,str2···) | 连接字符串 |
INSTR(str,substr) | 返回 substr 在 str 中的出现位置,没有出现返回 0 |
UCASE(str) | 转换成大写 |
LCASE(str) | 转换成小写 |
LEFT(str,len) | 从 str 中的左边起取 len 长度个字符 |
LENGTH(str) | str 的长度,以字节为单位 |
REPLACE(str,search_str,replace_str) | 在 str 中用 replace_str 替换 search_str |
STRCMP(str1,str2) | 逐字符比较字符串大小 |
SUBSTRING(str,pos,len) | 在 str 中从pos开始取 len 个字符,pos 从1开始 |
LTRIM | 去除前端空格 |
RTRIM | 去除后端空格 |
TRIM | 去除前后端空格 |
10. 数学函数
函数名 | 功能 |
---|
ABS(num) | 绝对值函数 |
BIN(decimal_number) | 十进制转二进制 |
CEILING(num) | 向上取整,得到比 num 大的最小整数 |
CONV(num,from_base,to_base) | 进制转换,从指定的 from 进制转换到 to 进制 |
FLOOR(num) | 向下取整,得到比 num 小的最大整数 |
FORMAT(num,decimal_places) | 四舍五入保留指定的小数位数 |
HEX(num) | 转十六进制 |
LEAST(num1,num2···) | 求最小值 |
MOD(numerator,denominator) | 求余 |
RAND([seed]) | 随机数[0,1] |
11. 日期函数
DATE_ADD()
、DATE_SUB()
函数中的 date 可以是 date、datetime、timestamp,d_type 可以是年月日时分秒- 日期格式化
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s') FROM DUAL
函数名 | 功能 |
---|
CURRENT_DATE() | 当前日期 |
CURRENT_TIME() | 当前时间 |
CURRENT_TIMESTAMP() | 当前时间戳 |
DATE(datetime) | 返回 datetime 的日期部分 |
DATE_ADD(date,INTERVAL d_value d_type) | 在 date上加上一个日期或时间 |
DATE_SUB(date,INTERVAL d_value d_type) | 在 date 上减去一个时间 |
DATEDIFF(date1,date2) | 日期差,结果是天 |
TIMEDIFF(time1,time2) | 时间差,结果是时分秒 |
NOW() | 当前时间,年月日时分秒 |
YEAR(datetime) | 年 |
MONTH(datetime) | 月 |
UNIX_TIMESTAMP() | 返回 1970-1-1 到当前时间的秒数 |
FROM_UNIXTIME() | 将一个秒数转换成指定格式,例如年月日 |
12. 加密函数
SELECT USER() FROM DUAL
SELECT DATABASE() FROM DUAL
SELECT MD5(str) FROM DUAL
SELECT PASSWORD(str) FROM DUAL
SELECT * FROM 'db_name'.user
13. 流程控制函数
判断是否为空不使用 = NULL
,使用 IS NULL
IF(exp1,exp2,exp3)
IFNULL(exp1,exp2)
SELECT CASE WHEN exp1 THEN exp2 WHEN exp3 THEN exp4 ELSE exp5 END;
14. 查询增强和分页查询
%
表示 0 到多个字符;_
表示单个任意字符SELECT ··· LIMIT start, rows
从 start + 1 行开始,取出 rows 行,start 从 0
开始计算
SELECT col1,col2,coln
FROM table_name
GROUP BY col
HAVING `condition`
ORDER BY col
LIMIT `start`, `rows`
15. 多表查询
- 多表查询的条件不能少于表的个数 - 1,否则会出现笛卡尔集
SELECT * FROM `table_name` alias1, `table_name` alias2
INNER JOIN
是选出两张表都存在的记录
LEFT OUTER JOIN
是选出左表存在的记录
RIGHT OUTER JOIN
是选出右表存在的记录
FULL OUTER JOIN
则是选出左右表都存在的记录
16. 子查询
- 子查询是指嵌入在其它 SQL 语句中的 SELECT 语句,也叫嵌套查询
- 单行子查询:只返回一行数据的子查询语句
- 多行子查询:返回多行数据的子查询,使用关键字 IN 进行连接
- all:满足所有条件
- any:满足一个条件
table_name.*
表是把该表的所有列信息都显示出来
SELECT ··· WHERE (字段1,字段2···) = (SELECT 字段1,字段2 FROM ···)
17. 表复制与去重
- 自我复制也称蠕虫复制,为了对某条 SQL 语句进行效率测试,当我们需要海量数据时,可以进行蠕虫复制
- 去除表中的重复记录:创建一张与原表结构相同的表,从原表中将记录去重后插入到临时表,清除原表中的所有记录,再将临时表中的记录插入到原表,删除临时表
INSERT INTO `table_name` (field1,field2···) SELECT field1,field2 FROM `table_name`
CREATE TABLE `table_name` LIKE `table`
18. 合并查询
- 为了合并多个 SELECT 语句的结果,可以使用集合操作符号 UNION,UNION ALL
- UNION ALL 操作符用于取得两个结果集的并集,不会去除重复行,UNION会自动去重
19. 外连接
- 为了显示查询结果中某些不满足匹配条件的记录
- 左外连接:左侧的表完全显示
- 右外连接:右侧的表完全显示
- 用 ON 关键字进行条件过滤
SELECT ··· FROM table1 LEFT JOIN table2 ON condition1
SELECT ··· FROM table1 RIGHT JOIN table2 ON condition1
20. 键约束
- MySQL 中的约束条件共有 5 个:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK
- 主键不能重复且不能为空,一张表中最多有一个主键,可以是复合主键(多个字段构成主键)。id 的全局唯一 GUID 类型:使用一种全局唯一的字符串作为主键,类似
8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。GUID 算法通过网卡 MAC 地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键 - 当指定过滤 UNIQUE 约束后,该列值是不能重复的。如果没有指定 NOT NULL,则 UNIQUE 字段可以有多个 NULL
- 外键:用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是 UNIQUE 约束,当定义了外键约束后,要求外键列数据必须在主表的主键列存在或是为 NULL。由于外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性
FOREIGN KEY (本表字段名) REFERENCES 主表名(主键名或UNIQUE字段名)
- 表的引擎为 INNODB,这样的表才支持外键
- 外键字段的类型要和主键字段的类型一致
- 外键字段的值,必须在主键字段中出现过或是为 NULL,前提是外键字段允许为 NULL
- 一旦建立了主外键关系,数据的删除原则应遵循先删外键所在从表的记录,才能删除主表中对应的记录
- MySQL5.7 目前还不支持 check,只做语法校验,但不会生效。在 MySQL 中实现 check 的功能,一般是在程序中控制或是通过触发器完成
- 索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高;索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢
sex ENUM('男','女') NOT NULL
21. 自增长
-
一般来说自增长是和主键配合使用的,也可以单独使用但需要配合一个 UNIQUE,一般情况只用于整数
-
如果添加数据过程中存在指定的自增长值,则下一条记录从指定值之后开始自增
INSERT INTO `table_name` (字段1,字段2,···) VALUES (NULL,值2,···)
INSERT INTO `table_name` (字段2,字段3,···) VALUES (值2,值3,···)
INSERT INTO `table_name` VALUES (NULL,值2,值3,···)
ALTER TABLE `table_name` AUTO_INCREMENT = digit
22. 索引
- 创建索引后,只在查询有索引的列时速度明显提高
- 创建索引后磁盘空间占用变大
- 对 DML(update,delete,insert) 语句的效率影响,因为会重新构建索引所需数据结构
- 没有创建索引查询时会进行全表扫描,创建索引之后会使用创建的数据结构进行查询,查询效率明显提高
CREATE INDEX `index_name` ON `table_name`(fidld_name)
- 索引的分类:主键索引:主键自动为主索引、唯一索引:UNIQUE、普通索引:INDEX、全文索引:FULLTEXT,适用于 MyISAM(在开发中一般不使用 MySQL 自带的全文索引,考虑使用全文搜索框架 Solr 和 ElasticSearch)
- 索引选择:如果某列保证不可能重复,则优先考虑唯一索引
- 如果在建表语句中指定了 PRIMARY KEY 或 UNIQUE,则会自动创建索引;若没有指定,则可以在建表完成后通过添加索引语句创建索引
SHOW INDEXES FROM `table_name`
CREATE [UNIQUE] INDEX index_name ON `table_name` (col_name)
ALTER TABLE `table_name` ADD INDEX [index_name] (index_col_name)
ALTER TABLE `table_name` PRIMARY KEY (col_name)
DROP INDEX index_name ON `table_name`
ALTER TABLE `table_name` DROP PRIMARY KEY
- 较频繁的作为查询添加的字段应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合创建索引
23. 事务
- 事务:用于保证数据的一致性,它由一组相关的 DML 语句组成,该组的 DML 语句要么全部成功,要么全部失败
- 事务和锁:当执行事务操作时( DML 语句),MySQL 会在表上加锁,防止其它用户改表的数据
- 事务操作只能回退,不能回退后再前进
- 如果不开启事务,默认情况下,DML 操作是自动提交的,不能回滚
- MySQL 的事务机制需要 INNODB 的存储引擎,MyISAM 不可用
start transaction
savepoint point_name
rollback to point_name
rollback
commit
start transaction
set autocommit = off
24. 隔离级别
- 事务隔离级别:多个连接开启各自事务操作数据库中的数据时,DBMS 要负责隔离操作,以保证各个连接在获取数据时的准确性,如果不考虑隔离性,可能会引发脏读、不可重复读、幻读等问题,MySQL 隔离级别定义了事务与事务之间的隔离程度
- 脏读(
dirty read
):当一个事务读取到另一个事务尚未提交的操作时产生脏读 - 不可重复读(
nonrepeatable read
):同一查询在同一事务中多次进行,由于提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读 - 幻读(
phantom read
):同一查询在同一事务中多次进行,由于提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读
问题 | 描述 |
---|
脏读(dirty read) | 一个事务读取到另一个事务尚未提交的操作 |
不可重复读(nonrepeatable read) | 一个事务读取到另一个事务已提交的删除或修改操作 |
幻读(phantom read) | 一个事务读取到另一个事务已提交的插入操作 |
MySQL隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|
读未提交(read uncommintted) | Y | Y | Y | N |
读已提交(read committed) | N | Y | Y | N |
可重复读(repeatable read)(默认) | N | N | Y | N |
可串行化(serializable) | N | N | N | Y |
- 加锁:有且仅有一个事务正在处理数据
- 所谓正常情况:查询的数据是登录时刻的数据才算正常情况
- 可串行化:有一张表正在被另一个事务操作没有提交时,当前事务会停下等待,直到另一个事务提交操作时当前事务才可继续操作
SELECT @@tx_isolation
SELECT @@global.tx_isolation
SET SESSION TRANSACTION ISOLATION LEVEL isolation_name
SET GLOBAL SESSION TRANSACTION ISOLATION LEVEL isolation_name
- ACID 特性
名称 | 描述 |
---|
原子性(atomicity) | 事务是一个不可分割的工作单位,要么都发生,要么都失败 |
一致性(consistency) | 事务保证数据库从一个一致性状态转换到另一个一致性状态 |
隔离性(isolation) | 多个并发事务之间根据隔离级别不同相互隔离 |
持久性(durability) | 事务一旦提交,对数据的改变就是永久性的 |
25. 存储引擎
- MySQL的表类型由存储引擎决定,常用的是 InnoDB、MyISAM、Memory
- MySQL数据表主要支持六种类型,分别是:InnoDB、MyISAM、Memory、CSV、Archive、MRG_MyISAM
- 六种类型又分为两类:事务安全型 (transaction-safe) 和非事务安全型 (non-transaction-safe)。除了 InnoDB 是事务安全型,其余的都是非事务安全型(不支持事务)
SHOW ENGINES;
ALTER TABLE `table_name` ENGINE = engine_name
特点 | InnoDB | MyISAM | Memory | Archive |
---|
批量插入速度 | 低 | 高 | 高 | 非常高 |
事务安全 | 支持 | | | |
全文索引 | | 支持 | | |
锁机制 | 行锁 | 表锁 | 表锁 | 行锁 |
存储限制 | 64TB | 无限制 | 有限制 | 无限制 |
B树索引 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | | 支持 | |
集群索引 | 支持 | | | |
数据缓存 | 支持 | | 支持 | |
索引缓存 | 支持 | 支持 | 支持 | |
数据可压缩 | | 支持 | | 支持 |
空间使用 | 高 | 低 | | 非常低 |
内存使用 | 高 | 低 | 中等 | 低 |
支持外键 | 支持 | | | |
- MyISAM 不支持事务,不支持外键,但其访问速度快,对事务完整性没有要求
- InnoDB 提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起 MyISAM 存储引擎,InnoDB 写入数据的处理效率相对较低并且会占用更多的磁盘空间以保留数据和索引
- Memory 存储引擎使用内存来创建表。每个 Memory 表实际上值对应一个磁盘文件。表访问速度非常快,因为它的数据存放于内存中,并且默认使用 Hash 索引。一旦 MySQL 服务关闭,表中所有数据都会丢失,但表的结构仍然存在
- 存储引擎的选择:如果不需要事务操作,只是处理基本的 CRUD 操作,MyISAM 是不二之选;如果需要支持事务,InnoDB 非选不可;Memory 经典用法:用户的在线状态
26. 视图
- 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据映射自对应的真实表(基表)
- 基表与视图的修改会相互影响,视图中的数据并不物理保存,视图只是映射基表中的数据
- 创建视图后,磁盘中只会存在一个视图结构文件,不存在数据存储文件,因为视图中的数据映射自基表
- 视图中可以再创建视图
- 创建视图让用户只能通过视图查询到表中部分字段的数据,隐藏保密字段
- 关系数据库的数据常常会分表存储,使用外键维护这些表之间的关系。查询时难免用到连接(JOIN)。这样做不仅麻烦,效率也比较低。如果建立视图,将相关的表和字段组合在视图中,就可以避免使用 JOIN 查询数据
- 如果系统中有一些旧的表,这些表由于设计的问题,即将被废弃。然而,很多应用都依赖于这些表,不易修改。这时就可以建立一张视图,视图中的数据映射到这些表。这样,就可以少做很多改动,也达到了升级数据表的目的
CREATE VIEW view_name AS SELECT field1··· FROM `table_name`
ALTER VIEW view_name AS SELECT field1··· FROM `table_name`
SHOW CREATE VIEW view_name
DROP VIEW view_name
27. 用户管理
- 在创建用户的时候,如果不指定 Host,则为 %,% 表示所有 IP 都有连接权限
- 在删除用户的时候,如果 Host 不是 %,则需要明确指定 user@ip_addr
CREATE USER user_name @ip_addr IDENTIFIED BY pwd
DROP user_name @ip_addr
SET PASSWORD = PASSWORD(pwd)
SET PASSWORD FOR user_name @ip_addr = PASSWORD(new_pwd)
28. 权限管理
权限 | 内容 |
---|
ALL | 设置除 GRANT OPTION 之外的所有简单权限 |
ALTER | ALTER TABLE |
ALTER ROUTINE | 更改或取消已存储的子程序 |
CREATE | CREATE TABLE |
CREATE ROUTINE | 允许已存储的子程序 |
CREATE TEMPORARY TABLES | CREATE TEMPORARY TABLES |
CREATE USER | CREATE USER、DROP USER、RENAME USER、REVOKE ALL PRIVILEGES |
CREATE VIEW | CREATE VIEW |
DELETE | DELETE |
DROP | DROP TABLE |
EXECUTE | 语序用户运行已存储的子程序 |
FILE | SELECT···INTO OUTFILE、LOAD DATA INFILE |
INDEX | CREATE INDEX、DROP INDEX |
INSERT | INSERT |
LOCK TABLES | 对拥有 SELECT 权限的表使用 LOCK TABLES |
PROCESS | SHOW ALL PROCESSLIST |
REFERENCES | 未被实施 |
RELOAD | FLUSH |
REPLICATION CLIENT | 允许用户询问从属服务器或主服务器的地址 |
SELECT | SELECT |
SHOW DATABASES | SHOW DATABASES |
SHOW VIEW | SHOW CREATE VIEW |
SHUTDOWN | 允许使用 mysqladmin shutdown |
SUPER | CHANGE MASTER、KILL、PURGE MASTER LOGS、SET GLOBAL、mysqladmin debug;允许您连接(一次),即使已达到max_connections |
UPDATE | UPDATE |
USAGE | 无权限 |
GRANT OPTION | 允许授予权限 |
GRANT 权限列表 ON 库.对象 TO 用户名 @登录位置 [IDENTIFIED BY pwd]
GRANT SELECT,DELETE··· ON ···
GRANT ALL ON ···
REVOKE 权限列表 ON 库.对象名 FROM 用户名 @登录位置
FLUSH 韩顺平循序渐进学Java零基础 第24章 零基础学MySQL
零基础学MySQL
[MySQL]零基础学 MySQL
第24章 零基础学MySQL 章节练习题
请问零基础学Python,mySQL,sqlserver哪个简单?需要高等数学的基础吗?
从零基础开始学mysql(每天一个小妙招,关注博主学技术)