javaweb之mysql知识总结

                             Mysql知识总结

1. 常见数据库
(1) Oracle 甲骨文
(2) DB2 IBM
(3) SQL Server 微软
(4) Sybase 赛尔斯
(5) Mysql 甲骨文
2. Sql语法
(1) 可以在单行或者多行书写,以分号结尾
(2) 可用空格和缩进来增强语句的可读性
(3) 不区分大小写,建议使用大写
3. 列类型
(1) Int 整型
(2) Double double(5,2) 最多五位,有两位小数
(3) Char 固定长度字符串 char(255)
(4) Varchar 可变长度字符串 varchar(65535)
(5) Text 字符串,mysql 独有的
(6) Blob 字节类型
(7) Date 日期 格式:yyyy-MM-dd
(8) Time 时间 格式:HH:mm:ss
(9) Timestamp 时间戳
4. SQL语句的分类
DDL(表结构操作,创建删除修)
(1) 查看所有数据库 show databases;
(2) 切换 use 数据库名;
(3) 创建数据库库 create database 数据库名;
(4) 删除数据库 drop database 数据库名;
(5) 修改数据库编码 alter database 数据库名 character set utf8;
(6) 创建表: create table 表名 (列名1 列类型1,列名2列类型2);
(7) 查看当前数据库中所有表 show tables;
(8) 查看指定表的创建语句 show create 表名;
(9) 查看表结构 desc 表名;
(10) 删除 drop table 表名;
(11) 修改表 alter table 表名;
添加列: alter table 表名 add(列名 列类型…);
修改列类型:alter table 表名 modify 列名 列类型;
修改列名 :alter table 表名 change 原列名 新列名;
删除列:alter table 表名 drop 表名;
修改表名:alter table 原表名 rename to 新表名;
DML(表记录进行更改,增删改)
(1) 插入数据
insert into 表名(列名1,列名2…) values(列值1,列值2…);
(2) 修改数据
update 表名 set 列名1=列值1,列名2=列值2 where 条件
注意:不能出现=null
(3) 删除数据
Delete from 表名 where 条件;
Truncate table 表名 先删除drop 该表 ,在create 该表,无法回滚
注意:字符串类型,必须使用单引号
DCL(对用户创建及授权)
(1) 创建用户
create user 用户名&ip地址 indentified by ’密码’;
create user 用户名&’%’ indentified by ’密码’; 任意IP
(2) 给用户授权
Grant 权限1,权限2… on 数据库 to用户名&ip地址;
Grant all on 数据库 to用户名&ip地址; 所有权限
(3) 撤销授权
Revoke 权限1,权限2… on 数据库 from 用户名&ip地址;
(4) 查看权限
Show grants for 用户名&ip地址;
(5) 删除用户
Drop user 用户名&ip地址;
DQL(表记录进行查询)
基础查询
(1) 查询所有列 select * from 表名;
(2) 查询指定列 select 列1,列2… from 表名;
(3) 完全重复记录只读一次 select distinct列1,列2… from 表名;
(4) 列运算
数量类型列可以加减乘除运算 select sal*1.5 from 表名;
字符串类型可以连接运算 select concat(列名1,列名2) from 表名;
转换null值 select ifnull(列名,0) from 表名;
给列起别名 select concat(列名1,列名2) as 别名from 表名;
注意:当给的值无法转换为数量类型的,当做0来看
任何数据和null相加,结果为null
不能用“+”连接字符串
起别名,as可省略
Select 列1,列2 别名,… from 表名;
条件控制
(1) 条件查询
select * from 表名 where 条件;
(2) 模糊查询 like
例如:
姓张的,两个字:select * from 表名 where ename like ‘张_’;
名字中有某字的 select * from 表名 where ename like ‘%刚’;
排序 order by
(1) 升序 select * from 表名order by 列名 asc;
(2) 降序 select * from 表名order by 列名 desc;

