1、为什么用数据库
数据的永久保存
安全问题
检索困难
2、常用的数据库
Oracle 甲骨文
Sqlserver 微软
Mysql 网站开发主推的数据库,开源免费,被甲骨文公司收购
3、端口号 3306
4、sql语句
shwo databases; 显示所有数据库
use 数据库名称; 使用指定的数据库
show tables; 显示当前数据库下的所有表
select * from (表名)user 查询表中全部数据
创建数据库
1、注释:
多行:/*
创建数据库
*/
单行:-- 创建数据库
#创建数据库
2、创建数据库的语句
create database sbschool 数据库名称
default character set utf8 设置字符集
3、删除数据库的语句
drop database sbschool 删除数据库
4、使用数据库
use sbschool → 数据库名
5、创建表
CREATE TABLE Student (
stuno INT NOT NULL auto_increment,
stuname VARCHAR (20) NOT NULL,
stusex VARCHAR (5) NOT NULL,
stuage INT NOT NULL,
stuaddress VARCHAR (50) DEFAULT '地址不详',
stuid CHAR (18),
stuphone VARCHAR (11),
stubirthday date,
PRIMARY KEY (stuno) #表示主键
)
数据类型:
整数:int 取值范围 正负21亿
bigint
字符串:char(可以指定长度)固定长度字符串
如果长度不够用空格补齐
varchar(可以指定长度)可变长度的
字符串(最大长度)最多不能超过10位
text(长文本) 最多是65535字符
lonhtext 约42亿字符
日期: date 2017-3-12 年 月 日
datetime 2017-11-22 9:55:30 年 月 日 小时 秒
小数:float类型
decimal类型 和float类型一样
二进制数据 blob longblob
6、主键:
PRIMARY KEY
能够唯一代表一行数据的列
强烈建议 每个表必须添加主键
7、外键
从子表中创建
foreign key(stuno) references student(stuno)
8、建立主外键的关系
1.外键表的数据必须要在主键表中存在
2.删除主键表的数据,必须要嫌删除外键表中相关的数据
9、删除表
drop table 表名 删除表
************* 重要
10、sql语句添加数据
insert into 表名 (列名1,列名2,…)
values(值1,值2,…)
11、insert into 表名 set列名1=值1,列名2=值2,…
12、多行插入
insert into 表名(列名1,列名2,…)
values
(值1,值2,…),
(值1,值2,…)
13、update 表名 set 列名=更新值
[where 更新条件]
注明:[]表示可选
and 并且
or 或者
not 取反
14、删除语句
delete from 表名
[where 删除条件]
删除表中某一列
(如果有条件的删除数据)
drop table 表名
删除表
truncate table student
清空表中所有数据
15、
关系运算符
< <= > >= = (!= <> 不等于)
16、查询语句
select 列名1,列名2,… from 表名
where 查询条件
select * from查询全部
查询的结果中列名显示中文:
SELECT stuname as 姓名,stusex as 男, stuage as 年龄
FROM student
查询部分的行
SELECT stuname,stusex,stuage,stuaddress
FROM student WHERE stusex='女'
查询的结果中添加常量列
SELECT *,'盛邦升华学校' as 学校
FROM student
表原来的结构不会变
查询出来的结果是一个临时的虚拟表
查询条件
查询条件修改过为空
SELECT * FROM student
where stuphone =''
查询条件本身为空
SELECT * from student
where stuphone is NULL
模糊查询
SELECT * FROM student
WHERE stuaddress like '%张%'
like 像。。。一样
% 表示任意长度的字符串(可以是0)
_表示 单个字符
优先级
not 优先级最高
and 第二
or 最后
排序
SELECT * FROM student
order by stuage asc 升序
SELECT * FROM student
order by stuage desc 降序
去除重复
select distinct stuaddress from student
SELECT * FROM student
ORDER BY stuage DESC
LIMIT 0,3 起始的行数。显示多少行 行数从0开始
查询语句
select 列名
from 表名
where 查询条件
group by 按照列名分组
having 筛选条件 分组后在筛选
order by 列名 asc desc
limit 0,2
17、
聚合函数:
1、sum(列名) 求和
2、avg(列名) 取平均值
3、max(列名)最大值
4、min(列名)最小值
5、 (*)行数
group by 分组
select 列名
from
[where 查询条件]
[group by 列名]
[order by 列名]
[limit 0,3]
having sum(dbscore)>100
select 列名1,列名2
from 表名
where 查询条件
group by 列名
having 筛选条件 ---分组之后在筛选数据
order by 列名 asc/desc
limit 0,2
*----注意先后顺序
18、表连接
SELECT student.stuname,score.dbscore
FROM student,score
WHERE student.stuno=score.stuno
内连接:
inner join
select a.列名1,b.列名
from a
inner join b
on链接条件
inner join c
on链接条件
where 查询条件
左链接:
左表的数据都显示出来如果和右表的数据有关联就连成一行
没有关联的数据补NULL
left join
右链接:
右表的数据都显示出来如果和左表的数据有关联就连成一行
没有关联的数据补NULL
left join
19、子查询
DESCELETE FROM books
WHERE categoryid in(
SELECT id from categories WHERE NAME ='其他'
)
not in 子查询取反
所有子查询都可以用表连接
18、常用的日期函数
year()获取年的部分
month()获取月
day()日
hours()小时
minute()分钟
second()秒
now()当前系统日期时间
sysdate()当前系统日期时间(同上)
datediff(日期1,日期2)计算两个日期相差的天数
在日期的指定部分添加指定的值
date_add(date,interval expr unit)
19、索引
1.索引是表中数据的目录
2.索引 优化查询极大提高查询效率
3.在数据量达到5-10万以上 创建索引
4.主键索引-当查询条件中涉及到逐渐咧,自动应用主键索引
主键索引对于查询范围值特别有效
5.要在查询条件中经常被使用的列
唯一值较多的列
不经常背更新的列
索引类型
1、Normal 普通索引
2、unique 唯一索引
3、full text 全文索引 对中文没效果
添加索引的语句
create index 创建索引 ix_title 索引名称
on 表名(列名)
create quique index 索引名 in 表名(列名)
删除索引
droup index 索引名 on 表名
1、索引作用-极大地提高查询效率
2、选择索引列的条件
1.查询条件中经常被使用
2.唯一值较多的类
3.不经常被更新
20、视图
1、创建视图
CREATE VIEW 视图名字
2、select * from 视图名
可以为不同的用户定制不同的数据
3、删除drop VIEW bookshitu
21、mysql的导入导出
语句的数据备份
导出:
mysqldump-u 用户名 -p 数据库名 > 路径.sql
导入:
mysql -u 用户名 -p 数据库名 < 路径/文件名
22、mysql语句的优化
{inner join 内连接
left join 左链接
right join 右链接} 等值判断
优先考虑 内连接 inner join
其次考虑 左链接 left join
右链接 right join'
最后考虑 子查询(最后选择)
尽量避免使用 not in
left join 左表尽量是数据量小的表
建立索引,加快查询性能
1、对于经常按照多个条件查询,建议创建复合索引
(由多列组成一个索引)
2、建立索引,加快查询性能
1、对经常按照多个条件查询,建立创建复合索引(由多列组成一个索引)
3、查询区间的数据建议是 between and
4、尽量避免使用select * 命令
5、当查询表中的一行数据的时候查询语句中尽量使用 limit 1
6、尽量减少排序
7、尽量不使用 or
8、尽量不要再列上做计算
9、尽量不使用not in != <>(不等于)
10、对多表链接的查询,建立视图
总结: 对查询进行优化,应尽量避免全表扫描。首先应考虑在where以及order by 涉及的列上建立索引
23、设计数据库
关于数据库的设计 三大范式
1、表中的每一列都不可在分
2、每张表只描述一件事情(每个列都描述主键)
3、表中的每一列都直接依赖于主键