数据库的基础笔记

extent  插件开发的方法
掌握一门服务器端技术  就可以加分
工作中----更好做前端交互
MySQL
PHP
网络协议
---------------
web程序架构


客户端
PC端浏览器 + 移动端浏览器=====响应式
自动响应  页面 调整页面大小
其他终端  比如电影院 售票机器,提款机,智能电视
服务器端
企业级软件  JavaEES
互联网开发  PHP
NodeJS
数据仓库
关系型数据库
Oracle:  配合javaEE
MySQL:  MySQL
其他的改变不流行
非关系型数据库  NoSQL  Node.JS




如何部署
阿里云产品 使用多 
虚拟服务器
也有数据库文件


-------------------------------------------
专业机房 硬件组成
0.防火墙 硬件防火墙,阻止攻击
0-1.加密机  加密算法 加密规则(使用逻辑算法)


1.应用服务器 存放web应用
会添加防火墙  二者物理分离
2.数据服务器 数据库   
3.数据备份服务器  银行才会用(一天一备份)
4.应用备用服务器
5.文件服务器  硬盘空间大(磁盘阵列,随时扩展空间)

-----------
服务器 Server FTP (小型机  中型机 大型机  超级计算机  IBM芯片 很贵)
中国服务器,90% 全来自IBM
IBM 还卖操作系统  硬件不单卖  坑爹
Client_Server
软件服务器(也叫中间件)
FTP
WEB服务器
邮件服务器
SSH
DNS服务器
数据库服务器
软件架构
C/S Client/Serve
装软件才可以使用  大型游戏(最先出现) 短时间不会死掉
优点:稳定 对带宽要求低  体验更好 
缺点:占内存  升级非常麻烦(如何强制用户更新) ,银行手动升级 好烦
JavaEE  就是做B/S架构
天猫前端团队  实时互动效果非常好


B/S Browser/Server
网页软件  相当完善  带宽大
谷歌开发了一个操作系统  云端软件 感觉电脑以后就是个显示器(运算全在远端)
智能化以后UI界面  可能都是HTML了 就业范围广
移动端 也在向着B/S 发展  webAPP
优点: 升级简单  不占内存
缺点:浏览器 体验不够好
兼容问题  (最头痛问题)
-----------
如何访问服务器
1.网络协议   http https(前面有一个小锁,其实就是加密了)
加密协议被攻破 
2.访问地址(主机地址)  对应唯一IP地址
ping www.baidu.con  来自...的回复  返回IP地址
域名(也叫做虚拟地址)
3.端口号:默认为:80  端口 (不用指定)




如何使用
XAMMP操作
功能介绍
1.Apache 运行PHP  --Apache基金会
2.Tomcat  运行javaEE Apache  基金会(Apache 所有免费)
3.MySQL  -数据库产品  
来自于 Oracle的子公司 (甲骨文公司)  
养老公司  福利好,压力少 
不给中国人当上层领导 
------------
介绍3个  了解2个
  Apache 服务器操作
1.启动失败
原因--使用端口号,被占用 默认就是80口
解决方案:
config--->Broswer(Apache-->conf文件夹)---httpd.conf-->
找到58行   Listen 80   改一下不常见的端口号  8888最好
不要忘记保存


ports   443:8888  就是端口
访问Apache
http://127.0.0.1:8888/localhost  访问本机
G:\XAMPP\htdocs\index.html  在里面编辑文件
这是主页  index默认值
这叫本地访问
我想访问域名怎么办
D:\Windows\System32\drivers\etc\hosts 
不可以修改,你就替换呗  
配置顶级域名
www.jkj.com:8888  端口号不是80 就必须写
本地就可以使用了,美滋滋


======================================
MySQL 
3306端口 启动起来了
默认使用3306端口号  ,比建议更改
如何访问
1.命令行 可以不依赖Apache服务器
cmd
问题 :提示不是内部命令 
原因: mysql 的环境变量没有配置
MySQL config Browser
G:\xampp\mysql\bin
如果还不行  怎么办
(MariaDB和MySQL)  

登录数据库 命令
mysql -uroot -p  
默认没有密码,直接回车

show databases;   //注意 ";"不可以少

-------------------------------------------
2.图形化界面   必须使用Apache服务器
点击admin  
http://localhost:8888/phpmyadmin/  
这里端口号必须修改,,你修改端口号了呀
界面介绍
左边 罗列现有数据库名称  
工具栏
常规设置 设置编码  数据库utf8 没有"-"
数据库服务器
网站服务器
提示用户密码为空  问题不大


--------------
扩展PHP
LAMP
Linux Apache MySQL PHP 目前比较经典(PHP 拍黄片)
全是免费开源的,省钱
facebook 使用 MySQL集群  666


上午内容结束


下午课程开始------------------


数据库的基本操作
什么是数据库?  存储,读取数据的空间
1.关系型数据库
二维关系 有行,列确定位置(类似 表格数组)  数据表
大数据,云计算 忽悠小白的(技术早就存在)
私有云(局域网),公有云(互联网)
DBA DatabaseAdmin 高级认证(非常贵,一家公司请不起)
DB2  Oracle MySQL SQLServer

