首先要了解是数据表中的数值类型:
| 类型(type) | 大小(byte) | 范围(signed) | 范围(unsigned) |
|---|---|---|---|
| TINYINT | 1 byte | (-128,127 ) | (0,255) |
| SMALLINT | 2 byte | (-32768,32767) | (0,65 535) |
| MEDUMINT | 3 bytes | (-8388608,8388607) | (0,16 777 215) |
| INT | 4 bytes | (-214748483648,214748647) | (0,4 294 967 295) |
| BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18446 744 073 709 551 615) |
| FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | (0,1.175 494 351 E-38,3.402 823 466 E+38) |
| DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
其次是时间和日期类型:
| 类型(type) | 大小(byte) | 范围 | 格式 |
|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD |
| TINE | 3 | '-838:59:59/‘838:59:59’ | HH:MM:SS |
| YEAR | 1 | 1901 / 2155 | YYYY |
| DATETIME | 8 | 1000-01-01 00: 00/9999-12-31 23:59:59 | YYYY-MM-DD HH-MM-SS |
最后是字符串类型
| 类型(type) | 大小(byte) |
|---|---|
| CHAR | 0 - 255bytes; |
| VARCHAR | 0 - 65535bytes |
| TINYBLOB | 0 - 255bytes |
| TINYTEXT | 0 - 255bytes |
| BLOB | 0 - 65535bytes |
| TEXT | 0 - 65535bytes |
| MEDIUMBLOB | 0 - 16777215 bytes |
| LONGBLOB | 0 - 4294967295 bytes |
| LONGTEXT | 0 - 44294967295 bytes |
接着是一些基本的SQL语句学习
# 创建一个数据库
CREATE DATABASE 自定义库名;
CREATE DATABASE 库名 IF NOT EXISTS 库名;
# 使用指定库名的数据库
use 库名;
# 展示指定库内所有的表
show tables;
# 查看其他库的所有表
show tables from 其他库库名;
# 创建表(在已经指定库的情况下)
create tables 表名(
、、、
、、、
);
# 查看表结构
desc 表名;
# 查看某张表的定义语句
show create table 表名;
# 修改表名
rename table 原表名 to 新表明;
# 插入数据(不指定字段)
insert into class values(数据1、数据2、、、);
# 插入数据(指定字段)
insert into class(表中字段1、表中字段2、、、) values(数据1、数据2、、、);
# 修改数据库的字符集或者排序规则
alter database 数据库名 character set 字符集 collate 排序规则;
# 添加字段
ALTER TABLE 表名 add 字段名 数据类型;
# 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 数据类型
# 修改字段名和数据类型
ALTER TABLE 表名 change 原字段名 新字段名 数据类型
# 删除字段
ALTER TABLE 表名 DROP 字段名
# 添加默认值
create table 表名(列名 数据类型 default 默认值);
Alter table 表名 moddify 字段名 数据类型 default 默认值;
# 删除默认值
Alter table modify 字段名 数据类型
在创建表的过程中当然会有一定的约束,所以说会有一些约束的方法
📕 `创建`主键的第一种方式
create table test_table(user_id INT(10) PRIMARY KEY auto_increment);
➕ `创建`主键的第二种方式
create TABLE test_table(user_id INT(10),PRIMARY KEY(user_id));
✖ `创建`主键的第三种方式
CREATE TABLE test_table(user_id INT(10),
user_name VARCHAR(30),
CONSTRAINT PL_ID_NAME PRIMARY KEY(user_id,user_name));
第三种主键是user_id和user_name的联合主键
➖ 通过ALTER语句`添加`主键约束
ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user ADD PRIMARY KEY(user_id);
ALTER TABLE t_user ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);
有创建当然会有删除,那么如何删除呢
➗ `删除`主键约束
ALTER TABLE t_user DROP PRIMARY KEY;
当然光有主键是不够的,还有唯一约束!!
唯一约束有以下特点:
Ⅰ 唯一约束指定table的列或列组合不能重复,保证数据的唯一性
Ⅱ 唯一约束不允许出现重复的值,但可以为NULL
Ⅲ 同一个表可以有多个约束,多个列组合的约束
Ⅳ 如果不给唯一约束名称,就默认和列名相同
Ⅴ MYSQL会给唯一约束的列上默认创建一个唯一索引
➕创建表时添加唯一约束
① CREATE TABLS people(id int(10) PRIMARYKEY,
name VARCHAR(25),
CONSTRAINT UNI_字段名 unique(name);
);
② create table 表名(列名 数据类型 unique);
③ create table 表名(列名1 数据类型,列名2 数据类型,unique(字段名));
➕ 给一个指定表添加唯一约束
Alter table 表名 modify 字段名 数据类型 unique;
Alter table 表名 add unique(字段名);
Alter table 表名 add constaint PK_键名 unique (字段名);
➖ 删除约束
ALTER TABLE people drop index name;
有的数据在录入到数据库的时候不能为空,那么这个时候就需要一个非空约束
建表时添加非空约束
CREATE TABLE test01(
id int primary key, //创建一个主键,默认为非空
age int `not null` //创建一个非空类型
);
通过ALTER语句添加非空约束
ALTER TABLE 表名 MODIFY 字段 类型 NOT NULL://t_user表user_id名
删除非空约束
ALTER TABLE 表名 MODIFY 字段 类型;
`如果在一个表中已有数据的字段上添加一个非空约束,而已经有的数据中存在空值,那么添加非空约束失败`
经常在数据库操作中会进行两个数据表之间的相互依赖。这个时候就会出现外键约束
假设创建了两个表,一个班级表一个学生表。学生表的数据中会有一个班级编号,而学生表的班级编号必须在班级表的班级编号中存在,那么这时候就会出现需要外键约束的情况。
如果向student表中插入数据那么班级编号必须是在班级表中也存在
# 创建外键约束(在创建学生表时需要添加的语句)
CONSTRAINT c_no_class(这个就是外键别名) FOREIGN KEY (学生表中班级编号的数据名) REFETENCES class(班级表中的班级编号名称)
#另一种添加外键约束的方法
Alter table 表名 add contraint FK_键名 foreign key(字段名) referrences 主表名(被参照的字段);
#删除外键
Alter table 表名 drop foreign key 外键名;
有创建当然会有删除的
# 删除数据
DELETE FROM 表名 WHERE 过滤条件 //不加WHERE表内数据全部删除
# 删除数据
TRUNCATE TABLE 表名
delete 删除 与 teuncate 删除区别
1、delere 可以加where 条件,truncate不能加
2、truncate删除,效率略高
3、假设删除的表中有自增长列如果用delete删除后,在插入数据,自增长列的值从断点开始,而truncate删除后再插入数据,自增长列的值从1开始
4、truncate 删除没有返回值 DELETE 删除有返回值
5、truncate删除后不能回滚,delete删除可以回滚
那么接下来就是基本的查询语句了
selecte查询
select * 或者 字段名列表 from 表名
[where 过滤条件] 条件
[group by 字段] 字段
分组进行查询
[having 条件] 条件
[order by 字段 order_list[desc|asc]] 按照规则进行排序
[limit 指定输出的范围] 输出由第几行到第几行
# [] 里面是可存在可不存在的内容
# DISTINTCT将查询结果中重复数据删除
进行条件运算时可以用逻辑判断来同时多条条件判断AND、OR、NOT。 范围运算:BETWEEN 范围下限值 and 范围上限值;
# IN关键字使用户可以选择与列表中的任意值匹配的行
SELECT 学号,班级编号,姓名,性别,籍贯
FROM 学生信息表
WHERE 字段名 IN(元素1,元素2、、、、);
# NOT IN 与IN用法相同,值不在指定元素里面显示输出
模糊查询
通配符% : 表示一个或多个字符
通配符_ : 表示一个字符
# 模糊查询示例:
select * from 表名 where 字段名 like 字符串(包含通配符)
众所周知在EXCEL中有些能够操作数据的简便方法。在MYSQL中同样也有,被叫做聚合函数
🖊、SUM([DISTINCT] <列名> ));计算列值总和
SUM在求总和时将空值NULL记为0
🖊、AVG( [DISTINCT] <列名> );计算列值平均值
AVG求平均值在计算时将NULL值不作为除数的一部分
🖊、MAX( [DISTINCT] <列名> );求列值最大值
🖊、MIN( [DISTINCT] <列名> );求列值最小值
🖊、COUNT();统计表中的元组个数
COUNT([DISTINCT] <列名> );统计本列列值个数
除了COUNT()以外其他函数在计算过程中军忽略NULL值。就是说如果
分页查询
🖊、SELECT 列,、、、 FROM 表名 LIMIT [start] nums;
例子 : start * from 表名 limit 0,5;
start 是从第几行开始。nums是总共需要查几行
数据分组
GROUP BY 语句用于结合合计函数,根据一个或多个列队结果集进行分组
select 统计分类列名,avg(进行统计的列名) from 表 group by 统计分类的列名;
可以对多个字段结合进行分组
HAVING 过滤条件(过滤条件中包含聚合函数统计的结果只能用gaving关键字引出)
HAVING 通常与 GROUP BY子句一起使用、相当于一个用于组的where子句,制定组的搜索条件(HAVING可以包含聚合函数,但where不可以)
示例:
SELECT 列名,SUM(成绩) FROM 表
GROUP BY 列名 (根据列名进行分组)
HAVING SUM(成绩)<600;
HAVING 语句中可以使用别名 WHERE语句不能用别名
ORDER BY 语句用于对指定的结果集进行排序
ORDER BY 语句默认升序
降序排序可以使用DESC关键字
查询成绩表并对成绩进行排序示例:
select * from 成绩表 order by 成绩 desc(可以添加第二个字段);
select * from 成绩表 order by 列名1 desc,列名2 asc;
desc是降序asc是升序
总结
# 基本查询语句
select *|字段名|字段的算术运算|聚合函数
from 表名
where 过滤条件
group by 字段名
having 包含聚合函数的条件
order by 排序的字段 asc|DESC
limit 开始数据编号,数据条数
# 逻辑运算
and 、or 、not
优先级 not > and > or
# 范围搜索条件
between 下限 and 上限
not between 下限 and 上限;
# 列表搜索条件
字段 in (元素1、元素2、、、)
字段 not in (元素1、元素二、、、)
# 模糊查询
字段 like 包含匹配符(%,_)的字段
🖊 group by 通常和聚合函数一起使用
🖊 having 语句 包含聚合函数计算结果的函数
order by 一个字段或多个字段的组合
# limit语句做分页显示
limit 开始编号,显示多少条数据
总体来说这此学习虽然没有掌握什么比较有用的技术,但是也对Mysql基础的也是有了进一步的了解。希望在上面我哪里做的不对前辈们可以指正出来。接触编程时间有两年了快,但是最近才发现是真正喜欢编程。所以说需要把以前的课程都补回来!!!哈哈哈哈。先行谢过各位大神们的指点和指正!!! 溜了溜了!!! 🏃🏃🏃🏃🏃🏃🏃🏃🏃🏃🏃🏃

296

被折叠的 条评论
为什么被折叠?



