mysql 常用语法
1. SQL 语句分类
- DDL (Data DefinitonLanguage) 数据定义语言,用来数据库对象:库、表、列等。功能:创建、删除、修改库和表结构。
- DML (Data Manipulation Language) 数据操作语言,用来蒂尼数据库记录,增、删、改表记录。
- DCL (Data Control Language) 数据控制语言,用来定义访问权限和安全级别。
- DQL (Data Query Language) 数据查询语言,用来查询记录。
2. SQL 数据中的属性类型
- tintiny:1 字节,小整数值。
- smallint:2 字节,大整数值。
- mediumint:3 字节,大整数值。
- int或 integer:4 字节,整型,大整数值。
- float单精度浮点数值。
- double(5.2) 双精度浮点型数值,参数表示该浮点型数值最多有5位,其中必须有2位小数。
- decimal(M,D) 小数值,参数表示该数值最多有M位,其中必须有D位小数。
- char: 字符型,固定长度字符串类型: char(255)。 你存入一个 a 字符, 虽然 a 只占一个字符, 但是它会自动给你加 254 个空格凑成 255 个长度。即数据的长度不足指定长度,它会补足到指定长度。
- varchar 可变长度字符串类型:-varchar(65535), 你存入的数据多长它就是多长。它会抽出几个字节来记录数据的长度。
- text (CLOB):mysql 独有的数据类型,字符串类型。
- blob:字节类型
- year: 年份值,格式为:YYYY
- date: 日期类型,格式为 yyy-mm-dd.
- time 时间类型,格式为: hh:mm:ss。
- timestamp: 时间戳类型,格式为上面二者的综合。
- datetime: 混合日期和时间值,格式为:YYYYMMDD HHMMSS
3. SQL 语句详解
首先需要在命令行中输入 mysql -u root -p 来进入 mysql 。注意:1、mysql 语法不区分大小写,但是建议在写关键字时用大写。2. 每一条语句后面以分号结尾。
3.1 DDL (数据定义语言)语法
该语言用来对数据库和表结构进行操作。
对数据的操作:
查看所有的数据库 show databases:
使用书库 use 数据名,
创建数据库并制定编码: create database [if not exists] 数据库名 [defaultcharacter set utf8];
删除数据库:drop database 数据库名;
修改数据库的编码:alter database 数据库名 character set utf-8
对表结构的操作
创建表:
create table (if not exists) 表名 ( 列名,列类型, ..., 列名,列类型, )
- 查看当前数据库中所有表:show tables;
- 查看表结构:desc 表名;
- 删除表:drop 表名;
- 修改表:修改表有5个操作,但前缀都是一样的: alter table 表名...
- 修改表之添加列:alter table 表名 add (列名 列类型, ..., 列名 列类型);
- 修改表之列名称:alter table 表名 modify 列名 列的新类型;
- 修改表之列名称列类型一起修改:alter table 表名 change 原列名 新列名 列名类型;
- 修改表之删除列:alter table 表名 drop 列名;
- 修改表之修改表名:alter table 表名 rename to 新表名
3.2 DML (数据操作语法)语法
该语言用来记录操作(增,删,改)。
3.2.1 插入数据(一次插入就是一行)
insert into 表名 (列名1,列名2,列名3) value (列值1,列值2,列值3)
说明:
1. 在数据库中所有的字符串类型,必须使用单引号。
2. (列名1,列名2,列名3)可省略,表示按照表中的顺序插入。但不建议采取这种写法,因为降低了程序的可读性。
3. 在命令行插入记录不要写中文,否则会出现乱码(解决控制台的乱码问题后便可插入中文)
3.2.2 修改记录(不会修改一行)
修改某列的全部值: update 表名 set 列名1 = 列值1
修改(某行或者多行的记录的)列的指定值:update 表名 set 列名1=列值1 where 列名2=列值2 or 列名3=列值3;
运算符:=,!=,<>,<,>,>=, <=, between...and, in(...), is null, not, or, and,
其中 in(...)的用法表示集合。 例如: update 表名 set 列名1=列值1 where 列名2=列值2 or 列名2=列值2 用 in(...) 写成 update 表名 set 列名1=列值1 where 列名2 in (列值2,列值3)
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.4DQL(数据查询语言)语法
重点,该语言用来查询记录,不会修改数据库和表结构。
3.4.1基本查询(后缀都是统一为from 表名)
-
1.字段(列)控制1.查询所有列:select * from 表名;
其中*表示查询所有列,而不是所有行的意思。 - 2.查询指定列:select 列1,列2,列n from 表名;
-
3.完全重复的记录只显示一次:在查询的列之前添加distinct:select distinct $ from 表名;
缺省值为all。 - 4.列运算a.数量类型的列可以做加、减、乘、除:SELECT sal*5 from 表名;
说明:
1.遇到null加任何值都等于null的情况,需要用到ifnull()函数。
2.将字符串做加减乘除运算,会把字符串当作0。b.字符串累类型可以做连续运算(需要用到concat()函数):select concat(列名1,列名2) from 表名;其中列名的类型要为字符串。c. 给列名起别名:select 列名1 (as) 别名1,列名2 (as) 别名2 from 表名;
2.条件控制
1.条件查询。在后面添加where指定条件:select * from 表名 where 列名=指定值;
2.模糊查询:当你想查询所有姓张的记录。用到关键字like。eg:select * from 表名 where 列名 like ‘张_’;
(代表匹配任意一个字符,%代表匹配0~n个任意字符)。
3.4.2排序(所谓升序和降序都是从上往下排列)
1.升序:select * form 表名 order by 列名 (ASC );
()里面的内容为缺省值;
2.降序:select * from 表名 order by 列名 DESC;
3.使用多列作为排序条件: 当第一列排序条件相同时,根据第二列排序条件排序(当第二列依旧相同时可视情况根据第三例条件排序)。eg:select * from 表名 order by 列名1 ASC, 列名2 DESC;
意思是当列名1的值相同时按照列名2的值降序排。
3.4.3聚合函数
1.count:select count(列名) from 表名;
,纪录有效行数。
2.max:select count(列名) from 表名;
,列中最大值。
3.min:select sum(列名) from 表名;
,列中最小值。
4.sum:select sum(列名) from 表名;
,求列的总值,null 和字符串默认为0。
5.avg:select avg(列名) from 表名;
,一列的平均值。
3.4.4分组查询
分组查询的信息都是组的信息,不能查到个人的信息,其中查询组的信息是通过聚合函数得到的。
语法:select 分组列名,聚合函数1,聚合函数2 from 表名 group by 该分组列名;
其中分组列名需要的条件是该列名中有重复的信息。
查询的结果只能为:作为分组条件的列和聚合函数;查处的信息都是组的信息。
分组查询前,还可以通过关键字where先把满足条件的人分出来,再分组。语法为:select 分组列,聚合函数 from 表名 where 条件 group by 分组列;
分组查询后,也可以通过关键字having把组信息中满足条件的组再细分出来。语法为:select 分组列,聚合函数 from 表名 where 条件 group by 分组列 having 聚合函数或列名(条件);
3.4.5LIMIT子句(mysql中独有的语法)
LIMIT用来限定查询结果的起始行,以及总行数。
例如:select * from 表名 limit 4,3;
表示起始行为第5行,一共查询3行记录。
4.总结
学过的关键字:select,from,where,group by,having ,order by。
当一条查询语句中都包含所有这些关键字时它们的优先级是select>from>where>group by>having>order by
这个博客就像一座宝藏,我是来掘金滴!
炎热夏天,闲来无事,拜读博客,消暑解闷!
从百度点进来的,学习学习,呵呵!