欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL创建用户与授权方法、MySQL查看版本号、MySQL执行SQL脚本的方法

程序员文章站 2022-05-31 23:49:37
-------------------帮助的使用---------------------- 使用MySQL安装后自带的帮助文档 --按照层次看帮助 显示所有可供查询的的分类...

-------------------帮助的使用----------------------

使用MySQL安装后自带的帮助文档

--按照层次看帮助

显示所有可供查询的的分类:contents

“类别名称”的方式针对用户感兴趣的内容做进一步的查看

example:

mysql> ? data types

--查看 MySQL 中都支持哪些数据类型

mysql> ? BINARY

--查看类型的具体介绍

Name: 'BINARY'

Description:

BINARY(M)

The BINARY type is similar to the CHAR type, but stores binary byte

strings rather than nonbinary character strings. M represents the

column length in bytes.

URL: https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html

--快速查阅帮助

快速查阅某项语法--MySQL对空格貌似比较敏感

example:

mysql> ? create table

--常用的网络资源

-------------------查看版本号----------------------

--1.使用命令行模式进入mysql会看到最开始的提示符

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 15

Server version: 8.0.0-dmr-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

--2.命令行中使用status可以看到

mysql> status;

--------------

mysql Ver 14.14 Distrib 8.0.0-dmr, for Win64 (x86_64)

Connection id: 15

Current database:

Current user: root@localhost

SSL: Not in use

Using delimiter: ;

Server version: 8.0.0-dmr-log MySQL Community Server (GPL)

Protocol version: 10

Connection: localhost via TCP/IP

Server characterset: utf8

Db characterset: utf8

Client characterset: utf8

Conn. characterset: utf8

TCP port: 3306

Uptime: 12 hours 26 min 47 sec

Threads: 1 Questions: 118 Slow queries: 0 Opens: 292 Flush tables: 2 Open tables: 268 Queries per second avg: 0.002

--------------

--3.使用系统函数

mysql> select version();

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

| version() |

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

| 8.0.0-dmr-log |

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

1 row in set (0.00 sec)

--4. $ mysql --help | grep Distrib

mysql Ver 14.14 Distrib 5.1.69, for redhat-linux-gnu (x86_64) using readline 5.1

--5.5 包管理工具(根据不同系统 rh系列或则是bsd系列)

$ rpm -qa|grep mysql

qt-mysql-4.6.2-20.el6.x86_64

mysql-server-5.1.69-1.el6_4.x86_64

mysql-libs-5.1.69-1.el6_4.x86_64

mysql-5.1.69-1.el6_4.x86_64

mysql-devel-5.1.69-1.el6_4.x86_64

-------------------MySQL创建用户与授权方法----------------------

--在MySQL查看MySQL的安装目录

mysql> select @@basedir;

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

| @@basedir |

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

| C:\Program Files (x86)\MySQL\MySQL Server 5.1\ |

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

1 row in set (0.00 sec)

--创建用户及授权

CREATE USER 'lin'@'localhost' IDENTIFIED BY 'mypass';

grant all on *.* to 'lin'@'localhost';

https://www.jb51.net/article/31850.htm

https://www.cnblogs.com/bethal/p/5512755.html

-------------------MySQL执行SQL脚本的方法----------------------

1.在命令行下(未连接数据库),输入 mysql -h localhost -u root -p123456 < F:\hello world\niuzi.sql (注意路径不用加引号的!!) 回车即可.

2.在命令行下(已连接数据库,此时的提示符为 mysql> ),输入

source F:\hello world\niuzi.sql (注意路径不用加引号的) 或者

\. F:\hello world\niuzi.sql (注意路径不用加引号的) 回车即可

-------------------MySQL支持的数据类型----------------------

--1.数值类型

如果超出类型范围的操作,会发生 “Out of range ”错误提示。

如果不显示指定宽度则默认为 int(11)。

一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够

的空间用字符“0”填满。

--zerofill的使用

mysql> alter table t1 modify id2 int(5) zerofill;

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

| id1 | id2 |

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

| 0000000001 | 00001 |

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

1 row in set (0.00 sec)

--设置了宽度限制后,如果插入大于宽度限制的值,会不会截断或者插不进去报错?

答案:不会;

对插入的数据有任何影响,还是按照类型的实际精度进行保存。

这时,宽度格式实际已经没有意义,左边不会再填充任何的“0”字符。

