#1、数据库的概念
数据库(DataBase,DB)
##定义:存放数据的仓库,
要求:较小的数据冗余,较高的数据安全和易扩展
优点:(1)存储大量数据信息 (2)有效的保存数据信息的完整性、一致性,降低冗余 (3)资源共享和安全
数据库 分为1、关系型数据库和 2、非关系型数据库
1、关系型数据库(常见):
MYSQL
Oracle
SQL Server
2、非关系型数据库(常见):
文档存储数据库:MongoDB
键值存储数据库: Redis Memcached
列存储数据库:HBase
图形数据库:Neo4J
这里介绍一下MYSQL:
性能:运行速度快 体积小
成本低 开源 免费
容易使用
可移值性强 运行于windows、 Linux UNIX
常见的一些专业名词
实体(entity)
表(table)的每一行(row)–>对应一个实体也叫一条记录(record)
表是记录的集合,数据库是表的集合
表之间有着关系(relationship)创建数据库时除了创建一些表以外,还会创建其他数据库的对象
数据库管理系统(DataBase Management System,DBMS)
数据库管理系统包括:数据库和访问管理数据库的接口系统
作用:维护数据库
数据库系统(DataBase System,DBS)
数据库管理员(DataBase Administrator,DBA)
###表的设计
1、主键(primary key):表的这一列的值用来唯一标识该表中的每一行
一个表只能有一个主键,并且不能为null值,表可以没有主键
注意:主键可以是一列,也可以是多列组合而成–>(复合主键)
主键的选取原则:
(1)最少性(列数最少)
(2)稳定性 (主键的数据不能经常更新,不变最好)
**2、外键(Foreign key) **
可以有多个
SQL简介
一、全称:结构化查询语句(Structured Query Language)
2、组成:(1、)DML(Data Manipulating Language)数据操作(纵)语言
作用:插入、 修改、删除 ,Insert update delete
(2、)DDL (Data Definition Language)数据定义语言
作用:建立数据库、数据对象、定义表结构 create开头
cteate table \ create view \ drop table
(3、)DQL(Data Query Language) 数据查询语言
作用:查询 select
(4、)DCL (Data Control Language) 数据控制语言
作用:控制存取许可、权限 grant revoke**
二、MYSQL数据库基本操作
1、库的创建
#1、创建学校(school)数据库
CREATE DATABASE `school`;
#2、选择school数据库(已创建)
USE `school`;
#3、删除数据库school
DROP DATABASE `school`;
2、表的创建
(1)常见的字段类型
#1、数值类型
int tinyint double
#2、字符类型
char() #固定长度
varchar() #长度可变
tinytext #微型文本串
text #文本串
#3、日期类型
date #yyyy-MM-DD
datetime #yyyy-MM-DD hh:mm:ss
time #hh:mm:ss
timestamp #yyyyMMDDHHMMSS
year #yyyy
(2)创建表
```sql
#创建表student
CREATE TABLE `student`
注释: #…
/…/
– (注意有空格)…
3、常见的字段的属性约束
**非空约束 not null
默认约束 default
唯一约束 unique key(uk)
主键约束 primary key(pk)
外键约束 foreign key (fk) :InoDB支持外键,MYISAM不支持外键
自动增长 auto_increment 默认自增1
comment 注释
``**`sql
在这里插入代码片
出项乱码:输入 set names gbk;等同于
set character_set_client=gbk;
set character_set_RESULT=gbk;
set character_set_connection=gbk;
4、修改表:
```sql
#1、修改表名(不区分大小写)
#使用时你得先有这些表,不然会出错
ALTER TABLE `student` RENAME `newstudent`;
# 2、添加字段
ALTER TABLE `student` ADD `pass` INT(10) NOT NULL;
#3、修改字段名(pass)
ALTER TABLE `stuednt` CHANGE `pass` `newpass` char(10) ;
#4、删除字段名
ALTER TABLE `student` DROP `pass`;
#5、添加主键约束
ALTER TABLE `student` ADD CONSTRAINT `pk_id` PRIMARY KEY `student`(`id`);
#6、添加外键约束涉及到俩张表
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段) REFERENCES 关联表名(关联字段)
ALTER TABLE `student` ADD CONSTRAINT fk_student_grade FOREIGN KEY (`gradeId`) REFERENCES `grade`(`gradeid`);
数据库的增、删、改、查 !!!(重点)
一、存储引擎(指定表的存储类型)
这里介绍常用的两种存储引擎,
**功能 | INnoDB------------ MYISAM |
---|---|
支持事务 | V ------------------- X |
支持全文索引 | X ------------------- V |
外键约束 | V ------------------- X |
表空间大小 | 较大 ------------------- 较小 |
数据行锁定 | V ------------------- X** |
create table `table` (...)engine=MYSIAM;
create table `table2`(...)engine=INNODB;
1、MYISAM 类型的表文件
.frm 表结构定义文件
.MYI 索引文件
.MYD 数据问价文件
2、INNODB 类型的表文件
.frm 表结构定义文件
.ibdatal 数据文件
1、往表里面插入单行数据:
#字段名和值要一一对应,类型要一致
# 表明 字段名
INSERT INTO `table` (`id`,`name`)
VALUES ( 10,'李四' );
2、往表里面插入多行数据:
# 表明 字段名
INSERT INTO `table` (`id`,`name`)
VALUES ( 10,'李四' ),
( 12,'李四1' ),
( 13,'李四2' ),
( 14,'李四3' );
3、更新数据记录
#将table 表里面id小于5的全部改为5
UPDATE `table` SET `id` =5
WHERE(`id`<5);
4、删除数据记录 注意!!
#(1、)使用delete删除数据
DELETE FROM `student` WHERE `studentname`='宝宝';
#2、使用TRUNCATE TABLE 删除数据(快)
TRUNCATE TABLE `student`
如果删除的行的主键值被其他表引用时,要先删除引用,不然会报错
注意:TRUNCATE删除时:
会删除表的所有行
但表的结构、列、约束、索引不会改变
不能用于有外键约束引用的表。
删除自增从1开始,
delete 删除不能删除自增
5、排序
rder by <排序的列名> desc(降序) asc(升序默认)
查询空值:( is null ) 或者 ( is not null)
6、常用的函数
#MYsql函数
#数学函数:
SELECT sign(-9);#获取数字的符号(正:1 负:-1 零 :0)
SELECT ceiling(9.8); #取当前数字>=当前数字的最小整数 10
SELECT floor(9.8);#取当前数字<=当前数字的最大整数 9
SELECT rand();#取0到1之间的随机数
SELECT rand(100);#根据种子值计算后的随机数字0~1
SELECT abs(-9);#绝对值
#字符串函数
SELECT char_length('你好');#字符串长度 2
SELECT substr('abcde',2,3);#截取字符串 (注意2不是下标,从第二个字符开始截取三个字符) bcd
SELECT left('abcd',3);#从左截取指定长度字符串 abc
SELECT right('abcd',3);#从左截取指定长度字符串 bcd
SELECT reverse('abcde');#反转字符串 edcba
SELECT insert('abcdeabc',2,4,'你');#替换字符串(从第二个字符串,替换4个) a你abc
SELECT REPLACE ('abcdeabc','ab','AB');#字符串替换 ABcdeAB
SELECT upper('Hello');#全部大写 HELLO
SELECT lower('Hello');#全部小写 hello
SELECT concat('a','b','你');#将多个字符串合并(拼接) ab你
#日期和时间函数
SELECT now();#获取当前日期和时间 2020-08-11 09:54:17
SELECT curdate();#获取当前日期(简写)2020-08-11
SELECT current_date(); #获取当前日期 2020-08-11
SELECT year(now());#取指定日期中的年份 2020
SELECT month(now()); 月(不同于java,不用加1)
SELECT day(now()); 日
SELECT hour(now()); 时
SELECT minute(now()); 分
SELECT second(now()); 秒
#系统信息函数
SELECT version();#获取MYSQL的版本 5.6.12
SELECT user();#获取当前登录用户信息 root@localhost
聚合函数
avg()
count() #返回某字段的总行数
max()
min()
sum()
7、LIMIT子句
#limit[位置偏移量(不写默认为0),行数(显示的行数)]
limit 4,6; #从第五条开始显示,一共显示6条
8、IN子查询
使用IN关键字可以使父查询配子查询返回的多个单字段值,
9、分组查询Group by
——>这里不写代码演示,后面结合一个总的数据库的全部查询