1.SQL语句:结构化查询语言,分为5类
DDL 数据定义语言
DML 数据操控语言
TCL 事务控制语言
DQL 数据查询语言
DCL 数据控制语言
DDL:数据定义语言(用于建立,修改,删除数据库对象)
包括:CREATE:创建表或其他对象结构
ALTER:修改表或其他对象的结构
DROP:删除表或其他对象的结构
TRUNCATE:删除表数据,保留表结构
DML:数据操作语言(用于改变数据表中的数据)
注:和事务相关,执行完后需要经过事务控制语句提交后才真正的将改变应用到数据库中。
INSERT:将数据插入到数据表中
UPDATE:更新数据表中已存在的数据
DELETE:删除数据表中的数据
TCL:事务控制语言(用来维护数据一致性的语句)
COMMIT:提交,确认已经进行的数据改变
ROLLBACK:回滚,取消已经进行的数据改变
SAVEPOINT:保存点,使当前的事务可以回退到指定的保存点,便于取消部分改变
DQL:数据查询语言(用来查询所需要的数据)
SELECT语句
DCL:数据控制语言(用于执行权限的授予和收回操作)
GRANT:授予,用于给用户或角色授予权限
REVOKE:用于收回用户或角色已有的权限
CREATE USER:创建用户
2.SQL语句命令规范
(1)系统命令大写,名称小写
(2)SQL语句用分号结束
(3)SQL语句支持折行,但不能在函数,名称或引号中折行
(4)名称不能用关键字和保留字,如果冲突,用反引号括起来
3.常用数据库命令
(1)查看数据库 SHOW DATABASES;
(2)创建数据库命令 CREATE DATABASE [IF NOT EXISTS] 数据库名 [[DEFAULT] CHARACTER SET [=] 字符集];
(3)查看数据库创建命令 SHOW CREATE DATABASE 数据库名;
(4)修改数据库的字符集 ALTER DATABASE 数据库名 [DEFAULT] CHARACTER SET [=] 字符集;
(5)删除数据库命令 DROP DATABASE [IF EXISTS] 数据库名;
(6)打开数据库 USE 数据库名;
(7)查看当前打开的数据库 SELECT DATABASE();
4.创建表结构
(1)查看表 SHOW TABLES;
(2)创建表结构
CREATE TABLE [IF NOT EXISTS]表名(
字段名 数据类型 [字段属性|约束条件],
字段名 数据类型 [字段属性|约束条件],
...
)[ENGINE=InnoDB DEFAULT CHARSET=utf8];
说明:数据库的最小单元表,表由 行(记录Record)和列(字段Field)组成,一个表中最少有一个字段(列)可以有0记录(行)数据
(3)查看表结构
a. DESC 表名;
b. DESCRIBE 表名;
(4)查看创建表结构命令 SHOW CREATE TABLE 表名;
5. 对表中数据的添加和查询
(1)添加(Insert)
insert 表(字段1,字段2,...)
value
(值,值,...),(值,值,...)......;
(2)查询(Select)
select * from 表名;查询所有的记录行
说明: * 代表所有字段
6. MySQL数据类型
(1) 整型
a.tinyint[(M)] unsigned|zerofill
说明:
大小:1个字节 2^8=8bit
范围:
有符号位 -128 ~127
无符号位(unsigned):0~255
b.smallint[(M)] unsigned|zerofill
说明:
大小:2个字节 2^16
范围:
有符号位 -32768 ~32767
无符号位(unsigned):0~65535
c.meduimint[(M)]unsigned|zerofill
说明:
大小:3个字节 2^24
范围:
有符号位 -8388608 ~8388607
无符号位(unsigned):0~16777215
d.int[(M)] unsigned|zerofill
说明:
大小:4个字节 2^32
范围:
有符号位 -2147483648 ~2147483647
无符号位(unsigned):0~4294967295
e.bigint[(M)] unsigned|zerofill
说明:
大小:8个字节 2^64
范围:
有符号位 : -2^63 ~ 2^63
说明:
字段属性
a.unsigned 无符号位,正数
b.zerofill:填补0,当现实的长度
小于指定的长度用0填补.
是zerofill的字段会自
动添加unsigned
(2)浮点型
a.float[(M,D)] unsigned|zerofill
说明:
大小:4个字节2^32
范围:单精度浮点 -3.40e38 ~ 3.40e38
精度:小数点 7位
b.double[(M,D)]unsigned|zerofill
说明:
大小:8个字节2^64
范围:双精度浮点 -1.790e308 ~ 1.79e308
精度:小数点 14位
c.decimal[(M,D)]unsigned|zerofill
说明:
定长浮点
默认 M 是10位,D 是0
最大M是65位 D是10
说明:
a. float,double 存近似值,decimal
精确值 (货币)
b. M指浮点数总的长度 ,D指小数位
例如: float(7,2) unsigned
最大值 99999.99
(3) 字符型
a. char[(M)]:定长字符
说明:
大小:至多255字节(一个字符占一个字节)
特点:char(30)在MySQL中存储不足的用
空格填补 例如: 'hello '
b. varchar[(M)]:变长字符
说明:
大小:至多65535字节
特点:varchar(30)在MySQL中变长存储
例如:'hello'
c. text: 至多 65535字节
d. mediumtext:至多 16777215字节
e. longtext:42亿左右字节
说明:
a. char不省空间但效率高,
varchar省空间但效率不高
例如: pwd char(32)
b.varchar,char字符类型受下面的影响
(a)varchar 至多65535字节
(b)编码影响
gbk:一个字 2字节
utf8:一个字3字节(至多21844字节)
(c) 表结构中所有字段总数不能超过
65535字节(21844字节)
c. text 一般用在新闻内容字段上
(4) 布尔类型
a. tinyint(1)
b. boolean
(5) 时间日期类型
a.time:3字节 HH:ii:ss
b.date:4字节 YY-MM-DD
c.year:1字节
d.datetime:8字节 YY-MM-DD HH:ii:ss
e.timestamp:时间戳类型 4字节
说明:
时间用整型 int 比较多。
(6)枚举类型
enum:至多 65535字节
例如: sex enum('男','女','保密');
7.约束条件
NOT NULL: 不能为空,必填
DEFAULT: 默认值
[PRIMARY] KEY:主键,一个表中必须有
一个主键(编号一般是主键)
是主键的字段一定是NOT NULL
和 唯一性不重复
UNIQUE [KEY]:唯一性不重复,一个表中
可以有多个唯一性字段
(例如:username,email)
AUTO_INCREMENT:自动增长,一般编号记录
自动加1,自动增长的字段一定是
主键
8.对表结构修改的操作
(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 字段名];
9.帮助
(1)? 关键字
(2)help 关键字
(3)\h 关键字
10.对表中数据的增删改
(1)增(Insert)
a.不带字段的添加(从第一个字段到最后字段都要赋值)
insert 表名
value(值,值,值...);
b.带字段的添加
insert 表名(字段1,字段2,字段3...)
value
(值,值,值,...),
(值,值,值,...),......;
c. insert ...set(只能添加一行记录)
insert 表名 set 字段1=值,字段2=值,...;
(2)删除(Delete)
a. delete from 表名[where条件]
说明:
(a)如果没where条件,清空整个表数据(空表)
(b)用delete 清空整个表数据,
auto_increment不重置
b. truncate 表名; 清空表数据
说明:
用truncate 清空整个表数据,
auto_increment重置
(3)改(Update)
update 表名 set 字段名1=值,
字段名1=值,...[where 条件]
说明:
如果 update语句没有 where 条件
那修改对于字段中一列的值
11.对表中数据的查询
(1) select * from 表名;
说明:*代表所有字段 效率低
(2) select 字段名1|expr|函数,
字段名2,...from 表名;
一.对表中数据的查询
1. select * from 表名;
说明: *所有字段 ,效率低
2. select 字段名1|expr|函数,
字段名2|expr|函数...from 表名;
3.给字段起别名
select 字段1 [as] 别名, 字段2...from 表名;
4.给表起别名
select 字段1,字段2...from 表名 [as]别名;
5.告诉字段来自哪个表
select 表名|别名.字段1,字段2...from 表名 [as]别名;
6.告诉表来自哪个数据库
select 字段1,字段2 from 数据库名.表名;
7.查询的完整格式
select 字段1,字段2...from 表名
[where 条件]
[group by 字段]
[having 条件]
[order by 字段]
[limit [$offset,]$length]
8.[where 条件]:条件过滤
条件
(1) 比较运算符 > >= < <=
= != <>
(2)[not] between ...and... (范围值)
(3) [not] in(值,值...)(不连续的某几个值)
(4)逻辑运算符 and &&(与,并且), or ||(或者)
!(非)
(5) [not] like '字符串%' 模糊查询
关键符号
_ :代表任意一个字符
% : 代表任意字符(0个,1个,多个)
9.[group by 字段] :分组
(1)原理:将字段中相同的值分为一组,
并且显示一个结果(小编号),
一般字段显示分组的那个字段
或聚合函数
(2)聚合函数
count(字段):每组的个数
count(*):包含null的记录
avg(字段):每组的平均值
max(字段):每组的最大值
min(字段):每组的最小值
sum(字段):每组的和
10. [having 条件]:二次过滤
说明:
where条件:对字段的过滤
having条件:对一个结果的过滤
一般结合group by 使用
11. [order by 字段]:对字段排序
说明:
order by 字段 desc降序|asc升序;
12.[limit [$offset,]$length]
:获得前n条件记录
说明:
a.$offset:偏移量,起始编号,编号从0开始
b.$length:获得记录长度
c.Web 程序的分页原理
偏移量 =(当前页-1)*记录长度
$offset = ($curpage-1)*$length
二.多表联合查询
1.格式
select 字段1,字段1...from 表1
连接类型 表2
on 两表逻辑关系
连接类型 表3
on 两表逻辑关系;
2.连接类型
(1)内连接: inner join:查找两边中都符合的信息
(2)外连接:
左外连接:left [outer] join
左表的所有信息和右表中符合条件
的信息,当左表有信息右表没有用
null填补
右外连接:right[outer] join
右表的所有信息和左表中符合条件
的信息,当右表有信息左表没有用
null填补
三.约束条件(Contstaint)
1.种类
(1) NOT NULL 不能为空 必填
(2) DEFAULT 默认值
(3) [PRIMARY] KEY:主键
(4) UNIQUE [KEY]: 唯一性
(5) FOREIGN KEY 外键
2. 写法:
(1)列约束:在一个字段后面写的约束
说明: NOT NULL, DEFAULT
必须是列约束
CREATE TABLE test(
id int unsigned PRIMARY KEY,
name varchar(30) NOT NULL UNIQUE
);
(2)表约束:对一个字段或以上写约束
CREATE TABLE test(
id int unsigned,
name varchar(30) NOT NULL,
PRIMARY KEY(id),
UNIQUE(name)
);
3.FOREIGN KEY 外键
(1)FOREIGN KEY:一个表对多个表的
完整性和一致的约束。
(2)格式
CREATE TABLE cms_news(
id int ...,
aid,
tid,
FOREIGN KEY(外键列aid)
REFERENCES 父表cms_admin(id),
FOREIGN KEY(外键列tid)
REFERENCES 父表cms_type(id)
[UPDATE RESTRICT|CASCADE|SET NULL|NO ACTION]
[DELETE RESTRICT|CASCADE|SET NULL|NO ACTION]
);
说明:
a. 外键是表约束
b. 子表中外键列一定要和父表对应的
字段数据类型一致
例如: 如果整型,unsigned也一致
如果字符类型编码一致,长度可以不一样
c.
一定先有父表再有子表
一定先有父表记录再有子表记录
一定先删子表再删父表
一定先删子表记录再删父表记录
d.创建外键MySQL引擎必须是InnoDB
e.如果没有写外键的名称,自动添加
索引外键名称
f.
restrict 默认值|no action:
不能更新或删除父表中,子表中
有对应信息的记录
cascade 级联:父表更新或删除
子表对应也更新或删除
set null:父表更新或删除
子表对应设置null值
4.逻辑外键: 父表和子表一个表
说明:实现无限级菜单分类