笔记—数据库
文章目录
day 1
- cmd进入mysql命令: mysql -u root -p
DBMS :数据库管理系统
常见的数据库:
- Orale:大型企业
- DB2:中大型
- MySQL:开源,体积小,适合中小型企业
- SQL Server:全面,效率高,中小型企业
事务:逻辑单元操作,要么不执行要么就执行
存储引擎:
-
myisam:访问很快,不支持外键,不支持事务
-
innoodb:提供提交,回滚和崩溃的事务安全,访问会慢
-
memory:访问非常快,数据存放在内存,默认使用HASH索引。
sql:就是数据库语言,结构化语言
数据类型:
- char(n): 固定长度
- varchar : 不固定长度
- int(m): 范围()
- float(m,d) : 单精度 小数点长度4字节 m:个数 d:小数
- double(m,d): 双精度 ,小数点长度8字节
- datatime :时间日期类型
mySQl逻辑结构:
select》》》
连接层:提供客户端连接的服务
服务层:提供用户使用的接口
提供sql优化器
引擎层:提供数据存储的方式
存储层:数据存储
SQL功能:
创建数据库 CREATE DATABASE 数据库名
删除数据库 DROP DATABASE 数据库名
创建表
CREATE TABLE 表名(
列名1 类型 [约束],
列名2 类型 [约束],
)engine = innobD default charset=utf8;
default 设置默认值
添加列: ALTER TABLE 表名 add 数据类型
查看信息: sesc 表名;
修改数据类型: ALTER TABLE 表名 modify 数据类型
删除列: ALTER TABLE 表名 drop 列名 数据类型
修改表名: RENAME TABLE 原始表名 TO 新表名;
查看表: show ALTER TABLE 表名;
修改表的字符集为gbk: ALTER CREATE 表名 CHARACTER SET INT;
修改表的列名: ALTER TABLE student CHANGE 类名 新类名 数据类型
删除表: drop table 表名
数据操作语言 DML
查询表中数据 select*from 表名
插入 insert into 表名(列名1,列名2)VALUE(列值1,列值2),(列值1,列值2;
更新 update 表名 set 列名1=列值1,列名2=列值2.。。。
where 列名=值
删除 delete from 表名【where 列名=值】 删除后数据可以找回
truncate 删除后数据不可以找回
数据查询语言(重点)DQL
select*from 表名;
正在表达式: like ‘_李’;任一个字符
like ‘%李’;任n个字符
-
条件查询:where子句中使用运算符
-
模糊查询:like后跟通配符
-
字段控制查询
-
排序:order by
ASC:升序
DESC:降序
- 聚合函数
count():统计指定列不为NULL的记录行数
SUM和AVG:求和和平均值
MAX和MIN:最大值和最小值
数据控制语言DCL
用户,权限,事务
day 2
分组查询:将查询结果按照一个或多个进行分组,字段值相同为一组
SELECT gender from employee GROUP BY gender;
group by:
limit:
数据的完整性:
实体完整性:
一行一个实体,标识数据不重复,
主键约束:primary key(主键1)
唯一约束:
自动增长约束:
域完整性:
非空约束:not null
默认约束: default null
参照完整性:
外键约束:
主键:**
添加主键 ALTER TABLE emp ADD PRIMARY KEY(dept_number);
添加多个主键 alter table tableName addunique(column_name);
查看主键 show keys from tableName;
外键:
表外创建外键
ALTER TABLE dept ADD CONSTRAINT fk_ID FOREIGN KEY(dept_number) REFERENCES emp(dept_number);
表内创建外键
CREATE TABLE score1(
score DOUBLE,
sid INT,
CONSTRAINT fk_ID FOREIGN KEY(dept_number) REFERENCES emp(dept_number
);
day 3
SQL进阶2
一、表之间的关系:
一对一:
一对多:
多对多:创建两个表,用外键和主键进行连接
二、多表查询:
合并结果集:
UNION:合并去重复记录
UNION all : 合并不去重复记录
笛卡尔集:把两个集合合并,每个数据进行合并
A(a,b) B(1,2,3,4)
(a,1)(a,2)(a,3)(a,4)(b,1)(b,2)(b,3)(b,4)
等值连接:select * from stu st >>>stu 是表 ,st是别名
inner join ste ct
where 。。。
and 。。。
99连接法:
select 查询列表
from 表1 别名,表1 别名
[where 筛选条件 ADD 筛选条件]
内联查询(inner join):
select 查询列表
from 表1 别名
inner jion 表2 别名 on 连接条件
inner jion 表3 别名 on 连接条件
select * from T1 inner join T2 on T1.userid = T2.userid
非等值连接:
左联(left outer join):左边查出全部,右边查出满足的
select * from T1 left outer join T2 on T1.userid = T2.userid
右联(right outer join):右边查出全部,左边查出满足的
select * from T1 right outer join T2 on T1.userid = T2.userid
全联(full outer join):显示左表、右表两边中的所有行,过滤掉重复的
select * from T1 full outer join T2 on T1.userid = T2.userid
DAY 4
SQL进阶3
一、常用函数
函数分类:
1.字符串函数:
- left(str,n),right(str,n):左右查询
- lower(str),upper(str):大小写
- concat(a,b,c):连接字符串
- insert(str,x,y,instr):在x位起始替换y个字符为instr
- Lpad(str,n,pad),Rpad(str,n,pad):左右填充
SELECT LPAD(‘xingdao’,10,23)>>>232xingdao
- timer():左右去空格 Llimer()左去空格,Rlimer右去空格
- replace(str,a,b):用a去替换str中的b
- repeat(str,x):返回str重复x次
- substring(str,x,y):返回x位y个长度的字符串
二、数值函数
- abs(str):取绝对值
- ceil(),floor():向上取整,向下取整
- mod(x,y):去摸
- rand(x):返回0或1的随机数
三、日期和时间函数
- curdata():返回当前日期=年月日
- curtime():返回当前时间=分秒时
- now():返回当前日期和时间
- unix_timestamp:返回当前日期的时间戳
SELECT UNIX_TIMESTAMP("2016-07-11");
- from_unixtime(unixtime):将时间戳变成时间
- week(date):返回第几周
- year(date):返回那一年
- hour(time):返回当前小时
- minute(time):返回当前分钟
- date_format(date,fmt):把字符串格式化日期值
- date_add(date,interval expr type):计算日期间隔
- datediff(date1,date2)计算两个日期相差的天数
SELECT NOW();>>>now() 2019-05-05 11:24:58
四、流程函数
- IF():
- ifnull():
- case when then end:
五、事务
就是一种操作
- 开启事务 START TRANSACTION
- 提交事务 COMMIT(可不执行,默认提交)
- 回滚事务 rollback
START TRANSACTION;
UPDATE sc SET Cno=Cno+2;
rollback;
COMMIT;
SELECT * FROM sc;
执行事务到另一处显示
六、权限操作
七、视图
一个虚拟表
创建视图
USE school;
CREATE VIEW T
AS (SELECT*FROM student WHERE Sage>30);
八、存储过程
参数:
- in :
- out :
- inout :
语句:
- If语句
- Case语句
- 循环
DELIMITER $$
CREATE PROCEDURE ysc (IN NAME VARCHAR(50))
BEGIN
SELECT*FROM sc WHERE Sno=NAME;
END$$
DELIMITER ;
CALL ysc('01');