-
SQL语句分类
-
DDL:数据定义语言,定义不同的数据段、数据库、表、列、索引等数据库对象。主要关键字包括:create、drop、alter等
-
DML:数据操纵语言,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。主要关键字包括:insert、delete、update、select等
-
DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,定义了数据库、表、字段、用户的访问权限和安全级别。主要关键字包括grant、revoke等
-
MySQL系统数据库:
- information_schema:主要存储系统中的数据库对象信息,如用户表信息、列信息、权限信息、字符集信息、分区信息等
- cluster:存储了系统的集群信息
- mysql:存储了系统的用户权限信息
- test:测试数据库,任何人都可以调用
-
方法常用语句记录:
DDL: 1. 选择数据库:use dbname; 2. 删除数据库:drop database dbname; 3. 创建表:create table tablename(column_name_1 column_type_1 constraints...); 如:create table student(name varchar。。。。。。。。)
Constraints:表示这个列的约束条件
4. 删除表:drop table tablename;
2. 查看表详情:desc tablename;
3. 修改表:alter table tablename modify [column] column_definition [first|after column_name];如:alter table student modify sex char(2);
4. 增加表字段:alter table tablename add [column] column_definition [first|after column_name];
5. 删除表字段:alter table tablename drop [column] col_name;
6. 字段改名:alter table tablename change [column] old_col_name new_col_name column_definition [first|after column_name];
注意:change和modify都可以修改表的定义,但是change后面需要写2次列名,不过change可以修改列名称,modify却不能。
7. 修改表名:alter table tablename rename [to] new_tablename;DML: 3. 插入记录:insert into tablename(field1,field2...) values(val1,val2...); 2. 批量插入:insert into tablename(field1,field2...) values(val1,val2...), (val1,val2...)...; 3. 更新记录:update tablename set field1=val1,field2=val2... [where condition] 4. 删除记录:delete from tablename [where condition] 5. 查询记录:select * from tablename 去重查询:select distinct col_name from tablename; 条件查询:select * from tablename where condition 排序查询:select * from tablename order by col_name asc|desc 限制查询:select * from tablename limit 0, 10; DCL: 1. 修改用户对于某一数据库的操作权限 如:创建一个test1用户,具有数据库studb的select、insert权限 grant select,insert on studb.* to ‘test1’@’localhost’ identified by ‘123456’; 收回insert权限: remove insert on studb.* to ‘test1’@’localhost’;
-
-
聚合函数
求和:sum(col_name),计数:count(col_name|*),最大值:max(col_name),最小值:min(col_name),分类聚合:group by,对分类后的结果再进行条件过滤:having,是否对分类聚合后的数据再汇总:with rollup
注意:
1. having和where的区别在于,having是对聚合后的数据进行过滤,where是对聚合前进行数据过滤,一般使用where,聚合的效率会大大提高。
2. having和with rollup的示例用法:
。。。。。。。。-
连接查询
-
内连接:仅选出两张表中相互匹配的记录
-
外连接:也会选出其他不匹配的记录
-
左连接:包含左边表中的记录甚至是右边表中没有和它匹配的记录
-
右连接:包含右边表中的记录甚至是左边表中没有和它匹配的记录
-
-
联合查询(将结果合并到一起显示)
- union:将union all合并后的结果进行了一次distinct
- union all:把结果集直接合并在一起
-
数据类型
-
数值类型:截图。。。。。。。。。。。。
tinyint、smallint、mediumint、int、bingint、float、double、dec(m,d),decimal(m,d),bit
注意:- 数值类型设置宽度后,插入大于限制宽度的值,并不会截断显示,会显示正确的数据;
- MySQL中小数分为浮点数(float单精度和double双精度)和定点数(只有decimal),其中decimal在内部是以字符串形式存储,适合用于高精度数据(货币或经纬度),浮点数后面跟(m,d)是非标准用法;
- Bit用于存放位字段值,bit(M)可以用来存放多位二进制数,M范围为1~64,查询时直接使用select命令不会看到结果,可以以bin()(显示为二进制)或者hex()(显示为十六进制)函数进行查看;
-
日期类型:截图。。。。。。。。。。。。。
-
注意:
1. MySQL规定timestamp类型字段只能有一列的默认值为current_timestamp
2. Timestamp类型和时区相关,超出下限会显示成0
3. Timestamp支持范围较小,从1970年到2038年的某个时间,datetime支持范围大,是从1001年到9999年
4. 。。。。。。。。。。日期格式YYYY。。。。。。
6. 字符串类型:截图。。。。。。。。。。。。。。。。。。
注意:(char和varchar类型的区别)
1. 都用来存储MySQL中较短的字符串,但char列的长度为创建表时申明的长度,而varchar为可变长字符串;
2. 检索时char删除了尾部空格,但varchar保留了尾部空格;
3. Enum枚举类型的值范围需要在创建表时通过枚举的方式显示指定;
-
运算符
- 算术运算符:截图。。。。。。。。。。
- 比较运算符:截图。。。。。。。。。。
- 逻辑运算符:截图。。。。。。。。。。
- 位运算符:截图。。。。。。。。。。
注意:- <=>运算符为null安全的等于(null-safe);
- XOR表示逻辑异或,任意一个操作数为null时,返回值为null,对于非null的操作数,如果两个的逻辑真假值相异,则返回1,否则返回0;
- 位运算符使用示例:。。。。。。。。。。。。。。
-
常用函数
- 字符串函数:截图。。。。。。。。。。
- 数值函数:截图。。。。。。。。。
- 日期和时间函数:截图。。。。。。。。。
- 流程函数:截图。。。。。。。。。
- 其他函数:。。。。。。。。。。。。。。