MySQL知识手册

MySQL知识手册速查表

 

目录

连接到mysql服务器1

创建和显示数据库1

创建表1

修改表1

查询数据1

分组1

插入数据1

更新数据1

删除数据1

转换数据类型1

文本函数1

过滤输出1

文本连接1

其它有用的文本函数1

数值函数1

有用的NULL函数1

日期时间1

时间间隔1

现在什么时间1

创建时间/日期值1

提取日期的一部分1

日期运算1

 


 

连接到mysql服务器

使用MySQL命令行客户端,通过用户名和密码连接到MySQL服务器

MySQL将提示输入 密码:

Mysql -u [username] -p

 

使用用户名和密码连接到MySQL服务器上的特定数据库:

Mysql -u [username] -p [database]

 

使用mysqldump工具导出数据:

Mysqldump -u [username] -p \ [database] > data_backup.sql

 

退出客户端:

Quit or exit

 

帮助,输出命令的完整列表:

Help

 

创建和显示数据库

 

创建一个数据库

CREATE DATABAASE zoo;

 

列出服务器上的所有数据库:

SHOW DATABASES;

 

使用指定的数据库:

USE zoo;

 

删除指定的数据库:

DROP DATABASE zoo;

 

列出数据库下所有表:

SHOW TABLES;

 

输出指定表的信息:

DESCRIBE animal;

它输出列名,数据类型,默认值以及有关该表的更多信息。

 

创建表

创建表

CREATE TABLE habitat (

         id INT,

         name VARCHAR(64)

);

使用AUTO_INCREMENT可以创建随每条新记录自动增长的ID

AUTO_INCREMENT列必须定义为主键或唯一索引:

CREATE TABLE animal (

         id INT PRIMARY KEY AUTO_INCREMENT,

         name VARCHAR (64),

         npecies VARCHAR (64),

         age INT,

         habitat_id INT,

         FOREIGN KEY (habitat_id)

         REFERENCES habitat (id)

);

 

修改表

使用ALTER TABLE语句修改表结构

修改表名字:

ALTER TABLE animal RENAME pet;

 

给表添加一列:

ALTER TABLE animal ADD COLUMN name VARCHAR (64);

 

修改列的名字:

ALTER TABLE animal RENAME COLUMN id TO  identifier;

 

修改列的数据类型:

ALTER TABLE animal MODIFY COLUMN name VARCHAR(128);

 

删除一列:

ALTER TABLE animal DROP COLUMN name;

 

删除一个表:

DROP TABLE animal;

 

查询数据

使用SELECT命令可以从表中查询数据:

一个单表查询的例子:

SELECT species, AVG ( age ) AS average_age

FROM animal

WHERE id != 3

GROUP BY species

HAVING AVG ( age )  > 3

ORDER BY AVG ( age )  DESC;

 

一个多表查询的例子:

SELECT city.name, country.name FROM city [ INNER | LEFT | RIGHT ] JOIN country ON city.country_id = country.id;

 

使用+ – * / 可以做基本运算

例:得到一周的秒数

SELECT 60 * 60 * 24 *7; — result: 604800

 

聚合与分组

l   AVG ( expr ) 分组的expr的平均值

l   COUNT ( expr ) 分组的expr的数量

l   MAX ( expr ) 分组的expr的最大值

l   MIN ( expr ) 分组的expr的最小值

l   SUM ( expr ) 分组的expr的总和

计算表中的行数:

SELECT COUNT ( * ) FROM animal;

 

计算指定列中非空值的数量:

SELECT COUNT ( name ) FROM animal;

 

计算列中唯一值的数量:

SELECT COUNT ( DISTINCT name ) FROM animal;

 

分组

按物种分组计算动物数量

SELECT species, COUNT( id )

FROM animal

GROUP BY species;

 

按栖息地分组得以平均,最小和最大年龄

SELECT habitat_id , AVG (age ), MAX ( age), MIN ( age)

FROM animal

GROUP BY habitat_id;

 

插入数据

INSERT命令向表中插入数据:

INSERT INTO habitat VALUES

(1,’River’),

