Products
GG网络技术分享 2025-03-18 16:13 0
01.数据库介绍_什么是数据库:
1).字面解释:存储数据的仓库。它是一个软件,底层存储数据仍然是使用\"文件系统\"。只是它底层存储数据采用了\"索引页\"的方式,它类似于
字典的\"目录\",可以很快的在大量数据中快速的定位到我们要查询的数据。所以在需要存储大量数据的情况下,我们需要\"数据库软件\"来存储
数据。
02.数据库介绍_什么是数据库管理系统:
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件。
广义上讲:任何的基于数据库的信息管理系统都称为:DBMS。
狭义上讲:它也指MySQL内部的一个小软件,用于接收用户的请求,并查询数据。
03.数据库介绍_常见的数据库软件:
1).MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
2).Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
3).DB2:IBM公司的数据库产品,收费的。常应用在银行系统中.
4).SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
5).SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
6).SQLite: 嵌入式的小型数据库,应用在手机端。
常用数据库:MYSQL,Oracle.
04.数据库介绍_数据库的内部逻辑结构:
数据库软件:
|--逻辑数据库
|--表
|--列(预先定义)
|--行(存储数据)
|--逻辑数据库
....
05.MySQL数据库_安装:
参考\"安装文档\"
06.MySQL数据库_登录MySQL数据库:
1).安装后要确保MySQL正在运行;
我的电脑(计算机)-->右键-->管理-->服务和应用程序-->服务-->MySQL,要确保\"状态\"是\"正在运行\"。
2).登录MySQL:
1).启动命令行:win键 + R -->启动\"运行\"对话框-->输入\"cmd\"(回车)
2).输入命令:
1)方式一(连接本机MySQL):C:\\>mysql -uroot -p你的密码(回车)
2)方式二(连接网络MySQL):C:\\>mysql --host=MYSQL的IP地址 --user=root --password=你的密码
例如:C:\\>mysql --host=127.0.0.1 --user=root --password=123(回车)
07.MySQL数据库_SQL概述:
1).什么是SQL:结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。它是操作数据库软件,
用于增删改查数据时所使用的专门的语言。各种数据库软件都要遵守这套规范,也都要支持这套语言。
普通话:所有数据库软件都支持的标准SQL语句。
方言:某种数据库软件内部提供了独有的操作数据的语句。
2).SQL语言的分类:
1).数据定义语言:DDL
用于对\"逻辑数据库\"和\"表\"以及\"列\"等元素进行操作的SQL语句。常用的语句:create(创建)、alter(修改)、drop(删除)
2).数据控制语言:DCL[不涉及]
用来定义数据库的访问权限和安全级别,及创建用户
3).数据操作语言:DML【重点掌握】
用于对\"数据\"进行添加(insert into)、修改(update)、删除(delete)操作的。
4).数据查询语言:DQL【重中之重】
用于对\"数据\"进行查询(select ... from ... where ...) 操作的。
3).SQL的通用语法:
1).SQL语句可以单行或多行书写,以分号结尾(在命令行状态下)
2).可使用空格和缩进来增强语句的可读性。
3).MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。
08.MySQL数据库_DDL语句_数据库操作的相关语句:
1).创建数据库:
1).create database 数据库名;
2).create database 数据库名 character set 字符集;
2).查看当前数据库中的所有逻辑数据库:
show databases;
3).查看某个数据库的定义的信息:
show create database 数据库名;
4).删除数据库
drop database 数据库名称;
5).切换数据库
use 数据库名;
6).查看当前在哪个逻辑数据库下工作:
select database();
09.MySQL数据库_DDL语句_表操作的相关语句:
1).创建表:
create table 表名(
列名1 数据类型(长度)[约束],
列名2 数据类型(长度)[约束],
列名3 数据类型(长度)[约束],
...... ,
列名n 数据类型(长度)[约束]
)
例如:创建一个学员信息表:id,姓名,性别,年龄
create table student(
idint,
namevarchar(100),
sexchar(2),
ageint
);
2).查看数据库中的所有表:
show tables;
3).查看表结构:
desc 表名;
4).删除表:
drop table 表名;
5).修改表:
1).alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
#1,为分类表添加一个新的字段为 分类描述 varchar(20)
ALTER TABLE category ADD `desc` VARCHAR(20)
2).alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
3).alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
#3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
ALTER TABLE category CHANGE `desc` description VARCHAR(30);
4).alter table 表名 drop 列名;
作用:修改表删除列.
例如:
#4, 删除分类表中description这列
ALTER TABLE category DROP description;
5).rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 为分类表category 改名成 category2
RENAME TABLE category TO category2;
6).alter table 表名 character set 字符集(了解);
作用:修改表的字符集
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
10.MySQL数据库_DDL语句_关于数据类型【重点掌握】:
Java数据类型 MySQL的数据类型
------------------------------------------------------------
整数: 整数:
int int
小数:
float float
double double
decimal(m,d):m:指数字的总位数(包括小数部分),d:指小数部分
布尔:
boolean(true/false) int(1/0)
字符:
char char(1)
日期:
String datetimeYYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
Date
字符串:
String char/varchar
注:char和varchar在MySQL都代表\"字符串\"
1).char是\"定长字符串\":例如:设置字段为:char(5),表示:存储的数据最多为5个字符,如果不足5个字符,填充空字符。
存储:\"abc\"-->硬盘上-->\"abc \"
存储:\"ab\" -->硬盘上-->\"ab \"
存储:\"abcedf\" --> 硬盘上-->\"abced\"
2).varchar是\"不定长字符串\":例如:设置字段为:varchar(5),表示:存储的数据最多为5个字符,不足5个字符就存储实际的字符数,不填充空字符;
存储:\"abc\"-->硬盘上-->\"abc\"
存储:\"ab\" -->硬盘上-->\"ab\"
存储:\"abcdef\" -->硬盘上-->\"abcde\"
怎样选择:char的查询效率要高于varchar
1).对于所有记录的数据平均长度相同,或者长度相差不大的数据,可以优先选择使用:char
例如:性别、手机号码、银行卡号、身份证号....
2).对于所有记录的数据平均长度相差很大,可以选择使用:varchar--节省空间,但牺牲了一些查询效率
例如:地址、爱好、个人简介.....
大文本(超过65535个字符):
StringText
字符串的二进制:
byte[]Binary
二进制数据(视频、图片)
byte[]BLOB
11.MySQL数据库_DDL语句_关于数据类型的长度【重点掌握】:
1).char和varchar的长度:
例如:char(5),varchar(5)
这个长度5,都是指的最多5个字符(英文或者中文字符)。
2).整数的长度:要结合zerofill命令一起使用
例如:int(4) ZEROFILL
表示:最少的可见数字的位数是4位,不足4位前面填充0,如果多于4位就存储实际的数字。
3).浮点数的长度:
float(m,d)
double(m,d)
decimal(m,d)
m:表示数字的总长度(包括小数部分)
d:表示小数部分的长度。
12.MySQL数据库_DML语句数据操作语言【重点掌握--今天必须要熟练掌握】:
注意:命令行临时更改数据库的编码方式(只对当前的命令行窗口有效):
set names gbk;
1).添加数据:insert into
A).insert into 表名 values(值1,值2,...,值n);
例如:
insert into student values(1,\'刘德华\',\'男\',20);
说明:
1).\"值列表\"中\"值\"的数量必须和表中实际的\"字段数量\"要匹配;
2).不填的字段可以使用:NULL(状态)填充。
3).对于\"字符串类型\"的值,必须使用一对\"单引号\"或者一对\"双引号\"括起来,
对于\"数值\"的值,可以不用单引号或者双引号括起来。
B).insert into 表名(字段1,字段2,....,字段n) values(值1,值2,...,值n);
例如:
insert into student(id,name) values(4,\'周星星\');
说明:
1).\"字段列表\"中出现的\"字段\"可以是表中的部分字段。
2).\"字段列表\"中出现的\"字段\"可以不按照表中字段的定义顺序出现。
3).\"值列表\"中的值的数量、顺序、数据类型和前面\"字段列表\"中的\"字段\"的数量、顺序、数据类型要一致;
怎么选择:
1).如果要添加全部或者大部分字段的值,使用第一种,少部分列填充null即可。
2).如果要添加少部分字段的值,使用第二种。其它大部分字段都填充null。
2).修改数据:update 表名 set 字段1 = 新值 , 字段2 = 新值 , ... , 字段n = 新值 where 条件
例如:修改\"刘德华\"的年龄为20:
update student set age = 20 where name = \'刘德华\';
修改所有\"男\"明星的年龄为30
update student set age = 30 where sex = \'男\';
修改id= 1的记录的name = \"周润发\' , age = 35,sex = \'男\'
update student set name = \'周润发\' , age = 35 , sex = \'男\' where id = 1;
3).删除数据:delete from 表名 where 条件;
例如:删除\"刘亦菲\"
delete from student where name = \'刘亦菲\';
删除所有的男明星
delete from student where sex = \'男\';
4).查询
13.MySQL数据库_约束:
1).什么是约束:\"约束\"是MySQL中一个\"独立的管理对象\",一个\"约束\"描述了一个表中某列的数据的一些规则要求,并且要求\"数据库软件\"为我们监控这些数据,如果有违反规则的数据试图进入数据库,数据库软件将会为我们拦截这种数据。这样我们可以保证数据的安全性。
2).都有哪些约束:
1).主键约束:
1).什么是主键:在表中作为\"唯一标识一行数据的字段\",这种字段就叫:主键。
主键字段的值的特点:不能重复,非空。
建议:
1).任何表都要包含一个主键字段;
2).这个主键字段不能有任何\"业务意义\";因为只要有业务意义,就可能会被更改,更改时如果这个值被其它表引用,那将会是十分麻烦的事情。
2).一个表只能有一个\"主键\";
但一个主键可以由\"一个字段[常用]\"或者\"多个字段(复合主键、联合主键)\"组成;
一个字段做主键:
id(主键)nameage
1刘亦菲20
2柳岩18
3周星星22
多个字段做一个联合主键:
name(主键)age(主键)sex
张三20男
李四20男
张三22男
张三20女//不能添加
3).定义主键约束:
方式一:
create table student(
id int primary key,//主键约束--唯一、非空
name varchar(100),
age int,
sex char(2)
)
4).删除主键约束:
alter table 表名 drop primary key;
2).自动增长(MYSQL特有的):
1).什么是自动增长:对于主键字段,我们经常使用int类型,如果我们自己维护这个值,长时间下来会非常困难。
所以,MySQL提供了一种机制:自动增长。它可以从某个基数开始,每填一条记录会自动增长1,我们就可以直接使用这个值。
2).设置自动增长:
方式一:
create table student(
id int primary key auto_increment,//主键,自动增长
name varchar(100)
)
添加时:
insert into student values(null,\'柳岩\',22);
3).自动增长列只能应用在\"数值类型\",不能应用在\"字符串\"类型上。
4).自动增长不是必须用在\"主键字段\"上,但一般常用在\"主键字段\"上。一个表中只能有一个自动增长字段。
5).删除自动在增长:
alter table 表名 modify 列名 数据类型(长度) [后面不出现auto_increment即可]
3).非空约束:
1).可以约束某个字段的值:不接受NULL(状态)
2).设置非空约束:
方式一:
create table student(
id int primary key auto_increment,
name varchar(100) not null
)
如果再添加数据:
insert into student(null,null);//报错:第二个字段不能为null
insert into student(null,\'\');//OK的,添加是\"空字符串\"
3).一个表中,可以同时有多个字段设置\"非空约束\"。
4).删除非空约束:
alter table 表名 modify 列名 数据类型(长度) ;
4).唯一约束:
1).可以约束某个字段的值:唯一,不重复(但允许有NULL状态,而且允许有多个NULL状态)
2).设置唯一约束:
方式一:
create table student(
id int primary key auto_increment,
name varchar(100) unique //唯一约束
)
添加时:
第一条记录:
insert into student values(null,\'柳岩\');
第二条记录:
insert into student values(null,\'柳岩\');//报错
3).删除唯一约束:
ALTER TABLE 表名 DROP INDEX 字段名;
例如:
alter table student drop index name;
5).外键约束:
14.MySQL数据库_重置密码:
步骤:
1).停止mysql服务器 运行输入services.msc 停止mysql服务
2).在cmd下,输入mysqld --console --skip-grant-tables 启动服务器,出现一下页面,不要关闭该窗口
3).新打开cmd,输入mysql -uroot 不需要密码
4).修改新密码:
use mysql;
update user set password=password(\'新密码\') WHERE User=\'root\';
5).关闭两个cmd窗口
6).重新启动MYSQL服务,并在cmd中登录;
昨天发现WHMCS西数、景安虚拟主机模块手动续费后不更新时间,原本在写这两个模块时,在续费后会通过API取得主机到期时间,并更新WHMCS数据库。
查看官方文档才得知WHMCS 6.0已经废弃了以下数据库操作函数:
新的版本中使用了Laravel 5.2框架的数据库组件,所以,对数据库的操作可以参考Laravel框架官方文档。
在WHMCS中,使用方法如下:
use Illuminate\\\\Database\\\\Capsule\\\\Manager as Capsule;foreach (Capsule::table(\\\'tblclients\\\')->get() as $client) { echo $client->firstname . PHP_EOL;}try { $updatedUserCount = Capsule::table(\\\'tblclients\\\') ->where(\\\'firstname\\\', \\\'John\\\') ->where(\\\'lastname\\\', \\\'Deo\\\') ->update( [ \\\'lastname\\\' => \\\'Doe\\\', ] ); echo \\\"Fixed {$updatedUserCount} misspelled last names.\\\";} catch (\\\\Exception $e) { echo \\\"I couldn\\\'t update client names. {$e->getMessage()}\\\";}
在我的模块中,主要是更新主机到期时间,代码如下:
Capsule::table(\\\'tblhosting\\\')->where(\\\'id\\\', $params[\\\'serviceid\\\'])->where(\\\'username\\\', $params[\\\'username\\\'])->update([\\\'nextduedate\\\' => $nextduedate,\\\'nextinvoicedate\\\' => $nextduedate,]);
Demand feedback