聚合函数:
(1) Count(有效行数) select count(*) from 表名
(2) Max(最大值) select max(列名) from 表名
(3) Min(最小值) select min(列名) from 表名
(4) Sum(求和) select sum(列名) from 表名
(5) avg (平均) select avg(列名) from 表名
分组查询 grop by
select 列名,count(*) from 表名 grop by 列名;
注意: from 前可以放聚合函数,可以放列名,需要和grop by 一致
分组前条件用where,分组后用having
Select from where grop by having order by
Limit 查询指定范围的数据
select * from 表名limit 起始页,分页单位;
查询某页: (当前页-1)*分页单位
5. 编码
(1) 查看编码 show variables like ‘char%’;
(2) Character_set_client 是utf8 无论客户端发送什么编码的数据,mysql都当成utf8的数据
修改客户端的数据格式:
Character_set_client 修改为gbk
Set Character_set_client=gbk; 只在当前窗口有效
(3) Character_set_results 是utf8 把数据用什么编码发给客户端
mysql都当成utf8的数据
修改客户端的数据格式:
Character_set_results 修改为gbk
Set Character_set_results =gbk; 只在当前窗口有效
(4) 一劳永逸的办法 my.ini 在总配置文件中进行配置,
[client] port=3306 [mysql] default-character-set=gbk;
6. 备份与恢复
(1) 数据库导出sql脚本(备份数据库内容,并没有数据库创建)
mysqldump –u 用户名 –p密码 数据库名>脚本路径;
(2) 执行sql脚本
不登录:mysql -u用户名 –p密码 数据库名<脚本路径;
登录:source 脚本路径
7. 约束
(1) 主键约束(唯一标识)
特点:非空 唯一 被引用(学习外键)
eg: id int primary key; primary key(字段名);
修改表主键 alter table 表名 add primary key(字段名);
删除表主键 alter table 表名 drop primary key;
(2) 主键自增长(整数)
eg: id int primary key auto_increment
(3) 非空约束(not null)
eg:name id int not null;
(4) 唯一约束(unique)
eg:name id int not null unique;
(5) 概念模型
对象模型:可以双向关联,而且引用的是对象,而不是一个主键
关系模型: 只能多方引用一方,而且引用的只是主键,而不是一整行记录
实体和实体之间的关系:
一对一:夫妻 (从表的主键是外键)
constraint 外键名 foreign key(从表主键) references 主表名(主键);
一对多:医院和部门
多对多:老师和学生
两张主表(无关系),一张从表(关系表,两个外键)
(6) 外键约束
特性:引用主键 可以重复 可以为空 一张表可以有多个外键
创建时:
constraint 外键名 foreign key(列名) references 主表名(主键);
修改时:
alter table 表名 add constraint 外键名 foreign key(列名) references 从表名(主键);
8. 多表查询
(1) 合并结果集(两张表的结果类型相同,)
select * from ab union all select * from cd ;(不去重)
select * from ab union select * from cd ;(去重)
(2) 连接查询
内连接 笛卡尔积
方言:select * from 表名1 别名1,表名2 别名2 where 别名1.列名=别名2.列名;
标准:select * from 表名1 别名1, inner in 表名2 别名2 on别名1.列名=别名2.列名;
自然:select * from 表名1 别名1 natural join表名2 别名2
外连接 无数据填null 部位
左外(外表一主一次,左外即左边为主)
select * from 表名1 别名1,left outer join 表名2 别名2 on别名1.列名=别名2.列名;
右外(外表一主一次,右外即右边为主)
select * from 表名1 别名1,right outer join 表名2 别名2 on别名1.列名=别名2.列名;
全外(不支持)
自然连接
(3) 子查询
查询中有查询
查询的位置 :where 后 或者 from 后
条件:
单行单列 select * from 表名1 别名1 where 列名= (select 列名 from 表名2);
多行单列 select * from 表名1 别名1 where 列名1 (in all any ) (select 列名 from 表名2);
单行多列 select * from 表名1 别名1 where (列名1,列名2)in (select列名1,列名2 from 表名2 where 条件 );
多行多列 select * from 表名1 别名1 ,(select ….) 别名2 where 条件;
步骤:找出要查询的列,表,条件

猜你喜欢

转载自blog.csdn.net/xueer_z/article/details/81707708
今日推荐