MySQL学习笔记(一)——MySQL语法

一、SQL语句分类

1.DDL(Data Definition Language):数据库定义语言,用来定义数据库对象:库、表、列等。对库表列等数据库对象进行创建、删除、修改等操作。

2.DML(Data Manipulation Language):数据库操作语言, 用来定义数据库记录:增、删、改表中的记录。

3.DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。

4.DQL(Data Query Language):数据查询语言,用来查询记录。(重点)


二、MySQL数据类型

TINYINT:1字节,很小的整。

SMALLINT:2字节,小的整数。

MEDIUMINT:3字节,中等大小的整数。

INT或INTGER:4字节,普通大小的整数。

BIGINT:8个字节,大整数。

FLOAT:4个字节,单精度浮点数。

DOUBLE:8个字节,双精度浮点数,如DOUBLE(6,2):表示该浮点值最多有6位数,其中必须有2位小数。

DECIMAL(M,D):小数值,参数表示该数值最多有M位数,其中必须有D位小数。

CHAR(M):字符型,1<=M<=255,固定长度字符串类型。数据库的长度不足置顶的长度,它会自动补充到指定长度。假如在定义char(255)的列中存入一个字符a,虽然a只占一个字符,但是它会自动给你加254个空格凑成255的长度。

VARCHAR:可变长度字符串类型:VARCHAR(65535)。存入数据多长就是多长,实际会抽出几个字节来记录数据的长度。

TINYTEXT:非常小的字符串类型。

TEXT:小的字符串类型。

MEDIUMINT:中等大小的字符串类型。

LONGINT:大的字符串类型。

ENUM:枚举类型,ENUM类型的字段(列)在取值时只能在指定的枚举中取值,且每次只能取一个值。

BIT(M):位字段类型。

BINARY(M):固定长度二进制字符串,M个字节。

VARBINARY(M):可变长度二进制字符串,M+1个字节。

BLOB(M):一个二进制大对象,用来存储可变数量的数据。

YEAR:年份值,格式为:YYYY。

DATE:日期类型,格式为:YYYY-MM-DD。

TIME:时间类型,格式为:HH:MM:SS。

TIMESTAMP:时间戳类型,格式为:YYYY-MM-DD HH:MM:SS。

DATETIME:日期和时间值,格式为:YYYY-MM-DD HH:MM:SS。


三、SQL语句


进入mysql: mysql -uroot -p ,然后输入密码。  MySQL语句不区分大小写,但在写关键字的时候建议输入大写字母。每一条语句后面以分号结尾。


3.1 DDL(数据定义语言)语法

用来对数据库和表结构进行操作。

1.针对数据库的操作:

查看MySQL中所有的数据库: SHOW DATABASES;

创建数据库并制定其编码:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET UTF8];

使用数据库:USE 数据库名;

删除数据库:DROP DATABASE 数据库名;

修改数据库的编码:ALTER DATABASE 数据库名 CHARACTER SET UTF-8;

2.针对表的操作:

CREATE TABLE (IF NOT EXISTS) 表名(

列名 列类型,

….,

列名 列类型

);

查看当前数据库中所有的表:SHOW TABLES;

查看表结构:DESC 表名;

查看创建表的信息: SHOW CREATE TABLE 表名;

删除表:DROP 表名;

修改表:有五个操作,但都是以ALTER TABLE 表名开头

* 修改表——添加列:ALTER TABLE 表名 ADD 列名 列类型,…,列名 列类型;

* 修改表——修改列类型:ALTER TABLE 表名 MODIFY 列名 列的新类型;

* 修改表——修改列名称和列类型:ALTER TABLE 表名 CHANGE 原列名 新列名 列的新类型;

* 修改表——修改表名:ALTER TABLE 表名 RENAME TO 新表名;

* 修改表——删除表的列:ALTER TABLE 表名 DROP 列名;


3.2 DML(数据操作语言)语法

用来对表记录操作(增、删、改)


3.2.1 插入数据(有两种方法)

第一种方法:INSERT INTO 表名(列名1,列名2,列名3)VALUE (列值1,列值2,列值3);

第二种方法:INSERT INTO 表名 SET 列名1=列值,列名2=列值,列名3=列值;


说明:1.在数据库中所有的字符串类型必须使用单引号。2.(列名1,列名2,列名3)可省略,省略后必须按照表中的列的顺序插入所有列值。但不建议省略,会降低程序的可读性。3.在命令行中插入记录不要使用中文,否则会出现乱码。


3.2.2 修改记录 (字段表示列,记录表示行)

修改某列的全部值:UPDATE 表名 SET 列名1=列值1(,列名2=列值2);

修改某行(或多行记录的)指定列位置的值:UPDATE 表名 SET 列名1=列值1 WHERE 列名2=列值2 OR 列名3=列值3;

