Web学习历程记录(一)
数据库
数据库(DB): 就是存储数据的仓库,本质是一个文件系统
数据库管理系统(DBMS): 指一种操作和管理数据库的大型软件
数据库表: 数据库中以表为组织单位存储数据。表中有行和列,我们叫做字段和记录
SQL语句
介绍
SQL全称结构化查询语言,是数据库的代码
通用语法
SQL语句可以单行或者多行书写,以分号结尾
可使用空格和缩进
SQL语句不区分大小写
可以使用/**/、#、- -完成注释
常使用数据类型 int(整型)、double(浮点型)、varchar(字符串)、date(日期)
分类
数据定义语言:DDL,用来定义数据库中的对象:数据库,表,列等
数据操作语言:DML,用来对数据库中表的记录进行更新
数据控制语言:DCL,用来定义数据库的访问权限和安全级别及创建用户
数据查询语言:DQL,用来查询数据库中表的记录
DDL
创建数据库
create database 数据库名 character set 字符集
查看数据库
show databases
show create database 数据库名
删除数据库
drop database 数据库名称
切换数据库
select database
use 数据库名
表操作
创建表
create table 表名( 字段名 类型(长度)[约束], 字段名 类型(长度)[约束]);
查看表
查看数据库中的所有的表
show tables;
查看表结构,查看表中的列
desc 表名;
删除表
drop table 表名;
修改表
rename table 表名 to 新表名;
列操作
主要是操作表中的列
添加
alter table 表名 add 列名 类型(长度)[约束];
删除
alter table 表名 drop 列名
修改列名
alter table 表名 change 旧列名 新列名 类型(长度)[约束];
修改列的类型长度及约束
alter table 表名 modify 列名 类型(长度) 约束;
修改表的字符集
alter table 表名 character set 字符集;
DML
插入表记录:insert
insert into 表(字段1,字段2...) values(值1,值2...),(值1,值2...)...;
insert into 表 values(值1,值2...),(值1,值2...)...;
insert into 表 value (值1,值2...)
注意:
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其他的字段类型的值必须使用引号
如果要插入空值,可以不写字段,或者插入null
INSERT INTO category(cid,cname) VALUES('c001','食品');
INSERT INTO category VALUES('c002','首饰'),('c003','日用品');
INSERT INTO category VALUE(NULL,'','');
更新表记录:update
update 表名 set 字段名 = 值,字段名 = 值,.. where 条件
删除表记录:delete
一条一条删,不清空auto_increment
delete from 表名 where 条件;
直接将表删除,重新建表,auto_increment清零
truncate table 表名;
中文乱码问题
set names gbk
DQL
select *|列名1,列名2 from 表 where 条件;
distinct 去掉重复值
select distinct 列名 from 表 where 条件;
别名查询
select * from 表名 as 别名;
select 列名 as 别名 from 表名;
条件查询
运算符名称 | 运算符 |
---|---|
算数运算符 | +,-,*,/ |
比较运算符 | =,<,>,<=,>= |
集合运算符 | in,not in(判断一个值在不在集合里) |
范围判断符 | between…and… |
模糊匹配 | like(?或_ 任意一个字符,*或%任意多个字符) |
测试空值 | is[not]null |
字符串连接符 | & |
取模运算符 | mod |
SQL语句查询
排序
通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后
ASC 升序(默认)
DESC 降序
select * from 表名 order by 排序字段 ASC|DESC
聚合
对查询后的结果的列进行计算,然后返回一个单一的值
count:统计指定列不为null的记录行数
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算返回结果为0
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
min:计算指定列的最小值
avg:计算指定列的平均值,如果不是数值类型,那么计算结果为0
分组
使用group by对查询信息进行分组
select 字段 from 表名 group by 分组字段 having 分组条件;
having和where的区别
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用统计函数过滤数据
where后面不可以使用统计函数
分组查询
m表示从第几条索引开始,计算方式(当前页 - 1)* 每页显示条数
n表示查询多少条数据
select 字段 from 表明 limit m,n;
数据库的备份与恢复
备份数据库
mysqldump -u用户名 -p 数据库名字 > 数据文件的位置
恢复数据库
mysql -u用户名 -p 数据库名字 < 数据文件的位置
source 数据文件的位置
SQL约束
数据完整性
添加数据完整性 = 添加表约束
分类
实体完整性:对数据进行约束,比如主键约束,唯一约束
域完整性:对数据列的约束,比如该列的数据类型,默认约束,非空约束
引用完整性:外键约束
主键约束
primary key 约束唯一标识数据库表中的每条记录
主键必须是唯一的值
主键列不能是null
每个表都应该有且只有一个主键
添加主键约束
创建表时,在字段描述外,声明指定字段为主键
id int primary key;
创建表时,在constraint的约束区域,声明指定字段为主键
constraint 名称 primary key (字段列表)
constraint 可以省略
字段列表需要使用小括号括住,如果有多字段需要使用逗号隔开,声明两个以上字段为主键,称为联合主键
constraint id primary key(fid,lid);
创建表之后,通过修改表结构,声明指定字段为主键
alter table 表名 add (constraint 名称) primary key(字段列表)
删除主键约束
alter table 表名 drop primary key
自动增长列
auto_increment
默认开始值是1,如果希望修改起始值
alter table 表名 auto_increment = 数字
非空约束
not null
ip int not null;
唯一约束
unique 约束唯一标识数据库中每条记录
每个表可以有多个unique约束