一.数据库(DataBase DB)
1.数据库:存储数据结构的仓库
2.分类
(1)关系型数据库:以二维表存储的数据(MySQL,SQLServer,Orcale等)
(2)非关系型数据库(Nosql):MongDB 等
3.MySQL
(1)安装
(2) 进入
window :开始--运行--cmd
linux : 打开终端
(3)MySQL配置文件
window: my.ini
linux : /etc/my.cnf
// 查看配置文件
vi /etc/my.cnf
:q // 退出不保存
datadir= /var/lib/mysql //数据库存储位置
4. 登录
mysql -u用户名 -p密码 [-P端口号] [-D选择数据库]
5. 退出
quit
exit
\q
6.注释
-- 注释内容
#注释内容
7.提示符号修改(prompt)
(1) 进入MySQL时修改提示命令
mysql>prompt 提示符
(2) 登录时命令
mysql -uroot -p --prompt=提示符
说明:
a.恢复 prompt mysql>
b.
\u :MySQL的用户
\h : 主机名称
\D : 获得系统时间日期
\d :选择的数据库
8、 SQL(Structured Query Language结构化查询语言):
(1)DDL(数据定义语言):创建数据库,创建表,创建视图等
创建(CREATE)
删除(DROP)
修改(ALTER)
(2)DML(数据操作语言): 对表中数据的操作
增(INSERT)
删(DELETE)
改(UPDATE)
(3)DQL(数据查询语言):
查询(SELECT)
(4)DCL(数据控制语言):
对用户分配权限(GRANT),
撤销权限(REVOKE)
9. SQL的命令规范
(1)系统命令要大写,名称小写
(2)命令行以分号结束 或 \g
说明:修改结束符号 delimiter 结束符号
(3)支持折行,但不能在函数,名称,引号中折行
(4)名称不能是 关键字或保留字,如果是关键字或保留字要用反引号(``),例如 users
10.数据库操作(DDL)
(1)查看数据库
SHOW DATABASES;
(2) 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名称 [[DEFAULT] CHARACTER SET [=] 编码];
(3)查看创建数据库命令
SHOW CREATE DATABASE 数据库名称
(4)删除数据库
DROP DATABASE [IF EXISTS]数据库名称;
(5) 修改创建数据库编码
ALTER DATABASE 数据库名称 [DEFAULT] CHARACTER SET [=] 编码;
(6)选择(打开)数据库
USE 数据库名称;
(7) 查看当前打开的数据库
SELECT DATABASE();
11. 创建表操作(DDL)
(1) 查看表
SHOW TABLES;
(2)创建表结构
CREATE TABLE [IF NOT EXISTS] 表名(
字段名(列名Field) 数据类型 [字段属性|约束条件],
字段名(列名Field) 数据类型 [字段属性|约束条件],
...
)[ENGINE=Inno DB DEFAULT CHARSET=utf8];
说明:
MySQL引擎:
InnoDB : 如果创建外键或事物必须用InnoDB
MyISAM :
(3)查看表结构
DESC 表名;
DESCRIBE 表名;
SHOW COLUMNS FROM 表名;
(4)查看创建表命令
SHOW CREATE TABLE 表名;
12.添加和查询数据
(1)添加数据
INSERT 表名(字段名,字段名...) VALUE[S]
(值,值...),
(值,值...)...;
(2) 查询数据
SELECT * FROM 表名;
SELECT 字段名,字段名... FROM 表名;
13.数据类型
1.整型
(1)TINYINT([M]) [UNSIGNED无符号位|ZEROFILL]
有符号位 : -128~127
无符号位 : 0~255
大小 : 1个字节(Byte 2^8)
(2)SMALLINT([M]) [UNSIGNED无符号位|ZEROFILL]
有符号位 : -32768~32767
无符号位 : 0~65535
大小 : 2个字节(Byte 2^16)
(3)MEDIUMINT([M]) [UNSIGNED无符号位|ZEROFILL]
有符号位 : -8388608~8388607
无符号位 : 0~16777215
大小 : 3个字节(Byte 2^24)
(4)INT([M]) [UNSIGNED无符号位|ZEROFILL]
有符号位 : -2147483648~2147483647
无符号位 : 0~4294967295
大小 : 4个字节(Byte 2^32)
(5)BIGINT([M]) [UNSIGNED无符号位|ZEROFILL]
大小 : 8个字节(Byte 2^64)
说明:
UNSIGNED: 无符号位(正数)
ZEROFILL:当显示的位数小于指定位数用0 填补。字段有ZEROFILL字段属性自动添加UNSIGNED
2.浮点型
(1)FLOAT([M,D]):单精度浮点
范围: -3.40e38 ~3.40e38
(2) DOUBLE([M,D]):双精度浮点
范围: -1.79e308 ~1.79e308
(3) DECIMAL([M,D]):定长浮点
说明:单精度浮点,双精度浮点存近似值;DECIMAL定长浮点存储精确值,会报警告错误。
3.字符类型
(1) CHAR([M]) :定长字符
大小: 0-255字节(一个字母一个字节)
(2) VARCHAR([M]):变长字符
大小: 0-65535字节(一个字母一个字节)
(3)TINYTEXT([M]): 0-255字节
(4) TEXT([M]):0 -65535字节
(5) MEDIUMTEXT([M]):0 -16777215字节
(6) LONGTEXT([M]): 0-4294967295字节
说明:
a. CHAR 效率高但不省空间,VARCHAR效率低但省空间,TEXT效率最低。
b.CHAR,VARCHAR 最大存储的字节数受下面情况影响
(a) 一个字段最大能存65535字节
(b) 编码:
gbk,gb2312 : 一个字最多能存2个字节
utf8 :一个字最多能存3个字节; 65532/3=21844字节
(c) 多个字段的字符类型总共不能超65535字节
4.布尔类型
(1) TINYINT(1)
(2) BOOLEAN
5. 时间日期类型
(1) DATE :4个字节 ,YYYY MM DD
(2) TIME :3个字节, HH MM SS
(3) YEAR :1个字节 YYYY
(4) DATETIME:8个字节 YYYY MM DD HH MM SS
(5) TIMESTAMP:4个字节 时间戳 1970-1-1 ~ 2037-1-1
6.枚举类型
enum :至多可以有 65535字节
例如: 字段: sex enum('man','woman')
14.约束条件
1.DEFAULT : 默认值
2.NOT NULL: 不能为空(必填)
3. [PRIMARY] KEY:主键,一个表中必须有一个主键, 是主键的字段一定是 NOT NULL 和 UNIQUE。
4. UNIQUE [KEY]:唯一性,一个表中可以有多个唯一性(例如:user用户名不能重复,邮箱不能重复)
5. AUTO_INCREMENT:自动增长,编号自动增长1,如果字段有AUTO_INCREMENT,一定是主键。
二.表结构操作(DDL)
1. 添加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名],
ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名]...;
2. 删除字段
ALTER TABLE 表名
DROP 字段名,
DROP 字段名...;
3.修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名];
4.更改字段名
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名];
5.添加默认值
ALTER TABLE 表名
ALTER 字段名 SET DEFAULT 值;
6.删除默认值
ALTER TABLE 表名
ALTER 字段名 DROP DEFAULT;
7. 添加主键
ALTER TABLE 表名
ADD PRIMARY KEY(字段名);
8. 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
说明:
如果主键字段有AUTO_INCREMENT ,要先删除AUTO_INCREMENT才能删除主键
9、添加唯一性
a.ALTER TABLE 表名 ADD UNIQUE KEY|INDEX(字段名);
b.ALTER TABLE 表名 ADD [CONSTRAINT 约束名称] UNIQUE KEY|INDEX(字段名);
10、删除唯一性
ALTER TABLE 表名 DROP KEY|INDEX 唯一性的约束名称
说明:如果没有定义唯一性的约束名称,默认就是字段名。
11.表重命名
(1)ALTER TABLE 表名 RENAME [AS|TO] 表名;
(2)RENAME TABLE 旧表名 TO 新表名;
12.重置 AUTO_INCREMENT
ALTER TABLE 表名 AUTO_INCREMENT=值;
三、帮助
? 命令
help 命令
\h 命令
四、表中数据操作(DML)
(1) 增(INSERT)
a.不写字段的添加(从第一个字段到最后一个字度依次都有赋值)
INSERT [INTO] 表 VALUE[S](值,值,值...);
b. 写字段的添加(添加一个记录)
INSERT [INTO] 表(字段名,字段名...) VALUE[S] (值,值...);
c. 写字段的添加(添加多记录)
INSERT [INTO] 表(字段名,字段名...) VALUE[S] (值,值...),(值,值...)...;
d. INSERT...SET(只能添加一条记录)
INSERT [INTO] 表名 SET 字段名=值,字段名=值...;
(2) 删(DELETE)
a. DELETE FROM 表 [WHERE条件];
说明:如果DELETE命令没有WHERE条件,清空表数据,但AUTO_INCREMENT不重置
b.TRUNCATE 表;
说明:清空表数据,并且AUTO_INCREMENT重置
(3) 改(UPDATE)
UPDATE 表名 SET 字段名=值,字段名=值... [WHERE条件];
说明:
如果UPDATE命令没有WHERE条件,将所有记录中的列赋相同的值了。
五、表中的数据查询(DQL)
(1) 查询所有字段 (效率低)
SELECT * FROM 表名;
(2) 列出字段的查询
SELECT 字段名|expr,字段名|expr...
FROM 表名;
(3)给字段起别名
SELECT 字段名 [AS] 别名
FROM 表名;
(4)给表起别名
SELECT 字段名
FROM 表名 [AS] 别名;
(5)表名(别名).字段:字段来自哪个表
SELECT 表名.字段名
FROM 表名;
(6)数据库.表名:表来自哪个数据库
SELECT 字段名...
FROM 数据库名.表名;
(7)查询完整格式
SELECT 字段名|expr,字段名|expr...
FROM 表名
[WHERE 条件]
[GROUP BY 字段]
[HAVING 条件]
[ORDER BY 字段]
[LIMIT $offset,$length];
(8) WHERE 条件:条件过滤
条件:
(a) 比较运算符:
> >= < <= =
!= <>(不等于)
<=> (判断null值)
(b) IS [NOT] NULL :判断null值
(c) [NOT] BETWEEN ...AND... (范围值)
(d) [NOT] IN(值,值...); (包含某个值)
(e) 逻辑运算符
! (非)
&& AND (与,并且)
|| OR (或者)
(f) [NOT] LIKE '字符串'; 模糊查询
关键字
_ :任意一个字符
% : 任意字符(0个或1个或多个)
(9) GROUP BY 字段:分组
说明:
(a) 对某个字段中相同的值分为一组,并且显示小编号一个结果,一般显示的字段是分组的字段
(b) GROUP BY 结合 聚合函数使用
COUNT(*):每组中的个数,包含null
COUNT(字段):每组中的个数,不包含null值
AVG(字段):每组中的平均值
MAX(字段):每组中的最大值
MIN(字段):每组中的最小值
SUM(字段):每组中的和
(10) HAVING 条件:二次条件过滤
说明:
(a) WHERE条件是字段的过滤
(b)HAVING条件是对一个结果的过滤一般结合GROUP BY 使用
(11) ORDER BY 字段 :排序
说明:
(a)ORDER BY 字段
ASC 默认升序|DESC 降序
(12) LIMIT [$offset,]$length: 显示前n条信息
说明:
(a)$offset:偏移量,编号从0开始,起始编号
(b)$length:显示的长度(条数)
(c) WEB分页原理
计算: $offset =(当前页-1)*显示条数
$offset =($curpage-1)*$pagesize;
六、MySQL 表达式和函数
1. 算术运算符 和函数
(1) + - * / % MOD( 求余)
(2) POW,POWER :求次幂
(3)SQRT :开平方
(4)FLOOR:向下取整
(5) CEIL:向上取整
(6) ROUND:四舍五入
(7) RAND:随机小数
RAND()-- [0,1)
例如: 0-100整数
ROUND( RAND()*100)
2.字符函数
(1) LOWER:转为小写
(2) UPPER:转为大写
(3) CONCAT:字符串连接
CONCAT($str,$str...)
(4) CONCAT_WS:字符串连接
CONCAT_WS('分隔符',$str,$str...)
(5) SUBSTR,SUBSTRING:字符串截取,编号从1开始
(6) TRIM:清除两边空格
(7) RTRIM:清除右边空格
(8) LTRIM:清除左边空格
(9) REPLACE:字符串替换
REPLACE($str,$search,$replace)
(10)LENGTH:获得字符串长度
3.比较运算符
(1) > >= < <= = != <> <=>
(2) IS [NOT] NULL
(3) [NOT] BETWEEN ...AND...
(4) [NOT] IN(值...)
4.逻辑运算符
(1) !(非)
(2) AND &&(与)
(3) OR ||(或者)
5.信息函数
(1) DATABASE():获得当前打开的数据库
(2) NOW():获得系统时间日期
(3) VERSION():MySQL版本
(4) USER(): 获得用户名
6. 聚合函数
COUNT(*) :每组中的个数,包含null
COUNT(字段) :每组中的个数,不包含null值
AVG(字段) : 每组中的平均值
MAX(字段) :每组中的最大值
MIN(字段) :每组中的最小值
SUM(字段) :每组中的和
7. 加密函数
MD5
PASSWORD
说明:表达式和函数都用SELECT语句输出
七、多表操作
(1)多表添加
INSERT 表(字段名...)
SELECT ...
(2)多个更新
UPDATE 表1
INNER JOIN 表2
ON 两个表的逻辑关系
SET 字段=值
[WHERE条件];
(3)多表联合查询
SELECT 字段名1,字段名2...
FROM 表1
连接类型 表2
ON 两个表的逻辑关系
连接类型 表3
ON 两个表的逻辑关系
...
说明:
连接类型:
内连接: INNER JOIN 两个表符号的信息内容
八、多表操作
1.多表添加、多表更新、 多表联合查询
格式:
SELECT 字段名...FROM 表名1 连接类型 表2 ON 两表的逻辑关系 连接类型 表3 ON 两表的逻辑关系 ...
说明:
(1)连接类型:
内连接:INNER JOIN : 两个表符号条件的信息
外连接:
左外连接 LEFT [OUTER] JOIN显示左表中的所有信息和右表中符合条件的信息,如果左表中的信息右表中没有用NULL填补
右外连接 RIGHT [OUTER] JOIN显示右表中的所有信息和左表中符合条件的信息,如果右表中的信息左表中没有用NULL填补
说明:一般多表联合查询用多个表实现,也可以用 SELECT语句得新表用括号括起来并起别名
2. 多表删除
格式:
DELETE 删除表 FROM 表1 INNER JOIN 表2 ON 两个表的逻辑关系 [WHERE 条件]
3.子查询(嵌套查询)
(1) 子查询:在SQL语句中嵌套SELECT语句
(2) 特点:
- 子查询嵌套SELECT语句
- 用小括号括起来
- 一般结合WHERE,GROUP BY 使用
4.子查询的使用
(1)WHERE:
a.IN
b.比较运算符
说明:
子查询中比较运算符比较的只能是一个结果,但如果是多个结果会产生错误用 ALL,SOME/ANY 来解决
> >=ALL 大于最大值
< <=ALL 小于最小值
> >=SOME/ANY 大于最小值
< <=SOME/ANY 小于最大值
=SOME/ANY IN
(2) FROM :用子查询产生一个新表用小括号括起来起别名
九、约束(Constraint)
1.约束:对字段的唯一性,完整性约束.
2.约束种类
(1) NOT NULL 不能为空
(2) DEFAULT 默认值
(3) [PRIMARY] KEY 主键
(4) UNIQUE [KEY] 唯一性
(5) FOREIGN KEY 外键
3.约束格式
(1) 列约束:写字段后的约束,对一个字段的约束
说明: NOT NULL,和DEFAULT是列约束
(2) 表约束:对两个字段以上的约束
列约束:
CREATE TABLE test(
id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL UNIQUE KEY
);
表约束:
CREATE TABLE test(
id SMALLINT UNSIGNED AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
PRIMARY KEY(id),
UNIQUE KEY(name)
);
4.FOREIGN KEY 外键
1.外键:对两个表的完整性和一致性的约束
2.
CREATE TABLE test(
...,
FOREIGN KEY(外键列)
REFERENCES 参考表(字段名称)
);
说明:
(1) FOREIGN KEY一定表约束
(2)一定先有参考表(主,父)然后再有外键表(从,子)
(3)外键列一定和参考表对应的字段数据类型一致
例如:
整型如果有UNSIGNED 也必须一致,如果是字符型,大小可以不同但编码必须一致
(4)先添加参考表(主)记录后添加外键表(从,子)
(5)创建外键 MySQL 引擎必须是InnoDB
(6)创外键,如果没有定义约束名称,MySQL引擎会默认创建索引类型的约束名称
5. 完整格式
CREATE TABLE test(
...,
FOREIGN KEY(外键列)
REFERENCES 参考表(字段名称)
[ON UPDATE RESTRICT|CASCADE|SET NULL|NO ACTION]
[ON DELETE RESTRICT|CASCADE|SET NULL|NO ACTION]
);
说明:
(1)RESTRICT(默认值)|NO ACTION:不能删除或更新父表中子表有相应信息的记录
(2) CASCADE级联: 父表删除或更新,子表也删除或更新相应的信息
(3) SET NULL: 父表删除或更新,子表相应的信息设置为NULL,子表字段不能是NOT NULL类型
6.逻辑外键: 父(主)表和子(从)表是一个表
例如:无限级分类(级联菜单)
十、MySQL的备份和恢复
(1) 备份(登录MySQL时的命令)
mysqldump -uroot -p 数据库名称
[表名] >位置文件名称(.sql)
(位置文件名称: f:/my.sql
/home/www/my.sql)
(2) 恢复(MySQL提示符下的命令)
USE 数据库
mysql> source 位置文件名称(.sql)
十一、可视化工具操作MySQL
1. C/S:(Client/Server):桌面软件
MySQL-Front ,Navicat
2. B/S: (Browser/Server):WEB软件
PHPMyadmin
MySQL
一、概述
实现网站的动态化
二、确认MySQL是否安装
phpinf()
MySQL函数库是PHP原生的扩展库。
MySQL不需要安装。
三、应用
1、连接数据库
mysql_connect(string server,string username,string password)
功能:连接数据库
参数:
server 连接数据库所在的服务器的名称。username 连接数据库的用户名称,password 连接数据库的密码
返回:成功 mysql资源($link)
失败 false
2、选择数据库
mysql_select_db(string $dbname [,resource $link])
功能:连接数据库
参数:
dbname 选择数据库的名称
link :可选参数,在仅连接一个数据库时,此参数可以不给,但是在连接多个数据库时,必须指明这个参数。
3、操作
mysql_query(string $query [,resource $link]);
没有返回结果集的操作语句:
a.增(insert)
返回:成功 true 失败 false
b.删(delete)
返回:成功 true 失败 false
c.改(update)
返回:成功 true 失败 false
mysql_affected_rows([resource $link])
功能:mysql_query对于没有返回结果集的sql语句,执行后,返回被影响的行数。
参数:
link 可选参数,mysql连接产生的资源
返回:成功:返回被影响的行数
失败:失败 -1
mysql_insert_id([resource $link])
功能:获取上一次insert语句产生的自增id。
参数:
link 可选参数,mysql连接产生的资源
返回:成功 自增id
失败 0
有返回结果集的操作语句:
a.查(select、show、desc)
成功:资源
失败:false
mysql_fetch_array(resource result)
功能:取回查询的结果。
格式(关联数组和索引数组)
每次获取一行记录,取不到时 获取到false
参数:
result:mysql_query产生的资源
返回:查询的结果
mysql_fetch_assoc(resource result)
功能:获取关联数组
每次获取一行记录,取不到时 获取到false
参数:
result:mysql_query产生的资源
返回:查询的结果(获取关联数组)
mysql_fetch_row(resource result)
功能:获取索引数组
参数:
result:mysql_query产生的资源
返回:获取索引数组
获取不到false
mysql_num_rows(resource result)
功能:查询结果的记录行数
参数:
result:mysql_query产生的资源
返回: 查询结果的记录行数(整形)
4、关闭
mysql_close([resource $link])
功能:关闭数据库资源
参数:
link 可选参数。在仅连接一个数据库时,此参数可以不给,但是在连接多个数据库时,必须指明这个参数。
create table poi_1 (
id int(11) NOT NULL AUTO_INCREMENT,
mid varchar(30),
img varchar(200),
x double,
y double,
position_id varchar(30),
PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5、展示数据库的状态:
show table status from 数据库名称;
6、MySQL的引擎:
InnoDB、MyISAM
创建外键或者事务管理必须是InnoDB
修改MySQL的引擎:
alert table 表名 ENGINE=InnoDB;