mysql
Mysql 必知必会
术语
不同的人可能会使用相同的数据库术语表示不同的事物,会造成一些混乱,下面是一张重要的数据库术语清单。
数据库(database)
数据库是保存有组织的数据的容器(通常是一个文件或一组文件)。
易混点:人们经常用“数据库”这个词代表他们使用的数据库软件。数据库软件是 DBMS(数据库管理系统),例如 MySQL 就是一种 DBMS ,而数据库是通过 DBMS 创建和操纵的容器。我们通常不直接访问数据库,而是通过使用 DBMS 来访问数据库。
表(table)
表是某种特定类型数据的结构化清单。
数据库中的每个表都有一个名字,用来标识自己,称之为“表名”。此名字是唯一的,在相同的数据库中不能使用重复的表名,但是在不同的数据库中可以使用。
模式(schema)
模式是关于数据库和表的布局及特性的信息。
列(column)
列是表中的一个字段。所有的表都是由一个或多个列组成的。
数据类型(datatype)
数据类型是所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据类型。
行(row)
行是表中的一个记录。
有人会把行(row)称之为数据库记录(record),这两个数据是可以互相代替的,但是从技术上说,行才是正确的术语。
主键(primary key)
主键是一列(或一组列),其值能够唯一区分表中每个行。
表中的任何列只要满足以下条件,都可以作为主键:
任意两行都不具有相同的主键值;
每个行都必须具有一个主键值(主键列不允许 NULL 值)
此外还有几个主键的最佳实践:
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,就得必须更改这个主键。)
子句(clause)
SQL 语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。例如 SELECT 语句的 FROM 子句。
SQL(Structured Query Language)
SQL 是结构化查询语言(Structured Query Language)的缩写,是一种专门用来与数据库通信的语言。
SQL 的优点:
SQL 不是某个特定数据库供应商专有的语言。即 SQL 不是一种专利语言,而且存在一个标准委员会。几乎所有重要的 DBMS 都支持 SQL。
SQL 简单易学。它的语句全都是由描述性很强的英语单词组成,而且这些单词的书目不多。
SQL 尽管看上去很简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
MySQL 安装
推荐几个 MySQL 安装和连接的经验文章
MySQL 应用
mysql 命令行
命令输入在 mysql> 之后;
命令用 ; 或 \g 结束,换句话说,仅按 Enter 不执行命令;
输入 help 或 \h 获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入 help select 获得试用 SELECT 语句的帮助);
输入 quit 或 exit 退出命令行。
连接数据库
连接数据库需要以下信息:
主机名(计算机名)——如果连接到本地 MySQL 服务器,为 localhost ;
端口(如果使用默认端口 3306 之外的端口);
一个合法的用户名;
用户口令(如果需要)
例如下面的指令:
数据库的登录和成员管理
访问控制
MySQL 服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。
需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制。访问控制的目的不仅仅是防止用户的恶意企图,访问控制也有助于避免很常见的无意识错误的结果,如错打 MySQL 语句,在不合适的数据库中操作或其他一些用户错误。
管理用户
查询已有用户
MySQL 用户账号和信息存储在名为 mysql 的 MySQL数据库中。一般只有在需要获得所有用户账号列表时才会直接访问。
创建用户账号
1、使用 CREATE USER 语句(推荐)
```sql
输入CREATE USER chenfangxu IDENTIFIED BY '123456'; SELECT user FROM user;
输出
+------------------+ | user | +------------------+ | chenfangxu | | test | | root | +------------------+
3、使用 INSERT 直接插入行到 user 表来增加用户(不建议)
设置访问权限
在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。他们能登录 MySQL ,但不能看到数据,不能执行任何数据库操作。
查看赋予用户账号的权限
SHOW GRANTS FOR
权限 USAGE ON *.* ,USAGE表示根本没有权限,这句话就是说在任意数据库和任意表上对任何东西没有权限。
chenfangxu@% 因为用户定义为 user@host, MySQL的权限用用户名和主机名结合定义,如果不指定主机名,则使用默认的主机名%(即授予用户访问权限而不管主机名)。
添加(更新)用户权限
GRANT privileges ON databasename.tablename TO 'username'@'host';```sql
输入GRANT SELECT ON performance_schema.* TO chenfangxu@'%'; SHOW GRANTS FOR chenfangxu;
输出
+------------------------------------------------------------+ | Grants for chenfangxu@% | +------------------------------------------------------------+ | GRANT USAGE ON . TO chenfangxu@% | | GRANT SELECT ON performance_schema.* TO chenfangxu@% | +------------------------------------------------------------+
重命名
重命名:
RENAME USER 'username' TO 'newusername';```sql
输入RENAME USER test TO test1; SELECT user FROM user;
输出
+------------------+ | user | +------------------+ | test1 | | root | +------------------+
删除用户
删除用户:
DROP USER 'username'@'host';
MySQL 5 以前, DROP USER 只能用来删除用户账号,不能删除相关的权限。因此,如果使用旧版的 MySQL 需要先用 REVOKE 删除与账号相关的权限,然后再用 DROP USER 删除账号。
操作数据库
DESCRIBE 语句
MySQL 中 DESCRIBE 可以作为 SHOW COLUMNS FROM 的快捷方式。
检索数据
排序检索数据
不使用排序时,其实检索出的数据并不是以纯粹的随机顺序显示的,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序,但是,如果数据后来进行过更新或者删除,则此顺序将会受到 MySQL 重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。
关系数据库设计理论认为:如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。
ORDER BY 子句,可以给 SELECT 语句检索出来的数据进行排序。 ORDER BY 子句取一个或多个列的名字。据此对输出进行排序。
注意:
ORDER BY 子句中使用的列不一定非得是检索的列,用非检索的列排序也是完全合法的。
如果想在多个列上进行降序排序,必须对每个列指定 DESC 关键字。
ASC 是升序排序,升序是默认的,不指定 DESC ,那就是按照 ASC 升序排序。
ORDER BY 子句必须位于 FROM 子句之后,如果使用 LIMIT ,它必须位于 ORDER BY 之后。
过滤数据
数据库包含大量的数据,但是我们很少需要检索表中所有的行。只检索所需数据需要指定过滤条件,在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。
补充
一些注意点
1、多条 SQL 语句必须以分号(;)分隔。
2、SQL 语句不区分大小写,因此,例如 SELECT 和 select 是相同的,即使写成 SelEct 都是没有问题的。大家约定俗成的把 SQL 关键词大写,其他的列和表名用小写,这样做使代码更易于阅读和调试。
3、在处理 SQL 语句时,其中所有空格都会被忽略。
其他指令
查看当前 MySQL 版本或者当前在哪个数据库中。
查看当前 MySQL 的密码策略
要注意 validate_password_policy:密码强度检查等级
级别
描述
0/LOW
只检查长度。
1/MEDIUM
检查长度、数字、大小写、特殊字符。
2/STRONG
检查长度、数字、大小写、特殊字符字典文件
其他的 SHOW 命令列表
Last updated