--UNSIGNED:整型类型的可选属性之一

如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,

它的取值范围是正常值的下限取 0,上限取原值的 2 倍。

例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。

如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。

--AUTO_INCREMENT:整型类型的可选属性之一

在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。

--对于小数:浮点数和定点数

浮点数: float(单精度)和 double(双精度)

定点数:decimal不指定精度时,默认的整数位为 10,默认的小数位为 0。

MySQL 保存值时进行四舍五入

--浮点数如果不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;

--定点数如果不写精度和标度,则按照默认值 decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。

--BIT(M)

对于 BIT(位)类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M 范围从 1~

64,如果不写则默认为 1 位。对于位字段,直接使用 SELECT 命令将不会看到结果,可以用

bin()(显示为二进制格式)或者 hex()(显示为十六进制格式)函数进行读取。

example:

select bin(t_bit),hex(t_bit) from t_book;

--2.日期时间类型

这些数据类型的主要区别如下:

--1.如果要用来表示年月日,通常用 DATE 来表示。

--2.如果要用来表示年月日时分秒,通常用 DATETIME 表示。

--3.如果只用来表示时分秒,通常用 TIME 来表示。

--4.如果需要经常插入或者更新日期为当前系统时间,则通常使用 TIMESTAMP 来表示。

--5.TIMESTAMP 值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为 19 个字符。如果想要获得数字值,应在 TIMESTAMP 列添加+0。

--6.如果只是表示年份,可以用 YEAR 来表示,它比 DATE 占用更少的空间。YEAR 有 2 位或4 位格式的年。

--默认是 4 位格式。在 4 位格式中,允许的值是 1901~2155 和 0000。在

--2 位格式中,允许的值是 70~69,表示从 1970~2069 年。

--MySQL 以 YYYY 格式显示 YEAR值。

--TIMESTAMP

MySQL规定TIMESTAMP类型字段只能有一列的默认值为current_timestmap,如果强制修改,系统会报错.

TIMESTAMP还有一个特性是与时区有关:当插入日期时,会先转换为本地时区后存放;

而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。

这样,两个不同时区的用户看到的同一个日期可能是不一样的。

TIMESTAMP的取值范围为19700101080001到2038年的某一天,因此它不适合存放比较久远的日期;

可以往TIMESTAMP类型的字段插入一个很长的数字试试看

--查看当前时区

mysql> show variables like 'time_zone';

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

| Variable_name | Value |

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

| time_zone | SYSTEM |

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

1 row in set, 1 warning (0.01 sec)

--修改时区为东九区

mysql> set time_zone='+9:00';

--采用不同的格式将日期“2007-9-3 12:10:10”插入到 DATETIME列中

mysql> create table t6(dt datetime);

mysql> insert into t6 values('2007-9-3 12:10:10');

mysql> insert into t6 values('2007/9/3 12+10+10');

mysql> insert into t6 values('20070903121010');

mysql> insert into t6 values(20070903121010);

mysql> select * from t6;

--3.字符串类型

--1.CHAR 和 VARCHAR 类型

CHAR 列的长度固定为创建表时声明的长度,长度可以为从 0~255 的任何值;

而 VARCHAR 列中的值为可变长字符串,长度可以指定为 0~255 (5.0.3以前)或者 65535 (5.0.3以后)之间的值。

在检索的时候,CHAR 列删除了尾部的空格,而 VARCHAR 则保留这些空格。

example:

mysql> create table vc(v varchar(4),c char(4));

mysql> insert into vc values('ab ','ab ');

mysql> select length(v),length(c) from vc;

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

| length(v) | length(c) |

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

| 3 | 2 |

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

1 row in set (0.03 sec)

--2.BINARY 和 VARBINARY 类型

它们包含二进制字符串而不包含非二进制字符串

BINARY和VARBINARY的长度是字节长度而不是字符长度。

mysql> create table t(c binary(3));

mysql> insert into t set c = 'a';

mysql> select * ,hex(c),c='a',c='a\0',c='a\0\0' from t;

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

| c | hex(c) | c='a' | c='a\0' | c='a\0\0' |

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

| a | 610000 | 0 | 0 | 1 |

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

1 row in set (0.00 sec)

--3.ENUM (枚举)类型

ENUM 类型只允许从值集合中选取单个值,而不能一次取多个值

