查询语句 DQL查询数据(最重点)
(Data query language:数据查询语言)
数据库分类:
关系型数据库:表于表之间,行和列之间的关系进行数据存储
- 非关系型数据库:对象储存,通过对象的属性来决定(Not only Sql)
MySql是最好的关系数据管理系统
中小型网站、或者大型网站、集群!
数据库命令:
flush privileges;–刷新权限
use ***;切换表
show tables;查看数据库中所有得表信息
describe student;显示数据库中所有的表的信息
create database **; 建表
exit; 退出
所有的语句都要 ;结尾
------------------------------------------------------
DDL 定义
DML 操作
DQL 查询
DCL 控制
数据类型
数值 | ||
---|---|---|
tinyint | 十分小的数据 | 1个字节 |
smallint | 较小的数据 | 2个字节 |
mediumint | 中等大的数据 | 3个字节 |
int | 标准的整数 | 4个字节 |
bigint | 较大的数据 | 8个字节 |
float | 浮点数 | 4个字节 |
double | 双精度浮点 | 8个字节 |
decimal | 字符串形式的浮点数 | 金融计算的时候,一般使用decimal |
字符串 | |||
---|---|---|---|
char | 字符串固定大小的 | 0-255 | |
varchar | 可变字符串 | 0~65535 | 常用的变量String |
tinytext | 微型文本 | 2^8-1 | |
text | 文本串 | 2^16-1 | 保存大文本 |
时间日期 | java.util.Date |
---|---|
date | YYYY-MM-DD,日期格式 |
time | HH:mm:ss,时间格式 |
datetime | YYYY-MM-DD HH:mm:ss 最常用的时间格式 |
timeStamp | 时间戳,1970.1.1到现在的毫秒数!也较为常用 |
year | 年份表示 |
NULL:没有值,未知,不要用NULL进行计算,结果为NULL;
数据库的字段属性(重点)
Unsigned:
- 无符号的整数
- 该列不能声明为负数
zerofill:
- 0填充的
- 不足的位数,使用0来填充,int(3),5 — 005
自增:
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用设计唯一的主键-index,必须是证书类型
- 可以自定义设计主键自增的起始值和步长
非空 not null
- 假设设置为not null,如果不给它赋值,就会报错!
- Null,如果不填写,默认就是null!
默认
- 设置默认的值 不指定就为该值
创建表语句:
create table if not exists student
( id int(4) auto_increment comment '学号',
name varchar(30) default '匿名' not null comment '姓名',
pwd varchar(20) default '123456' not null comment '密码',
sex varchar(2) default '女' not null comment '性别',
birthday datetime null comment '出生日期',
address varchar(100) null comment '家庭住址',
email varchar(50) null comment '邮箱',
primary key(id)
)engine=INNODB default charset=utf8
格式
CREATE TABLE [IF NOT EXISTS] 表名(
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释]
)[表名][字符集设置][注释]
数据库引擎
myisam | innodb | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
事务支持 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作: |
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置:
- 所有的数据库文件都存在data目录下
- 本质还是文件的存储
MySQL引擎在物理文件上的区别
- InnoDB在数据表中只有一个*.frm文件,以及上级目录下的idata1文件
- MYISAM对应文件
1. *.frm 表结构的定义文件
2. *.MYD 数据文件(data)
3. *.MYI索引文件(index)
设置数据库表的字符集编码:CHARSET=utf8
不设置的话,会是mysql默认的字符集编码-(不支持中文)
MYSQL的默认编码是Latin1,不支持中文
在my.ini中配置默认的编码:charcter-set-server=utf8
修改和删除
修改表名:alter table ***[旧表名] rename as ******[新表名]
增加表的字段:alter ***[表名] add ****[字段名] int(8)[类型(长度)]
修改表的字段(重命名,修改约束!):alter table ***[表名] modify ****[字段] varchar(11) 修改约束
alter table ***[表名] change ****[字段] *****[字段新命名] int(1)
最终结论:change用来字段重命名,不能修改字段类型的约束;modify不用来字段重命名,只能修改字段类型和约束。
--删除表的字段:alter table ****[表名] drop *****[字段名]
--删除表:drop table if exists ****[表名]
所有的创建和删除操作尽量加上判断,以免报错
sql关键字大小写不敏感
MySQL数据管理
外键(了解即可)
create table if not exists student
(
id int(4) auto_increment comment '学号',
gradeid int(10) not null comment '年级',
name varchar(30) default '匿名' not null comment '姓名',
pwd varchar(20) default '123456' not null comment '密码',
sex varchar(2) default '女' not null comment '性别',
birthday datetime null comment '出生日期',
address varchar(100) null comment '家庭住址',
email varchar(50) null comment '邮箱',
primary key (id),
key fk_grade (gradeid),
constraint fk_grade foreign key (gradeid) references grade(gradeid)
);
create table grade
(
gradeid int(4) auto_increment comment '年级id'
primary key,
gradename varchar(30) not null comment '年纪名称',
primary key (gradeid)
)engine=InnoDB default charset = utf8;
创建表时没有外键没有关系可以使用语句增加
alter table [表名] add constraint [约束名] foreign key(gradeid[外键名]) references [哪个字段]
物理外键(不建议使用)
DML语言(全部记住,背下来)
添加
insert into 表名([字段名1,字段名2,字段名3])values([‘值1’,‘值2’,‘值3’])
写插入语句一定要一一对应!
插入多个字段
insert into grade(gradename) values(‘大二’),(‘大三’);
insert into grade(gradeid,gradename) values(3,‘大二’),(6,‘大三’);
insert into grade values(5,‘大二’),(4,‘大三’);
修改
update [表名] set [列名]=[] where [条件]
指定条件
update student set name='阿土伯伯' where id=1 [and 其他条件];
无条件
update student set name='阿土伯伯',email='wanaei@qq.com';
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<> | 或!= | ||
> | |||
< | |||
<= | |||
>= | |||
between…and… | 在某个范围内 | [2,5] | |
and | 我和你 | && | 5>1 and a>2 |
or | 或 | 5>1 or 1>2 | true |
删除
delete from [表名] where [条件]
truncate 作用:完全清空一个数据库表,表的结构和索引约束不变
delete 和 truncate 得区别
不同:
truncate 重新设置,自增列计数器,
truncate 不影响事务
了解即可:
- InnoDB 自增列会从1 开始(存在内存当中,断电即世)
- MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)