目录
新增
insert into 表名 value(数据,数据),.......;
insert into 表名(列1,列2.....) value(数据,数据),.......;
datatime 类型的数据如何插入?
查询
select * from 表名;
select 列1,列2...... from 表名;
查询字段为表达式
为查询结果的列 取别名
去重:DISTINCT
排序:ORDER BY
条件查询
比较运算符
逻辑运算符
注:select 条件查询的执行顺序
分页查询:LIMIT
删除
delete from 表名 ;
delete from 表名 where 条件;
修改
update 表名 set (列名=值),(列名=值).... where 条件;
先创建一个名为: title 表:下文的所有操作都基于此表
注:因为MySQL对大小写不敏感所以大写小写都可以。
新增
insert into 表名 values/value(数据,数据),.......;
可以单行,多行插入。
insert into 表名(列1,列2.....) value(数据,数据),.......;
指定列插入,可以单行,多行插入。
datatime 类型的数据如何插入?
可以用一个固定格式的字符串来表示日期
还可以利用 now() 函数获取当前时间
新增表字段
alter table 表名 add 字段名和类型
插入之后表的字段为:
查询
select * from 表名;
全列查询 显示该表的所有数据
* 表示 通配符 可以指代所有的列
select 列1,列2...... from 表名;
指定列查询
查询字段为表达式
- 查询语文成绩减20
- 查询各科成绩总和
注:最后两行之所以为 null 是因为在 MySQl 中 null 与任何值进行运算结果都为 null
为查询结果的列 取别名
select 表达式/列名 as 别名 from 表名;
去重:DISTINCT
select distinct 单列/多列 from 表名;
会去除查询结果中的重复项(只保留一项)
排序:ORDER BY
select * from 表名 order by 列名 asc/desc;
- ASC 为升序(从小到大)
- DESC 为降序(从大到小)
- 默认为 ASC
列名可以是单个也可以是多个
例:select * from 表名 order by A,B ;
在A相等的情况下按照B进行排序
select * from 表名 order by A asc,B desc;
按照A列升序B列降序进行排列
指定某个列按照 升序/降序 排列
null 被认为是最小值,但是也只是在排序中。
条件查询
select * from 表名 where 表达式/条件(不能是别名)
显示满足条件的数据
比较运算符
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL -> false |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 |
范围匹配,[a0, a1],闭区间,如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE ‘..%../.._..’ | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 |
LIKE ‘..%../.._..’ 使用实例:
select * from 表名 where 列名 like '孙%';
在指定列中寻找满足like后面条件的记录。
- ‘%孙’:字符串最后一个子符为‘孙’
- ‘孙%’:字符串第一个字符为‘孙’
- ‘%孙%’:字符串中包含‘孙’
逻辑运算符
运算符 | 说明 |
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
例:满足数学成绩大于80的人
注:select 条件查询的执行顺序
- 遍历表中的每个记录
- 把当前记录的值带入条件,根据条件进行筛选
- 如果这条记录满足条件,保留并进行列上的表达式的计算
- 如果有 order by 会在所有行都被获取到之后(表达式也算完了)在针对所有结果进行排序。
因为第三步是定义别名,而 where 是在第二步被执行所以会报错;
分页查询:LIMIT
select * from 表名 limit 要查询的行数 ;
select * from 表名 limit 要查询的行数 offset 偏移量('下标'从 0 开始);
删除
delete from 表名 ;
删除这个表中的所有数据,但不会删除表。
delete from 表名 where 条件;
修改
update 表名 set 列名=值,列名=值.... where 条件;
可以修改一列也可以修改多列。
此处的 where 条件 是为了限定有哪些值可以被修改。
一次修改一列:
一次修改多列:
MySQL中的数值类型
数据类型 | 大小 | 说明 |
BIT[ (M) ] | M指定位 数,默认 为1 |
二进制数,M范围从1到64, 存储数值范围从0到2^M-1 |
TINYINT | 1字节 | 相当于JAVA语言的byte |
SMALLINT | 2字节 | 相当于JAVA语言的short |
INT | 4字节 | |
BIGINT | 8字节 | 相当于JAVA语言的Long |
FLOAT(M, D) | 4字节 | 单精度,M指定长度,D指定 小数位数。会发生精度丢失 |
DOUBLE(M, D) |
8字节 | 双精度,M指定长度,D指定 小数位数。会发生精度丢失 |
DECIMAL(M, D) |
M/D最大 值+2 |
双精度,M指定长度,D表示 小数点位数。精确数值 |
NUMERIC(M, D) |
M/D最大 值+2 |
和DECIMAL一样 |
MySQL中的字符类型:
数据类型 | 大小 | 说明 |
VARCHAR (SIZE) | 0-65,535字节 | 可变长度字符串,size是字符长度 |
TEXT | 0-65,535字节 | 长文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 |
MySQL中的日期类型:
数据类型 | 大小 | 说明 |
DATETIME | 8 字 节 | 范围从1000到9999年,不会进行时区的 检索及转换。 |
TIMESTAMP | 4 字 节 | 范围从1970到2038年,自动检索当前时 区并进行转换。 |
MySQL中的约束类型
约束类型 | 说明 | 示例 |
NULL约束 | 使用NOT NULL指定列不为 空 |
name varchar(20) not null, |
UNIQUE唯一约束 | 指定列为唯一的、不重复的 | name varchar(20) unique, |
DEFAULT默认值约 束 |
指定列为空时的默认值 | age int default 20, |
主键约束 | NOT NULL 和 UNIQUE 的 结合 |
id int primary key, |
外键约束 | 关联其他表的主键或唯一键 | foreign key (字段名) references 主 表(列) |
CHECK约束(了 解) |
保证列中的值符合指定的条 件 |
check (sex ='男' or sex='女') |