运算符:=、<=>、!=、<>、<、>、>=、<=、between...and、in(…)、is null、not 、or、and,其中in(…)的用法表示集合。列如:update 表名 列名1=列值2 or 列名2=列值2; 用in(…)可写成 update 表名 列名1 in(列值1,列值2);


3.2.3 删除数据(删除整行数据)

DELETE FROM 表名(WHERE 条件); 不加WHERE 条件会删除整行记录。


3.3 DCL(数据库控制语言)语法

用来定义访问权限,理解即可。 但记住:一个项目创建一个用户,一个项目对应的数据库只有一个。这个用户只有这个数据库的权限,其他数据库该用户操作不了。

3.3.1创建用户

用户只能在指定ip地址上登录mysql:create user 用户名@IP地址 identified by ‘密码’;

用户可以在任意ip地址上登录:create user 用户名@‘%’ identified by ‘密码’

3.3.2给用户授权

语法:grant 权限1,…,权限n on 数据库.* to 用户名@IP地址;其中权限1、2、n可以直接用all关键字代替。权限例如:create,alter,drop,insert,update,delete,select。

3.3.3撤销授权

语法:revoke 权限1,…,权限n on 数据库.* from 用户名@ ip地址;撤销指定用户在指定数据库上的指定权限。撤销例如:revoke create,delete on mydb1.* form user@localhost;表示的意思是撤消user用户在数据库mydb1上的create、alter权限。

3.3.4查看权限

查看指定用户的权限:show grants for 用户名@ip地址;

3.3.5删除用户

drop user 用户名@ip地址;

3.4 DQL(数据库查询语言)语法

用来查询记录(重点),据说很多项目用数据库百分之八十都是查询语句,所以就该知道这个语句语法很重要了吧。

3.4.1基本查询(SELECT...FROM 表名

查询所有字段:select * from 表名;其中 * 是表示所有的列,不是所有的行的意思。

查询指定字段:select 列1,列2,列n from 表名;

查询指定条件记录:select * from 表名 where 列名1=列值1;

带IN的关键字查询: select * from 表名 where 列名 in(关键字1,…,关键字n);

带BETWEEN AND 的范围查询:select * from 表名 where 列名 between XX and XX;  

带LIKE的字符匹配查询:select 列1,列2,列n from 表名 where 列名 like‘a%’;

查询制定列名为空值的记录:select * from 表名 where 列名 is null;

带AND/OR的多条件查询:select * from 表名 where 列名1=列值2 and/or 列名2=列值2 ;带and语句表示查询的记录必须同时满足列名1=列值1和列名2=列值2这两个条件;带or的语句表示查询的记录只需满足列名1=列值1或列名2=列值2 或同时满足两个条件。

查询结果记录不重复:在查询的列之前加上distinct:select distinct * from 表名;

3.4.2 对查询的结果进行排序

关键字:group by

    1.单列排序:select 列名1 from 表名 order by 列名1;

    2.多列排序:select 列名1,列名2,列名n from 表名 order by 列名1,列名2;

    3.指定排序方向:select 列名 from 表名 order by 列名 asc/desc;  带asc语句表示按照前面指定的列以升序排列;带desc语句表示按照前面指定的列意降序排列。如果order by 指定排序列名后面不加 asc和desc 则默认按照升序排列。

3.4.3 聚合函数

    1.count:select count(列名) from 表名;,纪录有效行数。

    2.max:select max(列名) from 表名;,列中最大值。

    3.min:select min(列名) from 表名;,列中最小值。

    4.sum:select sum(列名) from 表名;,求列的总值,null 和字符串默认为0。

    5.avg:select avg(列名) from 表名;,一列的平均值。

3.4.5 分组排序

关键字:group bygroup by 关键字通常和聚合函数一起用。

select 列名1,聚合函数(列名)as 自定义列名 from 表 group by 列名1 having 条件。

说明:having关键字和where关键字都是用来过滤数据,having是对数据分组之后进行过滤,而where是对数据分组之前对数据进行过滤。另外,被where过滤掉的记录不再包括在分组之中。

3.4.6 用LIMIT限制查询结果的数量

limit用来限定查询结果的起始行,以及总函数 :limit [位置偏移量,] 行数

例1:select * from 表名 limit 4;

表示返回表中前4行记录。

例2:select * from 表名 limit 4,3;

表示返回表中从第5行开始的记录之后的3行记录。注意:在MySQL中的位置偏移量是从0开始的,不是从1开始。

四、总结

学过的关键字:select,from,where,group by,having,order by。当一条查询记录中包含所有这些关键字时,它们的优先级是select>from>where>group by>having>order by

    

猜你喜欢

转载自blog.csdn.net/weixin_41072833/article/details/80007322