基本SQL命令
sql命令的使用规则
- 每条命令以分号结尾
- 命令不区分大小写
库的管理
查看所有的库:
show databases;
创建数据库(指定字符集):
create database 库名 [character set 字符集(一般使用utf8)];
create database stuinfo character set utf8;
查看创建库的语句:
show create database 库名;
查看当前所在库:
select database();
切换库:
use 库名;(这个可以不加分号,但最好写)
查看库中所有的表:
show tables;
删除数据库:
drop database 库名;
表的管理
创建表:
create table 表名(
字段名 数据类型,
字段名 数据类型,
...
)[character set 字符集];
查看创建表的语句(包括字符集、存储引擎)
show create table 表名;
查看表结构
desc 表名;
删除表
drop table 表名;
表记录管理
插入语句
insert into 表名 values(记录1),(记录2)....
insert into 表名(字段名1,字段名2...) values(记录1)...
eg:insert into stuinfo values(1, 'zhangsan', 28), (2, 'lisi', 25);
insert into stuinfo(id, name) values(3, 'Tom'), (4, 'Lucy');
查询语句
select 字段名列表 from 表名;
select 字段名列表 from 表名 where 条件;
eg:select name from stuinfo;
select id from stuinfo where name='lisi';
字段的数据类型
数值类型:整型、浮点型
- 整型
- int 大整形(占4个字节)取值范围:0~(2^32-1)
- tinyint 微小整型(占1个字节)
- 有符号:signed为默认,取值范围:-128~127
- 无符号:unsigned,取值范围:0~255
- 浮点型
- float:占4个字节,最多显示7位
- float(m,n) 其中m表示总位数,n表示保留的小数位数
- double:占8个字节,不常用
- decimal:详见紧挨着的注释
注释:decimal(m, n)比较常用
它的存储比较特殊,整数和小数部分分开存储
存储规则:将9的倍数包装成4个字节,余数详见如下表
- float:占4个字节,最多显示7位
余数 | 字节 |
---|---|
0 | 0 |
1-2 | 1 |
3-4 | 2 |
5-6 | 3 |
7-8 | 4 |
举个栗子:
decimal(19, 9)
分析:
整数部分:10 / 9 = 1余1—-> 4字节+1字节=5字节
小数部分:9 / 9 = 1 余0—–>4字节+0字节=4字节
所以共占9个字节
字符类型:char、varchar、text / longtext
- char:定长(固定长度),范围:1~255
- varchar:变长(不固定),范围:1~65535
- text / longtext:存放文本,可存放4G
char和varchar的特点:
char:浪费存储空间,性能高
varchar:节省存储空间,性能低
字符类型的宽度和数值类型的宽度的区别:
- 数值类型宽度为显示宽度,只用于select查询时显示,和占用存储空间无关,可用zerofill查看效果
- 字符类型的宽度超过后无法存储
枚举类型:单选、复选
- enum:单选
- 如:sex enum(‘男’,‘女’)
- set:复选
- 如:hobby set(‘篮球’,‘足球’,‘乒乓球’)
单选在插入记录时只能选择其中的一个,并且只能插入enum里的内容,否则会报错,如:
insert into stuinfo(sex) values('男') --正确
insert into stuinfo(sex) values('man') --错误
复选在插入记录时可选择一个或多个,但只能选择set有的内容,否则会报错,多个使用逗号隔开,并且都在一个引号内,如
insert into stuinfo(hobby) values("篮球,足球") --正确
insert into stuinfo(hobby) values("篮球","足球") --错误
insert into stuinfo(hobby) values("篮球,足球,羽毛球") --错误
日期时间函数
data、datatime、timestamp、time
- data:’YYYY-MM-DD ’ 年月日
- datatime:’YYYY-MM-DD HH:MM:SS’ 年月日时分秒
- timestamp:’YYYY-MM-DD HH:MM:SS’ 年月日时分秒
- time:’HH:MM:SS’ 时分秒
注意:datatime不给默认值返回的是NULL
timestamp不给默认值返回的是当前系统的时间
日期时间函数
- now() 服务器当前日期
- curdata() 当前日期
- data(“1999-09-09 09:09:09”) 提取 年月日 1999-09-09
- time(“1999-09-09 09:09:09”) 提取 时分秒 09:09:09
- year(“1999-09-09 09:09:09”) 提取 年 1999
日期时间运算
语法格式:
select 字段 from 表名 where 字段名 运算符(now()-interval 时间间隔单位)
时间间隔单位:
2 day | 3 hour | 1 minute | 2 year | 3 month
示例:
1. 查询1天内的充值记录
select * from t2 where cztime>=(now()-interval 1 day);
2. 查询1年以前的充值记录
select * from t2 where cztime<(now()-interval 1 year);
3. 查询1天前、3天以内的充值记录
select * from t2 where cztime>=(now()-interval 1 day)
and cztime<=(now()-interval 1 day);
表字段的操作
语法格式:
alter table 表名 ...
- 添加字段(add),默认添加到最后
- 添加到最后:alter table 表名 add 新字段名 数据类型;
- 添加到第一个 :alter table 表名 add 新字段名 数据类型 first;
- 添加到某个字段后边:alter table 表名 add 新字段名 数据类型 after 字段名;
- 删除字段(drop)
- alter table 表名 drop 字段名;
- 修改字段数据类型(modify)
- alter table 表名 modify 字段名 新数据类型;
表记录的操作
- 删除表记录(delete)
- delete from 表名 where 条件;
- 更新表记录(update)
- update 表名 set 字段1=值1 where 条件;
注意:对表记录的操作一定要加where条件,不然会对整张表操作
- update 表名 set 字段1=值1 where 条件;
运算符操作
- 数值比较:=、!=、>、>=、<、<=
- 字符比较:==、!=
- 逻辑比较:and、or
- 范围内比较
- 在值1与值2之间:between 值1 and 值2
- 在某些值中:in(值1,值2,值3….)
- 不在某些值中:not in(值1,值2,值3….)
- 匹配空和非空
- 空:is null
- 非空:is not null
- 模糊查询:like
- _:匹配单个字符
- %:匹配0到多个字符
模糊查询案例:
select name from stuinfo where name like "_%_"; ----匹配两个及以上姓名
select name from stuinfo where name like "%"; ----匹配全部的姓名
select name from stuinfo where name like "___"; ----匹配三个字符的姓名
select name from stuinfo where name like "赵%"; ----匹配姓赵的姓名
表字段和表记录的操作
功能 | 表字段(alter table 表名 + ) | 表记录 |
---|---|---|
增 | add | insert into 表名 values… |
删 | drop | delete from 表名 where… |
改 | modify | update 表名 set… |
查 | desc 表名 | select 字段 from 表名… |
The end!