2.非关系型数据库  NoSQL
非常火
NoSQL  反关系数据库运动  演变而来

SQL语言,是所有数据库的基础
四种  SQL92 标准(比较老了)
DDL   defined 定义
DCL contral 控制
DML 操作
DQL 查询


增,删,改,查   这是核心
---------
数据库
数据表(有好几个)
行---记录
列---字段  
数据操作
创建数据库
语法
create database 数据库名称; (关键字建议大写)
规范化编码风格


---------------------------
编码 中文
utf8_general_ci  排序规则


DDL


ceate datebase 数据库名称 character  set utf8;
问题:数据库已存在 报错#1007 
解决方案:
ceate datebase if not exists 数据库名称  character  set utf8;
放在命令行中出问题了  解决方案如下
http://www.linuxidc.com/Linux/2013-05/85162.htm
数据库名称不可以是全数字  
查看数据库
show databases;
注意";"是必须的  
在命令行必须(他以为你没写完呢)  图形化界面是可以不写的

修改数据库
alter datebase 数据库名称 character  set utf8;
删除某列
使用 drop column 
alter table synclogs_backup drop column Synclogs_id;
添加列 add
alter table synclogs_backup add   Synclogs_id nvarchar(36)  


null;



删除数据库
drop datebase 数据库名称;
drop if exists datebase 数据库名称;
1008 错误  数据库不存在

切换数据库(命令行操作会使用)
use 数据库名称 ;  //表示操作哪一个


==========================
数据表操作
创建数据表


create table 表名称 (
字段名称  数据类型,
字段名称  数据类型,
.....
);
数据表数据类型:
数值  Number
int--整型
float/double--浮点型
decimal  --严格定义(最后得到准确值)
感觉跟C语言差不多
............
日期加时间类型Data
year 
time
常用后两种
date     日期
datatime 日期时间
timestamp 时间戳(精确到毫秒) 唯一性
字符串类型String
char --长度固定字符串;
varchar--长度可变的字符串;(使用多,尽量大一点);




-------------------------|
在JS中 |
正无穷-正无穷====正无穷   |
正无穷+负无穷====不知道   |
JS使用10进制              
及进制运算  都给10进制 |
---------------------- |
================================================================
约束(完整性约束)
主键约束,唯一不可重复
primary key
主键自增约束
auto_increment
P_Id int NOT NULL AUTO_INCREMENT,  (约束条件使用空格隔开就好)
案例
create table jkj_user(
userid  INT primary key auto_increment,         //标识 唯一  不可重复
username varchar(50),
pwd varchar(50),
age INT,
email varchar(100)            //100个字节
);
约束种类
mysql含有6种约束条件: [Oracle同mysql]-----我感觉就是列级约束,都是在字段


后面加的
主键约束 唯一约束 检查性约束 非空约束 默认约束 外键约束
1.主键约束:---非空且唯一
格式: 字段名 字段类型 primary key
条件: 通常要求主键字段为非必须字段,只是作为数据的标识
类型: 普通主键[主键由一个字段组成]  复合主键[主键由2个或多个字段组成] 
作用: 使用主键约束的字段,字段的值非空且唯一.
2.唯一约束:
格式: 字段名 字段类型 unique 
作用; 使用唯一约束的字段,字段值必须唯一,不能重复.
id int primary key,
name varchar(20) unique,
3.检查性约束:---这个在SQLsever  好像不管用
格式: 字段名 字段类型 check(条件)
作用: 使用检查性约束的字段,字段值必须满足指定的条件.
说明: mysql中含有检查性约束,但是不强制执行.[Oracle中强制执行]
4.默认约束:
格式: 字段名 字段类型 default 默认值;
作用: 使用默认约束的字段,当字段没有被赋值时,系统自动赋予该字段默认值
sex char(2) default '男',
5.非空约束;
格式: 字段名 字段类型 not null
作用; 使用该约束的字段,在添加或修改数据时,字段必须被赋值.
6.这个比较难,外键约束
alter table 从表名 add foreign key (外键字段名) reference 主表明(被引


用字段);


创建的时候就约束
create table 表(
字段名:字段类型
字段名:..
foreign key (外键字段名) references 主表名 (被引用字段)


)
问题:
一个表中可以含有几个约束?
N个


一个字段可以含有几个约束?
N个  格式: 字段名 字段类型 约束1 约束2 ....
name varchar(20) unique not null


一个表中可以含有几个主键?
一个表中可以含有0或1个主键


================================================================


删除数据表
drop table  表名称

删除数据表:
drop table 表名;
drop table if exists 表名; // if exists 这个只是 SQLSever 的


语句


删除数据库:
drop database 数据库实例名;
drop database if exists 数据库实例名;

修改数据表
alter  table 表名称 其他语句;
alter table 表名 add/(drop column) id