(2,’Forest’);

 

可以指定要插入的列,其余列会用默认值或NULL填充

INSERT INTO habitat ( name ) VALUES ( ’Savanna’ );

 

更新数据

UPDATE命令更新表中的数据:

UPDATE animal

SET

         species = ‘Duck’,

         name = ‘Quack’

WHERE id = 2;

 

删除数据

DELETE 命令从表中删除数据:

DELETE FROM animal WHERE id = 1;

TRUNCATE TABLE命令从表中删除所有数据:

TRUNCATE TABLE animal;

 

转换数据类型

使用CAST()函数,可以改变一个值的类型mysql中,你可以转换为以下数据类型:

CHAR

NCHAR

BINARY

DATE

DATETIME

DECIMAL

DOUBLE

FLOAT

REAL

SIGNED

UNSIGNED

TIME

YEAR

JSON

Spatial_type

 

把数字转换为有符号整数

SELECT CAST ( 1234.456 AS SIGNED )–result:1235

 

把列的类型转换为double输出

SELECT CAST ( column AS DOUBLE );

 

文本函数

过滤输出

获取城市名字不是Berlin的行;

SELECT name

FROM city

WHERE name != ‘Berlin’;

 

文本操作符

获取以”P”开头或以”s”结尾的城市名称

SELECT name

FROM city

WHERE name LIKE ‘P%OR name LIKE%s’;

 

