数据库
一、数据库是什么
存储管理数据的仓库。
软件类型:Mysql(开源)、Oracle、db2、SQL Server
数据库:库-数据库软件中的一个仓库,库中存放表;
表-二维表,包括列和记录
列-字段、表头、标题
数据库有什么用:存储数据-量大、安全、完整、共享
管理数据-通过分析、组合产生新的有效的数据
需要掌握的:DDL-数据定义语言 create/alter/drop/show
DML-数据操作语言 insert/delete/update
DCL-数据控制语言 安全性
DQL-数据查询语言 select
二、数据库安装、启动
Mysql、SQL server直接百度就好,记下账号密码;
Linux下安装Oracle,一般看运气,不行多试几次;
启动:windows中 启动服务-net start mysql
net stop mysql
右键我的电脑 管理(SQL server同理)
登陆数据库 DOS窗口输入 mysql -uroot -proot(账户root 密码root) 访问他人数据库 mysql -ip -p -uroot -p
退出 ctrl + c / quit / exit
三、数据库的使用
SHOW DATABASES;查看所有数据库 CREATE DATABASE xiaoqiang CHARACTER SET utf8;创建数据库 USE xiaoqiang;使用该数据库 DROP DATABASE test;删除名称为test的数据库 CREATE shuaige TABLE shuaige ( 创建表 sno INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL, sage INT,
FOREIGN KEY(sage) REFERENCES meinv(sage), ssex ENUM('male','female') );
DDL增删改查:库 -创建数据库 create database 库名;(库名不要使用数字开头;使用默认编码格式utf8)
create database 库名 character set gbk; 创建一个gbk格式的数据库
查看数据库 show databases;
查看数据库的编码格式 show create database 库名;
查看正在使用的数据库 select database();
使用数据库 use 库名;
删除数据库 drop database 库名;(慎用)
修改数据库编码格式 alter database 库名 charater set utf8;
表- 数据类型: int 整型 、double小数(长度1,长度2)-1为字段数据总长度,2为小数部分长度、char固定长度字符串“adf”、varchar 可变长度字符串、text字符串、time时间、date日期、datetime日期时间、enum枚举("","","")
创建表 create table 表名(
字段名字 字段类型(长度),
字段名字 字段类型(长度),
。。。。。
)
修改表- 改表名 rename table 原名 to 新名;
改字段 alter table sstu change 原字段名 新字段名 新字段类型(长度);
注意:数据库的字符集,表使用数据库的字符集,列默认使用表的字符集
查表- 库中表多少 show tables;
表中字段类型 desc 表名;
查询表的创建的sql语句 show create table 表名;
列- 添加新字段 alter table 表名 add 新字段名 字段类型(长度);
删除 alter table 表名 drop 字段名;
DML-表操作 新增-insert into 表名(待赋值字段列表)values(赋值列表) 例如:insert into shuaige(sid,sname)values(1,"张三")
批量插入insert into shuaige(sname,sage)values('李四',22),('张三',33) ;
注意:1.列名和列值类型个数 顺序一一对应 2.注意数据长度以及是否有必须赋值的字段,非空字段而且没有默认值
3.插入空值 输入null 4.插入时间日期 使用字符串 “19981212” “12:12:12”
删除-delete from shuaige where sname="李四";
delete from shuaige where sname="张三" or sname="李四";
delete from shuaige where sname="张三" and sname="李四";
-truncate table 表名;
(delete删除的表中记录是一行一行的删除,结果会有影响的行数;truncate删除表中的记录先直接把表drop掉在创建一个新表)
修改-update 表名 set 字段=值....字段=值 where 条件
四、约束
1.主键 primary key 特点 唯一 非空 ,每个表中应有一个主键
2.非空 not null 该字段必须添加内容
3.自增 auto_increment 特点 给主键加 ,列是整数列 ,删除的序号不会再次出现,编号只能变大 不能变小 ,从1开始 步长为1;
4.外键 foreign key 特点 当一个表中的某一列数据来源于另一个表中的某一列时,引用数据的一般都不是主键,被引用的是主键,至少两个表,外键的列的数据类型和长度和引用的列一致
5.默认 default 不添加数据的情况下使用默认值
6.唯一 unique 不能使用重复的数据,可以是Null
五.单表查询
查询语法-select 查询字段列表
from 来源
表名 数据
where 数据筛选
条件 用于筛选源数据
group by 对筛选后的数据分组
字段
having 分组后的筛选
order by 对查询结果进行排序 字段 升序asc默认,字段 降序desc
limit n,m 分页查询
执行逻辑 from-where-group-having-select-order by-limit
基本查询-select 字段列表 from tablename;
条件查询-= <> <= >= !=/<> and且 or或 not非 is null is not null between 数 and 数(区间) in(值列表)
模糊查询- 查询姓李的人 李%
查哈***奇的人 哈%奇
姓名第二个字为士的人 _士%
-like
字段查询的控制:字段的计算 任何东西和null相加 结果都是null
记录的去重 distinct 去除两条或两条以上的记录完全相同
别名
排序-order by 字段 升序asc/降序desc
分页-limit n,m 限制查询的记录数目 n为起始的行数 m代表显示多少行 起始行从0开始 0是第一行
聚合函数-聚合函数用在查询后面
max() 计算指定列的最大值
min() 计算指定列的最小值
sum() 计算指定列的和 数值正常计算,非数值当作0使用
avg() 计算指定列的平均数 数值正常计算,非数值当作0使用
count() 统计指定列中所有不为null的记录的行数
分组 group by having
having 用于分组后筛选 可以使用聚合函数
where 用于分组前的筛选 不可以使用聚合函数
六、多表查询
1.合并结果集
各个表的列数和字段类型 长度 必须相同;把多个查询的结果合并到一起
去重 union ;不去重 union all
2.连接查询
先把多个表的数据合并到一起,再进行查询;默认连接时表数据会产生笛卡尔积;会产生大量的无效数据;使用主外键关系去除无效数据
inner join内连接- select * from 表1 inner join 表2 on 表1.X=表2.X
特点:查询出的结果必须满足主外键的筛选条件
outer join外连接-特点 查询出的结果不必满足主外键的筛选条件
左外 left outer join
右外 right outer join
3.嵌套查询/子查询
一个select 语句中包含另一个完整的select语句
特点:出现在where 后作为条件的一部分;作为一个新的表来存在
自然连接- 自动寻找主外键关系 去除无效数据
natural join
natural left join natural right join
4.高级对象(后期继续整理)
存储过程-一组为了完成一个特定的功能的sql语言的集合