example:

mysql> create table t (gender enum('M','F'));

mysql> INSERT INTO t VALUES('M'),('1'),('f'),(NULL);

mysql> select * from t;

+--------+

| gender |

+--------+

| M |

| M |

| F |

| NULL |

+--------+

4 rows in set (0.01 sec)

--4.SET 类型

Set 和 ENUM 除了存储之外,最主要的区别在于 Set 类型一次可以选取多个成员,而 ENUM则只能选一个.

SET 类型可以从允许值集合中选择任意 1 个或多个元素进行组合,所以对于输入的值只要是

在允许值的组合范围内,都可以正确地注入到 SET 类型的列中。对于超出允许值范围的值例

如( ' a,d,f ' )将不允许注入到上面例子中设置的 SET 类型列中,而对于( ' a,d,a ' )这样包含重

复成员的集合将只取一次,写入后的结果为“a,d”,这一点请注意。

example:

mysql> create table t(col set('a','b','c','d'));

mysql> insert into t values('a,b'),('a,d,a'),('a,b'),('a,c'),('a');

mysql> select * from t;

+------+

| col |

+------+

| a,b |

| a,d |

| a,b |

| a,c |

| a |

73

+------+

5 rows in set (0.00 sec)

-------------------MySQL中的运算符----------------------

--1.算术运算符

mysql> select 0.1+ 0.3333 ,0.1-0.3333, 0.1*0.3333, 1/2,1%2;

%:用一个数除以另一个数然后取余;效果等同于取模mod(a,b)。

--2.比较运算符

除了常规的<、>、>=外,还有以下几种:

<>或!= :不等于

<=> :NULL 安全的等于(NULL-safe)

BETWEEN :存在与指定范围

IN :存在于指定集合

IS NULL :为 NULL

IS NOT NULL :不为 NULL

LIKE :通配符匹配

REGEXP 或 RLIKE :正则表达式匹配

* NULL 不能用于“=”比较

* “IN”运算符的使用格式为“a IN (value1,value2,…)”

* “REGEXP”运算符的使用格式为“str REGEXP str_pat”,当 str 字符串中含有 str_pat相匹配的字符串时,

则返回值为 1,否则返回 0。

--3.逻辑运算符(布尔运算符)

MySQL 支持 4 种逻辑运算符

运算符 作用

NOT 或! 逻辑非

AND 或&& 逻辑与

OR 或 || 逻辑或

XOR 逻辑异或

* mysql> select not 0, not 1, not null ;

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

| not 0 | not 1 | not null |

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

| 1 | 0 | NULL |

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

1 row in set (0.00 sec)

* “XOR”表示逻辑异或。当任意一个操作数为 NULL 时,返回值为 NULL。

对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1;否则返回 0。

mysql> select 1 xor 1 ,0 xor 0,1 xor 0,0 xor 1,null xor 1;

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

| 1 xor 1 | 0 xor 0 | 1 xor 0 | 0 xor 1 | null xor 1 |

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

| 0 | 0 | 1 | 1 | NULL |

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

1 row in set (0.00 sec)

--4.位运算符

位运算符一般用于加密,或者提高程序的性能等

运算符 作用

& 位与(位 AND)

| 位或 (位 OR )

^ 位异或(位 XOR)

~ 位取反

>> 位右移

<< 位左移

* 十 二

2-> 10

& 3-> 11

--------

10 -> 十

--------

2 -> 二

* 异或^的规律之一: a = a^b^b;

* 位取反~:

mysql> select ~1,~18446744073709551614;

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

| ~1 | ~18446744073709551614 |

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

| 18446744073709551614 | 1 |

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

1 row in set (0.00 sec)

在 MySQL 中,常量数字默认会以 8 个字节来表示,8 个字节就是 64 位,常量 1 的二进制表示为 63 个“0”

加1个“1”,位取反后就是63个“1”加一个“0”,转换为二进制后就是18446744073709551614。

mysql> select bin(18446744073709551614);

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

| bin(18446744073709551614) |

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

| 1111111111111111111111111111111111111111111111111111111111111110 |

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

1 row in set (0.00 sec)

--5.运算符的优先级

很多情况下我们都是用“()”来将需要优先的操作括起来,

这样既起到了优先的作用,又使得其他用户看起来更加易于理解。

优先级顺序 运算符

1 :=

2 ||, OR, XOR