获取以任意字母开头,后跟”ublin”的城市名称(如爱尔兰Dublin 波兰Lublin:

SELECT name

FROM city

WHERE name LIKE_ublin’;

 

文本连接

CONCAT( )函数可以连接两个字符串:

SELECT CONCAT ( ‘Hi’ , ’there!’ )–result: Hi there!

 

如果任一字符串为NULL,则结果为NULL

SELECT CONCAT ( ‘Hi’ , ’there!’,NULL )–result: NULL

 

使用CONCAT_WS( )函数指定分隔符。分隔符位于边接的值之间:

SELECT CONCAT_WS ( ‘ ’ ,1 , ‘ Olivier’,’Norris’ ); –result:  1 Olivier Norris

 

其它有用的文本函数

获取字符串中的字符数量:

SELECT LENGTH ( ‘LearnSQL.com’ )–result: 12

SELECT LOWER ( ‘LearnSQL.com’ )–result: learnsql.com

SELECT UPPER ( ‘LearnSQL.com’ )–result: LEARNSQL.COM

得到字符串的一部分:

SELECT SUBSTRING ( ‘LearnSQL.com’,9 )— result:.com

SELECT SUBSTRING ( ‘LearnSQL.com’,1,5 )— result:.Learn

替换字符串的一部分:

SELECT REPLACE ( ‘LearnSQL.com’,’SQL’,’Python’ )— result: LearnPython.com

 

数值函数

得到附法的余数:

SELECT MOD (13 , 2); — result : 1

把数字四舍五入

SELECT ROUND (1234.56789); — result : 1235

把数字四舍五入到小数点后三位:

SELECT ROUND (1234.56789,3); — result : 1235.568

 

向上取整

SELECT CEIL (13.1); — result : 14

SELECT CEIL (-13.9); — result : 13

 

向下取整

SELECT FLOOR (13.8); — result : 13

SELECT FLOOR (-13.2); — result : 14

 

按指定位数进行截取,不四舍五入

SELECT TRUNCATE (13.56,0); — result : 13

SELECT TRUNCATE (-13.56,1); — result : -13.5

得到数字的绝对值

SELECT ABS (-12); — result : 12

得到数字的平方根

SELECT SQRT (9); — result : 3

 

有用的NULL函数

得到rating 不为空的城市名字

SELECT name

FROM city

WHERE rating IS NOT NULL;

 

COALESCE(x,y,…)

把查询中的NULL替换为意义的内容

SELECT domain,

COALESCE (domain , ’domain missing’ )

FROM contacts;

COALESCE () 函数接受任意数量的参数,并返回第一个非NULL参数的值。

NULLIF(x,y)

为避免除0错误

SELECT last_month,this_month,this_month * 100.0 / NULLIF (last_month,0)

AS better_by_percent

FROM video_views;

如果x等于yNULLIF(x,y) 函数返回NULL,否则返回x的值。

日期时间

MYSQL5种主要的时间数据类型:

DATE

TIME

DATETIME

TIMESTAMP

YEAR

DATE YYYY-MM-DD 年月日
TIMEHH:MM:SS 时分秒

DATETIMEYYYY-MM-DD HH:MM:SS 支持的范围“1000-01-01 00:00:00“到”9999-12-31 23:59:59

TIMESTAMP 存储时期和时间,范围为“1970-01-01 00:00:01UTC到”2038-01-19 03:14:07UTCMYSQLTIMESTAMP 值从当前时区转换为UTC进行存储,并将其从UTC转换回当前时区进行检索

YEAEYYYY

时间间隔

指两个时间点之间持续的时间。

定义间隔:INTERVAL 1 DAY INTERVAL 关键字,值和时间部分关键字(YEAR, QUARTER,MONTH,WEEK,DAY,HOUR,MINUTE,SECOND,MICROSECOND)组成。

可使用+运算符组合不同的表过式:

INTERVAL 1 YEAR +  INTERVAL 3 MONTH

也可以使用MYSQL的标准表达式:

INTERVAL ‘1-3’ YEAR _MONTH – 1year and 3 months

INTERVAL ‘3-12’ HOUT_MINUTE – 3 hours 12 minutes

 

现在什么时间

l   Current_TIME or CURTIME 当前时间

l   Current_DATE or CURTDATE 当前日期

l  NOW() or CURRENT_TIMESTAMP 包含日期和时间的当前时间戳

 

创建时间/日期值

计算指定列中非空值的数量:

SELECT CAST( ‘2021-12-31’ AS date ),

         CAST( ’15:31’ AS time ),

         CAST( ‘2021-12-31 23:59:29’ AS datetime );

计算指定列中非空值的数量:

SELECT airline,flight_no,departure_time

FROM airport_scheedule

WHERE departure_time < ’12:00’;

 

提取日期的一部分

使用YEAAR,MONTH,DAY,HOUR等函数

SELECT YEAR ( CAST (‘2021-12-31’ AS date ));  –result: 2021

 

SELECT MONTH ( CAST (‘2021-12-31’ AS date ));  –result: 12

 

SELECT DAY ( CAST (‘2021-12-31’ AS date ));  –result: 31

 

日期运算

ADDDATE()可以为DATE添加或减去间隔:

ADDDATE(‘2021-10-31’, INTERVAL 2 MONTH)— result:’2021-12-31’

ADDDATE(‘2014-04-05’, INTERVAL -3 MONTH)— result:’2014-04-02’

 

TIMESTAMPADD()可以为TIMESTAMP DATETIME 添加或减去间隔:

TIMESTAMPADD(MONTH , 2, ’2014-06-10 07:55:00’); result:’2014-08-10 07:55:00 ’

TIMESTAMPADD(MONTH , -2, ’2014-06-10 07:55:00’); result:’2014-04-10 07:55:00 ’

 

ADDTIME()可以为DATETIIME添加或减去TIME

ADDTIME(‘2018-02-12 10:20:24’,’12:43:02’); result:’2018-02-12 23:03:26 ’

ADDTIME(‘2018-02-12 10:20:24’,’-12:43:02’); result:’2018-02-11 21:37:22 ’

 

DATEDIFF()函数可以找出两个日期有之间的差异

DATEDIFF(‘2015-01-01’,’2014-01-02’); result:364

 

TIMEDIFF()函数可以找出两个时间有之间的差异

TIMEDIFF(’09:30:00’,’07:55:00’); result:01:35:00

 

TIMESTAMPDIFF()函数找出两个日期时间之间的差异(以给定的时间单位)。

例:差异以周为单位:

SELECT TIMESTAMPDIFF(WEEK, ‘2018-02-26’, ‘2018-03-21’);  result:3


 

 

 

 

发表评论

邮箱地址不会被公开。