数据库基础知识

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、表中的每一列都直接依赖于主键
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值