自学内容网 自学内容网

快速掌握MySql的常用基本操作

一、MySql的数据类型

整数类型字节最小值最大值
TINGINT1有符号-128,无符号0有符号127,无符号255
SMALLINT2有符号032768,无符号0有符号32767,无符号65525
INT、INTEGER4有符号-2147483648,无符号0有符号2147483647,无符号4294967295
BIGINT8有符号-9223372036854775808,无符号0有符号9223372036854775808,无符号18446744073709551615
浮点数类型字节最小值最大值
FLOAT4±1.175495351E-38±3.402823466E+38
DOUBLE8±2.2250738585072014E-308±1.7976931348623157+308

浮点类型推荐使用 decimal(保持为字符串格式)

字符串类型字节描述及存储需求
CHAR(M)M
VARCHAR(M)M为0~65535间的整数,值的长度+1字节
TINGBLOB允许长度0~255字节,值的长度+1字节
BLOB允许长度0~65535字节,值的长度+2字节
MEDIUMBLOB允许长度0~167772150字节,值的长度+3字节
LONGBLOB允许长度0~4294967295字节,值的长度+4字节
TINGTEXT允许长度0~255字节,值的长度+2字节
TEXT允许长度0~65535字节,值的长度+2字节
MEDIUMTEXT允许长度0~167772150字节,值的长度+3字节
LONGTEXT允许长度0~4294967295字节,值的长度+4字节
VARBINARY(M)允许长度为0~M个字节的可变厂字节字符串,值的长度+1字节
BINARY(M)M允许长度0~M个字节的定长字节字符串
日期和时间类型字节最小值最大值
DATE41000-01-019999-12-31
DATETIME81000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP4197001010800012038年的某个时刻
TIME3-838:59:59939:59:59
YEAR119012155

enum 和 set:只能去固定的值,但enum唯一,set可以去任意个值

二、MySql运算符

>   算术运算符   #1
+加法
-减法
*乘法
/, DIV除法,返回商
%,MOD除法,返回余数

>   逻辑运算符    #2
NOT或!逻辑非
AND或&&逻辑与
OR或||逻辑或

>  比较运算符   #3
=等于
<>或!=不等于
<=>NULL安全的等于
<小于
>大于
>=小于等于
<=大于等于
BETWEEN存在知道范围
IN存在指定集合
IS NULL  为NULL
IS NOT NULL 不为NULL
LIKE通配符匹配
REGEXP或RLIKE   正则表达式

三、MySql常用函数

>时间和日期函数    #1
NOW();    //返回当前日期和时间
UNIX_TIMESTAMP(date);  //返回日期date的UNIX时间戳
CURRENT_TIMESTAMPCURRENT_TIMESTAMP();  //当前时间
CURDATE();
CURTIME();
DATE_FORMAT(date, "%y-%m-%d");  //格式化时间等

>聚合函数#2
count()sum()avg()max()min()

四、MySql完整性约束

primary key    主键
auto_increment自增键
unique唯一键
not null非空键
default默认值
foreign key外键

五、MySql核心操作(库、表、CRUD、连接)

SQL作为结构化查询语言,是关系型数据库的同样语言,分为三个类别:

  • DDL(Data Definition Languages)语句:
    数据定义语言,这些语句定义了不同的数据库、表、列、索引等数据库对象的定义。常用的语句关
    键字主要包括 create、drop、alter等。
  • DML(Data Manipulation Language)语句:
    数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字
    主要包括 insert、delete、update 和select 等。
  • DCL(Data Control Language)语句:
    数据控制语句,用于控制不同的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户
    的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

库操作

show databases;   //查询数据库
create database ChatDB;  //创建数据库
drop database ChatDB;   //删除数据库
use ChatDB;   //选择数据库

表操作

show tables;   //查看表
create table user(
id int unsigned primary key not null auto_increment,
name varchar(50) not null,
age tinyint not null,
sex enum('M','W') not null
)engine=INNODB default charset=utf8;   
//创建表

desc user;   //查看表结构
show create table user\G;  //查看建表sql,\G表示分别罗列出每个属性的详细信息
drop table user;   //删除表

CRUD

>     insert增加       #1
insert into user(id, name, age, sex) values(null, 'zhang san', 22,
'M');
insert into user(id, name, age, sex) values(null, 'li si', 21, 'W'),
(null, 'gao yang', 20, 'M');

>    update修改#2
update user set age=23 where name='zhang san';
update user set age=age+1 where id=3;

>    delete删除#3
delete from user where age=23;
delete from user where age between 20 and 22;
delete from user;

>    select查询#4
select * from user;
select id,name,age,sex from user;
select * from user where sex='M' and age>=20 and age<=25;

>     distinct去重#5
select distince name from user;

>  is[not]null空值  #6
select * from user where name is null;

>     in子查询#7
select * from user where id in(10, 20, 30, 40, 50)
select * from user where id not in(10, 20, 30, 40, 50)
select * from user where id in(select stu_id from grade where average>=60.0)

>     limit分页#8
select * from user limit N(offset) ,M(lines);

没有索引的情况下,limit可以提高效率
# 1 select * from user limit (pag - 1) * pagnum, pag;  效率低
select * from user where id > 上一页的最后一条数据 limit 20; 效率高
# 2 select * from user  limit 100000, 20;
# 3 select * from user where id > 100000 limit 0, 20;

>      order by排序#9
select id,name,age,sex from user where sex='M' and age>=20 and age<=25
order by age asc;

>   group by分组#10
select count(id),age from user group by age having age>20;

通过存储过程生成大量测试数据

delimiter $

Create Procedure add_t_user (IN n INT)
BEGIN
DECLARE i INT;
SET i=0;
WHILE i<n DO
INSERT INTO t_user VALUES(NULL,CONCAT(i+1,'@fixbug.com'),i+1);
SET i=i+1;
END WHILE;
END$

delimiter ;
call add_t_user(2000000);

连接查询

先截个图,如下:
在这里插入图片描述

内连接(即最简单的等值连接):
select * from ta, tb where ta.a = tb.b;

左外连接(左连接):把left这边的表所有的数据显示出来,在右表中不存在相应数据,则显示NULL
select a.* from User a left outer join Orderlist b on a.uid=b.uidd where
a.orderid is null;

右外连接(右连接):把right这边的表所有的数据显示出来,在左表中不存在相应数据,则显示NULL
select a.* from User a right outer join Orderlist b on a.uid=b.uid where
b.orderid is null

参考图源博客:https://blog.csdn.net/qq_62687015/article/details/128104836


原文地址:https://blog.csdn.net/icc_hhy/article/details/136102155

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!