不做,删了重写
查看数据表(使用比较少)
show tables;
show databases;

show 表名;
DESC 表名称;  --描述 discription 

-------------------------------------------
DML 数据操作语言
增删改查
新增 (插入)
insert into 表名 values(所有字段值)
主键自增,写成null
insert into student(name,sex,age,address) values("王五","男",22,"大同


");//括号是重点
扩展
union all 是sql内置关键字,表示合并结果集。(个人感觉这种方法比较好)
多条数据合并为一个结果集之后,再插入。




批量添加的方法
insert into student 
select 4,'王老五','女',60,7,'吃',9 union all
select 4,'王老五','女',60,7,'吃',9 union all
select 4,'王老五','女',60,7,'吃',9 union all
select 4,'王老五','女',60,7,'吃',9 union all
select 4,'王老五','女',60,7,'吃',9 union all
select 4,'王老五','女',60,7,'吃',9 


使用 insert int 表名 values()  只可以添加  一条数据,不好使 



-------------------------
案例
insert into jkj_user values(
NULL,'张无忌',
'123456',
'18',
'[email protected]'
);
------------
insert into 表名(字段名1,字段名2..) values 
(字段值1,字段值2...)  //一一对应


单引号 表示字符串


修改(更新)
update 表名 set 字段名=新的字段值;
update 表名 set 字段名=值,字段名=值,... [where 条件]  
修改所有记录
解决方案
update 表名 set 字段名=新的字段值 where 字段名=字段值;
where 表示条件  id is null  (注意这里不可以是 '=')


删除
delete from 表名; 
不测试 ,默认全部删除
解决
delete from 表名 where  条件;
注意,
开发不适用,删除就没了
物理删除--基本不用
解决
逻辑删除
state字段表示数据状态
0--删除状态
1--正常状态
-------------------------------
DQL 查询
select * form 表名 
*匹配所有字段,记录
select 字段名1,字段名1.. form 表名
自定义查询范围(指定字段查询)
select username form jkj_user 




select 2*2  select还可以做运算的

select * form 表名 where userid=1(条件查询)
条件查询
运算符
!==或<>  不等于
=,<,>
<=
>=
is null 某字段值为空(null  不可以使用'=')
is not null 不为空


空字符串不是null
and  --&&
or --||
not ==!
between and  位于两值之间(包含 边界的)  使用>= 和<= 来表示
in(值1,值2)          字段=值1||字段等于值二  in表示多个值
------------------------
排序查询的实现
语法 
select * 表名 order by  age(字段)[ASC/DESC]
默认了从小到大排序,正序排列 (ASC)
倒序 --DESC



模糊查询
like
where email like '%@qq.com';   %任意值   _ 匹配一个值
select from * form 表名 where email like '%@qq.com';

Limite(MySQL方言  就这个数据库好使)
limite
select from * form 表名 limite [位置偏移量,]行数
从 偏移量开始,取出几行
默认从0行开始数...

论坛帖子 有页码  分页效果  Limite实现




==========第一天结束============




数据库的补充---华仔的上课笔记
mysql软件实际可以看做一个粮食公司,进入公司需要门口验证身份: 登陆数据库.
进入粮食公司后,需要查看有哪些仓库: 查看数据库实例
mysql软件正常情况下,默认含有四个数据库实例: 
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | //存放的是mysql软件的配置
| mysql              | //存放的是账号和密码等信息.
| performance_schema | //存放的是mysql软件的配置
| test               | //默认什么也没有,但是该数据库实例时系统自带,隐含附加其他


信息.
+--------------------+ 


注意: 虽然test不含任何表,但是不能删除. 否则在后面的JDBC中,将无法操作.


数据通常是以表的格式存放[粮食通常存放袋子里]








登陆数据库:
mysql -u账号 -p密码
扩展: mysql -h192.168.1.166 -uroot -p123123;
h:host  就是访问外部设备而已...




注意: 通常u与p后面不能有空格,否则空格将作为数据的一部分.


查看数据库实例: show databases;


选取操作的数据库实例: use 数据库实例名;


查看数据库实例中含有哪些表格: show tables;


查询表格数据: select 字段名1,字段名2,..  from 表名;


更改密码:
set password=password('新密码');




show tables ;


需要使用管理员权限才可以(而且要写在DOS里,不是mysql里)
net start mysql
net stop mysql




desc User;  排序命令   ,降序排列
ASC User




\c   之前写的不算数
\s   查找信息--这个最长使用了
\h  就是  help  里面啥子都有---就不列举了






小案例
create database mydb;
create table t1(
id int,
name varchar(20),
sex char(2),
age int,
address varchar(30)
);


mysql> desc t1;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| sex     | char(2)     | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| address | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+


insert into t1 values(1,'张三','男',23,'大同');
insert into t1(name,sex) values('李四','女');


update t1 set age=22;
update t1 set id=2,address='北京' where sex='女';

猜你喜欢

转载自blog.csdn.net/wojiushiwo577785/article/details/78998008