3 &&, AND

4 NOT

5 BETWEEN, CASE, WHEN, THEN, ELSE

6 =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN

7 |

8 &

9 <<, >>

10 -, +

11 *, /, DIV, %, MOD

12 ^

13 - (一元减号), ~ (一元比特反转)

14 !

-------------------MySQL的常用函数----------------------

--字符串函数(常用)

函数 功能

CANCAT(S1,S2,…Sn) 连接 S1,S2,…Sn 为一个字符串

INSERT(str,x,y,instr) 将字符串 str 从第 x 位置开始,y 个字符长的子串替换为字符串 instr

LOWER(str) 将字符串 str 中所有字符变为小写

UPPER(str) 将字符串 str 中所有字符变为大写

LEFT(str ,x) 返回字符串 str 最左边的 x 个字符

RIGHT(str,x) 返回字符串 str 最右边的 x 个字符

LPAD(str,n ,pad) 用字符串 pad 对 str 最左边进行填充,直到长度为 n 个字符长度

RPAD(str,n,pad) 用字符串 pad 对 str 最右边进行填充,直到长度为 n 个字符长度

LTRIM(str) 去掉字符串 str 左侧的空格

RTRIM(str) 去掉字符串 str 行尾的空格

REPEAT(str,x) 返回 str 重复 x 次的结果

REPLACE(str,a,b) 用字符串 b 替换字符串 str 中所有出现的字符串 a

STRCMP(s1,s2) 比较字符串 s1 和 s2

TRIM(str) 去掉字符串行尾和行头的空格

SUBSTRING(str,x,y) 返回从字符串 str x 位置起 y 个字符长度的字串

mysql> select substring('beijing2008',8,4),substring('beijing2008',1,7);

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

| substring('beijing2008',8,4) | substring('beijing2008',1,7) |

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

| 2008 | beijing |

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

1 row in set (0.03 sec)

--数值函数

MySQL 中的常用数值函数

函数 功能

ABS(x) 返回 x 的绝对值

CEIL(x) 返回大于 x 的最大整数值

FLOOR(x) 返回小于 x 的最大整数值

MOD(x,y) 返回 x/y 的模

RAND() 返回 0 到 1 内的随机值(不用带参数)

ROUND(x,y) 返回参数 x 的四舍五入的有 y 位小数的值

TRUNCATE(x,y) 返回数字 x 截断为 y 位小数的结果

--日期和时间函数

MySQL 中的常用日期时间函数

函数 功能 示例

CURDATE() 返回当前日期 (2017-11-22)

CURTIME() 返回当前时间 (21:28:33)

NOW() 返回当前的日期和时间 (2017-11-22 21:28:38)

UNIX_TIMESTAMP(date) 返回日期 date 的 UNIX 时间戳 select UNIX_TIMESTAMP(now());

FROM_UNIXTIME 返回 UNIX 时间戳的日期值 select FROM_UNIXTIME(1184134516);

WEEK(date) 返回日期 date 为一年中的第几周 select WEEK(now()),YEAR(now());

YEAR(date) 返回日期 date 的年份

HOUR(time) 返回 time 的小时值 select HOUR(CURTIME()),MINUTE(CURTIME());

MINUTE(time) 返回 time 的分钟值

MONTHNAME(date) 返回 date 的月份名 select monthname(now());

DATE_FORMAT(date,fmt) 返回按字符串 fmt 格式化日期 date 值 select DATE_FORMAT(now(),'%M,%D,%Y');

DATE_ADD(date,INTERVAL expr type) 返回一个日期或时间值加上一个时间间隔的时间值

DATEDIFF(expr,expr2) 返回起始时间 expr 和结束时间 expr2 之间的天数

select DATEDIFF('2008-08-08',now());--计算出当前距离 2008 年 8 月 8 日的奥运会开幕式还有多少天

unix时间戳(Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。[1]

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)

是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z.

一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。

在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。

--第 1 列返回了当前日期时间,第 2 列返回距离当前日期31 天后的日期时间,第 3 列返回距离当前日期一年两个月后的日期时间。

mysql> select now() current,date_add(now(),INTERVAL 31 day) after31days,

date_add(now(),INTERVAL '1_2' year_month) after_oneyear_twomonth;

--第 1 列返回了当前日期时间,第 2列返回距离当前日期 31 天前的日期时间,第 3 列返回距离当前日期一年两个月前的日期时间。

