MySql 基本操作
- 一、MySql的数据类型
- 二、MySql运算符
- 三、MySql常用函数
- 四、MySql完整性约束
- 五、MySql核心操作(库、表、CRUD、连接)
- 库操作
- 表操作
- CRUD
- ==通过存储过程生成大量测试数据==
- 连接查询
 
 
一、MySql的数据类型
| 整数类型 | 字节 | 最小值 | 最大值 | 
|---|---|---|---|
| TINGINT | 1 | 有符号-128,无符号0 | 有符号127,无符号255 | 
| SMALLINT | 2 | 有符号032768,无符号0 | 有符号32767,无符号65525 | 
| INT、INTEGER | 4 | 有符号-2147483648,无符号0 | 有符号2147483647,无符号4294967295 | 
| BIGINT | 8 | 有符号-9223372036854775808,无符号0 | 有符号9223372036854775808,无符号18446744073709551615 | 
| 浮点数类型 | 字节 | 最小值 | 最大值 | 
|---|---|---|---|
| FLOAT | 4 | ±1.175495351E-38 | ±3.402823466E+38 | 
| DOUBLE | 8 | ±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个字节的定长字节字符串 | 
| 日期和时间类型 | 字节 | 最小值 | 最大值 | 
|---|---|---|---|
| DATE | 4 | 1000-01-01 | 9999-12-31 | 
| DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | 
| TIMESTAMP | 4 | 19700101080001 | 2038年的某个时刻 | 
| TIME | 3 | -838:59:59 | 939:59:59 | 
| YEAR | 1 | 1901 | 2155 | 
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_TIMESTAMP、CURRENT_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