数据库知识_01
Posted jsnote
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库知识_01相关的知识,希望对你有一定的参考价值。
1.什么是数据库?
数据库就是一个文件系统,只不过我们需要通过命令行(SQL)来操作这个文件系统
2.常见数据库:
mysql:开源免费的适用于中小型企业的免费数据库
mariadb:由mysql创始人搞出来的,直接是mysql开源版本的一个分支,基本上所有的命令都是一样的
oracle:商业软件,收费软件,适用于大型电商网站,收购了sun公司
db2:IBM公司,thinkpad,解决方案:软件和硬件,服务器架构,银行系统大多采用db2
sqlserver:windows里面,政府网站asp.net,并且大学教学通常都是采用SQLserver。图形化工具做的不错
sybase:被淘汰的
NOSQL非关系型数据库:key--value
mongodb:
redis:set get
3.关系型数据库:
主要用来描述实体与实体之间的关系,
实实在在存在的事物:男生与女生 学生和班级 员工和部门
E-R关系图:要求必须得会画
实体:方框
属性:椭圆
关系:菱形
4.MYSQL数据库服务器
MYSQL数据库:数据库管理软件
服务器:就是一台电脑,这台安装相关的服务器软件,这些软件会监听不同的端口号,根据用户访问的端口号,提供不同的服务
5.MYSQL的安装和卸载
卸载:
打开控制面板,删除软件
删除mysql安装目录的所有文件C:Program FileMySQL
删除mysql数据存放文件:C:ProgramDataMySQL
安装:
运行安装程序:在启动配置教程之前,一路下一步,没有下一步的话就直接finish
第一次finish之后启动服务器配置教程
第一个incluce mysql bin directory to windows path
第二个:端口号不要去修改,字符集要选UTF-8,密码不要忘记了
附件(重置root密码):
方法一:
在my.ini的[mysqld]字段加入:
skip-grant-tables
重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysqlmysql>use mysql; mysql>更新 update user set password=password(‘新密码‘) WHERE User=‘root‘;mysql>flush privileges; 运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。
方法二:
不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码
停止mysql服务
打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables
后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。
按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行
的话可以结束掉对应进程来关闭。
启动mysql服务
6.MYSQL的SQL语句
SQL:Structure Query Language结构化查询语言
DDL:数据定义语言:定义数据库;数据表他们的结构:create(创建) drop(删除)alter(修改)
DML:数据操纵语言:主要是用来操作数据 insert(插入) delete(删除)update(修改)
DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
DQL:数据查询语言:select(查询) from字句 where字句
7.数据库的CRUD的操作
首先要登录数据库服务器:mysql -u用户名 -p密码
创建数据库:
create database 数据库的名字:create database day06;
创建数据库数据库的时候,指定字符集:
create database 数据库的名字 character set utf8;
eg:create database day06_1 character set utf8;
create database 数据库的名字 character set 字符集 collate 校对规则;
eg:create database day_02 character set utf8 collate utf8_bin;
查看数据库:、
查看所有数据库:
show databases;
information_schema
performance_schema
mysql(这三个数据库不要动)
查看数据库定义的语句:
show create database 数据库名字
eg:show create database day06;
eg:show create database day06_2;
修改数据库的操作:
修改数据库的字符集:
alter database 数据库的名字 character set 字符集
alter database day06_1 character set gbk;
删除数据库:
drop database 数据库名字;
drop database day06_02;
drop database test;
其他数据库操作命令:
切换数据库(选中数据库):
use 数据库名字;
use day06;
查看一下当前正在使用的数据库:
select database();
8.表的CRUD操作
创建表:
create database 数据库名字
create table 表名(
列名 列的类型(长度) 约束,
列名2 列的类型(长度) 约束
);
列的类型:
java sql
int int
char/String char/varchar
char:固定长度
char(3): 一 一空格空格
varchar(3): 一 一
长度代表的是字符的个数。另外提一下:utf8下汉字是3个字节
double double
float float
boolean boolean
date date:YYYY-MM-DD
time:hh-mm-ss
datetime:YYYY-MM-DD hh:mm:ss 默认值 是null
timestamp:YYYY-MM-DD hh:mm:ss 默认使用当前时间
text:主要是用来存放文本
blob:存放的是二进制
列的约束:
主键约束:primary key
唯一约束:unique
非空约束:not null
创建表:
1.分析实体:学生
2.学生ID
3.姓名
4.性别
5.年龄
create table student(
sid int primary key,
sname varchar(31),
sex int,
age int
);
查看表:
查看所有的表:show tables;
查看表的定义:show create table student;
查看表的结构:desc student;
修改表:
添加列(add):alter table 表名 add 列名 列的类型 列的约束
alter table student add chengji int not null;
修改列(modify):alter table student modify sex varchar(2);
修改列名(change):alter table student change sex gender varchar(2);
删除列(drop):alter table student drop chengji;
修改表名(rename):rename table student to heima;
修改表的字符集:alter table heima character set gbk;
删除表:
drop table heima;
9.Sql完成对表中数据的CRUD的操作
插入数据:insert into 表名(列名1,列名2,列名3) valus(值1,值2,值3);
eg:insert into student(sid,sname,sex,age)values(1,’张三‘,1,23);
简单写法(如果插入的是全列名的数据,表后面的列明可以省略):insert into student values(2,’张三‘,1,23);
注意:如果是插入部分列的话,列明不能省略
insert into student(sid,sname) values(3,’lisi‘);
nsert into student values(3,’lisi‘);//这种写法是错误的
批量插入:
insert into student values
(4,’张三‘,1,23),
(5,’张三‘,1,23),
(6,’张三‘,1,23),
(7,’张三‘,1,23),
(8,’张三‘,1,23);
单条插入和批量插入的效率:
插三条数据
查看表中数据:select*from student;
删除记录:delete from 表名 [where 条件]
delete from student where sid=10;
delete from student;如果没有指定条件会将表中数据一条一条全部删掉
更新表记录:
update 表名 set 列名=列的值,列名2=列的值2 [where 条件]
将sid为5的名字改为李四
如果参数是字符串,日期要加单引号
update student set sname=’李四‘ where sid=5;
update student set sname=’李四‘ ,set=0;(会将表中所有数据都修改)
查询记录:
select [distinct] [*] [列名,列名2] from 表名 [where 条件]
distinct:去除重复数据
select:选择显示那些列的内容
--商品分类:手机数码,鞋靴箱包
1.分类的ID
2.分类名称
3.分类描述
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);
insert into category values(null,’手机数码‘,‘电子厂品,黑马生产’);
insert into category values(null,’鞋靴箱包‘,’江南皮革厂,倾情打造‘);
insert into category values(null,’香烟酒水’,‘黄鹤楼,茅台,二锅头’);
insert into category values(null,‘酸奶饼干’,‘哇哈哈,蒙牛酸酸乳’);
insert into category values(null,‘馋嘴零食’,‘瓜子花生,八宝粥,辣条’);
select*from category;//表中所有数据
select cname,desc fromcategory;//查看表中指定列的数据
--所有商品
1.商品ID
2.商品名称
3.商品价格
4.生产日期
5.商品分类ID
商品和商品分类:所属关系
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp,
cno int
);
insert into product values(null,‘小米mix4’,998,null,1);
insert into product values(null,‘锤子’,2888,null,1);
insert into product values(null,‘阿迪王’,99,null,2);
insert into product values(null,‘老村长’,88,null,3);
insert into product values(null,‘劲酒’,35,null,3);
insert into product values(null,‘小熊饼干’,1,null,4);
insert into product values(null,‘卫龙辣条’,1,null,5);
insert into product values(null,‘旺旺大饼’,1,null,5);
--简单查询:
--查询所有的商品:select*from product;
--查询商品名称和商品价格:select pname,price from product;
--别名查询,as的关键字,as关键字是可以省略的
--表别名:select p.pname,p.price from product p;(主要是用在多表查询);
select p.pname,p.price from product as p;
--列别名:select pname as 商品名称,price as 商品价格 from product;
select pname as 商品名称,price as 商品价格 from product ;
省略as关键字
select pname 商品名称,price 商品价格 from product ;
--去掉重复的值
--查询商品所有的价格
select price from product;
select distinct price from product;
--select运算查询:仅仅在查询结果上做了运算,数据没变 + - * /
select *,price*1.5 from product;
select *,price*1.5 as 折后价 from product;
select *,price*0.8 from product;
--条件查询[where关键字]
指定条件,确定要操作的记录
--查询商品价格>60元的所有商品信息
select*from product where price>60;
--where 后的条件写法
--关系运算符:> >= < <= = != <>
<>:不等于(标准SQL语法)
!=:不等于(非标准SQL语法)
--查询商品的价格不等于88的所有商品
select*from product where price<>88;
select*from product where price!=88;
--查询商品的价格在10到100之间
select*from product where 10<price and price<100;
between..and..
select*from product where price between 10 and 100;
--逻辑运算:and , or, not
--查询商品价格小于100或者商品价格大于900
select *from product where price<100 or price>900;
--like:模糊查询
_:代表的是一个字符
%:代表的是多个字符
--查询出名字中带有饼的所有商品 %饼%
select *from product where pname like ‘%饼%‘;
--查询第二个名字是熊的所有商品 ’-熊%‘
select*from product where pname like ’_熊%‘;
--in在某个范围中获得值
--查询出商品分类ID在1,4,5里面的所有商品
select *from product where cno in(1,4,5);
--排序查询:order by 关键字
asc:ascend升序(默认的排序方式)
desc:descend降序
--0.查询所有商品,按照价格进行排序
select*from product order by price;
--1.查询所有的商品,按价格进行降序排序(asc-升序 desc-降序);
select *from product order by price desc;
--2,查询名称有 小 的商品,按价格升序排序
1.查询名称有 小· 的商品;
select*from product where pname like ’‘%小%;
2.进行排序得出结果
select*from product where pname like ’%小%‘ order by price asc;
--聚合函数:
sum():求和
avg():求平均值
count():统计数量
max():最大值
min():最小值
--1.获得所有商品价格总和:
select sum(price) from product;
--2.获得所有商品的平均价格:
select avg(price) from product;
--3.获得所有商品的个数;
select count(*) from product;
--注意:where条件后面不能接聚合函数
--查出商品价格大于平均价格的所有商品
查出所有商品;select*from product;
大于
平均价格
--子查询
select*from product where price >(select avg(price)from product);
--分组:group by
--1.根据cno字段分组,分组后统计商品的个数
select cno,count(*) from product group by cno;
--2.根据cno分组,分组统计每组商品的平均价格,并且商品价格>60
select cno,avg(price) from product group by cno having avg(price)>60;;
--having关键字 可以接聚合函数的 出现分组之后
--where关键字 它是不可以接聚合函数的,出现在分组之前
--编写顺序
--S..F..W..G..H..O
select...from...where...group by..having..order by
--执行顺序
F..W..G..H..S..O
from...where...group...having...select...order by
以上是关于数据库知识_01的主要内容,如果未能解决你的问题,请参考以下文章
项目一众筹网05_01_[树形结构开发]菜单维护-树形结构基础知识自关联zTree的介绍和使用如果可以尽量不要嵌套循环时间复杂度和空间复杂度的区别