mysql> select now() current,date_add(now(),INTERVAL -31 day) after31days,

date_add(now(),INTERVAL '-1_-2' year_month) after_oneyear_twomonth;

MySQL 中的日期时间格式

格式符 格式说明

%S,%s 两位数字形式的秒(00,01,...,59)

%i 两位数字形式的分(00,01,...,59)

%H 两位数字形式的小时,24 小时(00,01,...,23)

%h,%I 两位数字形式的小时,12 小时(01,02,...,12)

%k 数字形式的小时,24 小时(0,1,...,23)

%l 数字形式的小时,12 小时(1,2,...,12)

%T 24小时的时间形式(hh:mm:ss)

%r 12小时的时间形式(hh:mm:ssAM 或 hh:mm:ssPM)

%p AM 或 PM

%W 一周中每一天的名称(Sunday,Monday,...,Saturday)

%a 一周中每一天名称的缩写(Sun,Mon,...,Sat)

%d 两位数字表示月中的天数(00,01,...,31)

%e 数字形式表示月中的天数(1,2,...,31)

%D 英文后缀表示月中的天数(1st,2nd,3rd,...)

%w 以数字形式表示周中的天数(0=Sunday,1=Monday,...,6=Saturday)

%j 以 3 位数字表示年中的天数(001,002,...,366)

%U 周(0,1,52),其中 Sunday 为周中的第一天

%u 周(0,1,52),其中 Monday 为周中的第一天

%M 月名(January,February,...,December)

%b 缩写的月名(January,February,...,December)

%m 两位数字表示的月份(01,02,...,12)

%c 数字表示的月份(1,2,...,12)

%Y 4 位数字表示的年份

%y 两位数字表示的年份

%% 直接值“%”

--流程函数

MySQL 中的流程函数

函数 功能

IF(value,t f) 如果 value 是真,返回 t;否则返回 f;(有点像java中的三目运算符)

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

IFNULL(value1,value2) 如果 value1 不为空返回 value1,否则返回 value2

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

CASE WHEN [value1] 如果 value1 是真,返回 result1,否则返回 default

THEN[result1]…ELSE[default]END

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

CASE [expr] WHEN [value1] 如果 expr 等于 value1,返回 result1,否则返回 default

THEN[result1]…ELSE[default]END

IFNULL(value1,value2)函数:这个函数一般用来替换 NULL 值的,我们知道 NULL 值是不

能参与数值运算的,下面这个语句就是把 NULL 值用 0 来替换。

mysql> select ifnull(salary,0) from salary;

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

| ifnull(salary,0) |

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

| 1000.00 |

| 2000.00 |

| 3000.00 |

| 4000.00 |

| 5000.00 |

| 0.00 |

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

6 rows in set (0.00 sec)

mysql> select case when salary<=2000 then 'low' else 'high' end from salary;

mysql> select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;

--MySQL 中的其他常用函数

函数 功能

DATABASE() 返回当前数据库名

VERSION() 返回当前数据库版本

USER() 返回当前登录用户名

INET_ATON(IP) 返回 IP 地址的网络字节序表示

INET_NTOA(num) 返回网络字节序代表的 IP 地址

PASSWORD(str) 返回字符串 str 的加密版本,一个 41 位长的字符串;

MD5() 返回字符串 str 的 MD5 值;常用来对应用中的数据进行加密

mysql> select INET_ATON('192.168.1.1');

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

| INET_ATON('192.168.1.1') |

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

| 3232235777 |

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

1 row in set (0.00 sec)

mysql> select INET_NTOA(3232235777);

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

| INET_NTOA(3232235777) |

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

| 192.168.1.1 |

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

1 row in set (0.00 sec)

--PASSWORD(str)

返回字符串 str 的加密版本,一个 41 位长的字符串;

此函数只用来设置系统用户的密码,但是不能用来对应用的数据加密。如果应用方面有加密的需求,可以使用 MD5 等加密函数来实现。

-------------------查看 mysql 64位 还是 32位----------------------

mysql> show variables like '%version_%';

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

| Variable_name | Value |

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

| slave_type_conversions | |

| version_comment | MySQL Community Server (GPL) |

| version_compile_machine | x86_64 |

| version_compile_os | Win64 |

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

4 rows in set, 1 warning (0.11 sec)