一、数据类型
1.字符类型
char(n) 定长为1-255 不够补空格
varchar(n) 可变 65536 不够不补空格
text 变长长文本,无显式长度限制用 char_length()
nchar(n) 定长Unicode字符
nvarchar(n) 变长Unicode字符
2.整数类型
tinyint占用 1 字节
int占用 4 字节
bigint占用 8 字节
3.精确小数类型
numeric(p,s):p 表示总有效位数,范围 1-38,s 表示小数点后位数,0≤s≤p
decimal(p,s)
4.近似小数类型
float(n):单精度浮点数,n 表示尾数位数,范围 1-24,占用 4 字节
double:双精度浮点数,占用 8 字节,精度高于 float
5.时间日期
data年月日 time时分秒 datatime timestamp year
6.NULL
7.布尔值
1 表示真(TRUE)、0 表示假(FALSE
8.自定义
二、数据库操作
1.创建数据库
create database [if not exist] 数据库名称 [default charset 字符集] [collate 排序规则]
2.删除数据库
drop database 数据库名称
3.使用数据库
use 数据库名称
4.查询数据库
查询所有数据库 show databases 查询当前数据库 show database()
例子:
-- 如果存在schooldb,即删除数据库
drop database schooldb if exists schooldb;
-- 创建数据库'schooldb' create 对象名
create database schooldb character set utf8mb4;
-- 打开数据库
use schooldb;
三、表操作
1.创建表
create table [if not exists] 表名 (
字段1 字段类型 [约束条件] [COMMENT 字段注释],
……
)[comment 表注释]
约束条件
primary key:主键,唯一标识表中每行数据,不可重复、非空。
not null:字段值不可为空。
auto_increment:自增,仅适用于整数类型主键,插入时可省略该字段(自动递增)。
unique:字段值唯一(可多个字段联合唯一)。
foreign key:外键约束,用于建立两个表之间的关联关系,确保从表中的字段值必须在主表对应的字段值中存在。
default:默认值约束
例子
create table studinfos(
-- 列名 数据类型 特征(主键、非空、自动增长)注释
id int primary key auto_increment comment '编号',
name
varchar(4) not null comment '姓名',
sex enum('男','女')comment '性别',
tel char(11) comment '手机号码',
height float comment '身高',
borthday timestamp comment '出生日期',
sign text comment'个性签名' -- 最后一列不能有逗号
)
2.删除表
drop table if exists 表名
3.修改表
alter table <表名> add <新字段名> <数据类型>
alter table <表名> modify <字段名> <数据类型>
alter table <表名> drop <字段名>
alter table <表名> modify <字段名> <数据类型><约束条件>
alter table <表名> change <旧字段名> <新字段名><数据类型>
四、数据的操作
drop table if exists bookinfos;
create table bookinfos(
-- 列名 数据类型 特征(主键、非空、自动增长)注释
id int primary key auto_increment comment '编号',
name
varchar(50) not null comment '书名',
price float not null comment '价格',
type varchar(20) not null comment '类型',
cbdate timestamp comment '出版时间'
);
1.增加数据
-- 语法1: insert into 表名(列1,列2,列3……)列不可以有'' value(值1,值2,值3)
insert into bookinfos(id,name
,price,type,cbdate)values(1,'c语言','30','软件开发','2010-10-10')
insert into bookinfos(id,name
,price,type,cbdate)values(null ,'Java语言','50','软件开发','2010-10-11')
-- id 可以不写 用null替代
insert into bookinfos(name
,price,type,cbdate)values('三国志','80','历史小说','2010-10-12')
insert into bookinfos(price,name
,type)values('40','西游记','神话小说')
-- 语法2
-- insert into 表名 values(值1,值2,值3……);
insert into bookinfos values(null,'封神榜','100','神话小说','2020-10-13');
-- 语法3 批量插入
-- insert into 表名 values(值1,值2,值3……),(值1,值2,值3……),(值1,值2,值3……)
insert into bookinfos values(null,'语文','39','学科类','2020-09-01'),(null,'数学','40','学科类','2020-09-02'),(null,'外语','41','学科类','2020-09-03');
2.删除数据
-- 语法1:delete from 表名 where 某列=某值;
delete from bookinfos where name
='Java语言';
delete from bookinfos where type='学科类'and price<40;
delete from bookinfos where cbdate is null; -- null 只能用is来表示
delete from bookinfos;
-- 语法2 清空表(数据全删、自动增值/标识种子从1排列)
-- truncate table 表名
truncate table bookinfos;
3.修改数据
-- 修改语法:updata 表名 set 列1=值1,列2=值2,... where 某列=某值;
update bookinfos set cbdate='2020-08-30' where cbdate is null;
update bookinfos set price=price+1 where type='神话小说' or type='历史小说';
-- 修改编号大于3的并且价格在40到90之间的图书的出版时间为2020-08-29
update bookinfos set cbdate='2020-08-29' where price>=40 and price<=90;
update bookinfos set cbdate='2020-08-29' where price between 40 and 90;
update bookinfos set cbdate='2020-08-29'
where id>3 and price between 40 and 90;
五、查询数据
1.语法
select [*全部 |all|distinct去重|colunm1,colunm2,...]
from 查询来源 数据表/视图
where 条件
group by
having
order by 排序(asc升序 默认 desc降序)
limit -- limit n1: 返回查询结果的前n1行数据 limit n1,n2: 返回从n1行起,共n2行数据。初始行从0 开始。
union
2.where条件常用运算符
1.模糊匹配
表达式 [NOT] LIKE 模式表达式
% 匹配0或多个任意字符
_ 匹配1个任意字符
表达式 [NOT] REGEXP 模式表达式
通配符 含义
^ 匹配字符串开始部分
$ 匹配字符串结束部分
. 匹配字符串
- 匹配0或多个任意字符
- 匹配单个或多个任意字符
? 匹配0或单个任意字符
() 匹配括号中的内容
{n} 匹配括号前的内容出现n次的序列
2.范围匹配
表达式 BETWEEN 表达式1 AND 表达式2
表达式 IN(表达式[,…])
3.空值判断查询条件
IS NULL IS NOT NULL
4..使用逻辑运算符查询(NOT AND OR XOR)
六、索引:加快查询速度
创建create [unique cluster] index <索引名>on<表名>(<列名>[<次序>])
删除drop
查看 show index from 表名