百度关于数据库的定义为:“数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。”
简单来说,数据库就是存储,维护和管理数据的集合。在计算机的学习中,数据库是将代码从小孩子过家家到能投入日常使用极为重要的过程,意味着程序不在自娱自乐,通过接入数据库,来使数据能与别人分享,交流和保存。
数据库分为非关系型数据库和关系型数据库,本文重点讲解 MySQL ,所以重点说明关系型数据库的三大范式。
关系型数据库:是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
上图好理解:
三大范式其实就是关系型数据库的三大基本规范,简单分为: 1. 无重复的列 2. 要求数据库表中的每个实例或行必须可以被唯一的区分(行不能重复) 3. 要求一个数据库表中不包含已在其他表中已包含的非关键字信息(简洁)
由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。所以学好MySQL是非常有效的接触数据库学习的途径。
官网下载 压缩包( .zip) 而非 ( .exe ) 记得注册Oracle账号
吐槽:不然以后删库跑路非常麻烦(bushi)
将 解压后的 文件夹bin 的路径装入path环境变量
在文件夹中新建 my.ini 配置文件
进行编辑
[mysqld] #设置3306接口 port = 3306 #设置mysqld 的安装目录 (这个每个人都不一样,以自己的安装路径为准) basedir = D:\Program Files\mysql #设置mysql数据库的数据存放目录(文件夹里可以没有,也不要自己新建) datadir = D:\Program Files\mysql\data #允许最大连接数 (防止服务器超载) max_connections = 200 #允许失败次数 (防止从主机攻击数据库系统) max_connect_errors = 10 #服务端使用的字符集默认为utf8 character-set-server = utf8 #创建新表时将使用的默认存储引擎 default-storage-engine = INNODB #默认使用“mysql_native_password” 插件认证 default_authentication_plugin = mysql_native_password [mysql] #设置mysql客户端默认字符集 default-charcater-set = utf8 [client] #客户端 port = 3306 default-charcater-set = utf8
安装mysql
在mysql安装目录下,打开bin文件夹,运行cmd窗口 (可以使用windows键+ r 打开)
执行指令:
mysqld --initialize --console
如果显示成功则安装成功,失败检查前置步骤
还要记住系统分配的密码, root@localhost:后的就是密码
无论多么奇怪,我的就是mAuyXXqV(0)c
安装服务
mysqld --install (服务名)(默认mysql,可自己定义) 还有其他指令: net start 服务名 启动服务 net start 服务名 关闭服务 mysql -u root -p 登入指令 Enter password:密码(输入) 修改账户密码 alter user 'root'@'localhost' identified with mysqld_native_password BY '密码'; quit 退出服务
卸载MySQL
以管理员身份运行cmd net stop mysql8(服务名)
删除mysql服务 sc delete mysql8
删除mysqlDB目录文件 mysqld remove mysqld8(my.ini的指定的目录)
允许 C(create) R(read)U(update)D(delete) 增删改查操作
--图1-1:sql语句与数据库关系
1.sql语句以;结尾 2.mysql关键字不区分大小写
数据定义语言,定义数据库对象
3.1.1 与数据库表有关操作
create database 数据库名; //创建 show databases; //查服务器所有数据库 alter database 数据库名 character set 编码方式; //修改编码方式 drop database 数据库名; select database(); //查看已连接数据库 use 数据库名; //连接数据库
3.1.2 DDL操作表(创建表)
create table 数据库名 ( 列名1 数据类型 [约束(可有可无)], 列名2 数据类型 [约束(可有可无)], 列名3 数据类型 [约束(可有可无)] (最后一列不打逗号)al ); 可用数据类型:int double char varchar text blob date time timetamp datetime
3.1.3 其他表操作
查: show tables; (所有表) desc 表名; (查表的字段信息) show create table 表名; (查看表格创建细节) 删: drop table 表名; (删表) 改: alter table 表名 add; 新列名 新数据类型 (新建列) alter table 表名 change; 旧列名 新列名 新数据类型 (修改列) alter table 表名 drop; 列名 (删除列) alter table 旧表名 rename; 新表名 (改表名)
数据操作语言,定义数据库记录数据,增,删,改,即对表中数据进行增,删,改操作
注意在mysql中,字符串类型和日期类型用单括号引起来
3.2.1 插入
insert into 表名(列名) values(数据值); eg: insert into stu(name,id) values('zhangSan',18);
注意:1.多列和多值用逗号隔开 2.列名与值一一对应 3.非数据的列值用单引号
4.同时添加多行用逗号隔开
存在将列名省略的添加数据的方式-》给所有的列添加数据(列值要按表中顺序)
3.2.2 修改
sql 中的运算符
1.算术运算符 : + - * / % 2.赋值运算符 : = 3.逻辑运算符 : and or not 4.关系运算符 : > < >= <= != = 所有数据查询语法: select *(这是表示所有列查询) from 表名 修改插入行的数据语法: update 表名 set 列名1=列值1, ... where 列名=值;
注意空值有两种情况,如果要where筛选需要用and连接两个条件
where 列名 is null and 列名=''
3.2.3 删除
删除一行存入数据的语法: delete from 表名 where 列名=值; 或 truncate table 表名;
两种语法的区别:
delete 删除数据,表结构还在,删除后数据仍可找回
truncate 删除是把表DROP掉,再创一个新表,数据无法找回,速度更快
用来定义访问权限和安全级别
3.3.1 创建用户
create user 用户名@指定ip identified by 密码; create user 用户名@客户端ip identified by 密码; 指定ip才能登录 create user 用户名@'%' identified by 密码; 任意ip也可
3.3.2 用户授权
1.授予 grant 权限1,权限2,...,权限n on 数据库名.* to '用户名'@'ip'; 给指定用户指定数据库指定数据库权限 grant all on *.* to '用户名'@'ip'; 给指定用户所有数据库所有数据库权限 2.查询 show grants for '用户名'@'ip'; 3.撤销 remove 权限1,权限2,...,权限n on 数据库名.* to '用户名'@'ip'; 语法几乎与授权一致 4.删除 drop user '用户名'@'ip';
用来查询记录(数据)返回虚拟表,不影响数据库数据
基础语法: select 列名 from 表名 where -> group by -> having -> order by
3.4.1 简单查询
查询所有列 select * from 表名;
查询部分列 select 部分列名 from 表名;
3.4.2 条件查询(where)
where 子句可以使用如下运算符及关键字
= != <>(不等于) < <= > >= between..and in(set) is null and or not
列名 in (列值1,列值2) in:在什么范围内,括号不能省,注意,只能使用字符串 not in (...) 不在范围内 between 20 and 40; 表示数值的中间,包含临界值,注意,只能使用数字 eg: select name from stu where name='zhangSan';
3.4.3 模糊查询
语法:
列名 like '表达式'; //表达式必须是字符串 通配符: _(下划线):任意一个字符 % : 任意0~n个字符 查询第二个字母为a的学生姓名: select name from stu where name like '_a%';
3.4.4 字段控制查询
去除(列的)重复数据:
1).select distinct 列名 from 表名;
2).select *,列名 + isfull(comn(列名),0)(这是一个聚合函数,表示将两列数据相加,并且把comn这一列的为null的值换为0) from 表名;
3).给列起别名(优化显示) select *,列名 + isfull(comn(列名),0) as(可用空格代替) 新名称 from 表名;
3.4.5 排序
语法: order by 列名 asc(默认,升序)/desc(降序)
select * from 表名 order by 列名1 desc,列名2 desc; (查询,按第一列排序,相同时,按第二列排序)
3.4.6 聚合函数(用来做纵向运算的函数)
count(列名):统计列不为null的记录数
sum(列名):统计列的总和
avg(列名): 统计列平均值
max(列名):最大 min(列名):最小
3.4.7 分组查询
若查询中有分组操作,则select后能添加的只能是聚合函数和被分组的列名
select 列名1,sum(列名2) from 表名 group by 列名1; 分组列名,聚合函数
3.4.8 Having子句
分组后的条件筛定
having 和 where 的区别
having 是在分组后对数据进行过滤,where是在分组前对数据进行过滤
having 后面可以使用分组函数(统计函数),where 后面不可以使用分组函数
3.4.9 limit
limit 用来限定查询结果的起始行及总行数
limit 开始下标,显示条数; //开始下标,从0开始
limit 显示条数; //默认从0开始
分页查询 pageIndex 页码值 pageSize 每页显示条数
limit (pageIndex - 1)*pageSize,pageSize; 变量替换
以上就是sql基础语句。