跳至主要內容

数据库

Emilia Zhen大约 4 分钟php

数据库

用来存储、管理数据的空间,按照数据结构来组织、存储和管理,可以实现高效存储及读取的数据解决方案。

客户端连接数据库服务器

通过 CMD 命令行

D:\phpStudy mysql[.exe] [-h主机名] [-p 端口号] -u用户名 -p密码

设置字符集,

set names gbk;

避免后续获取获取中文字符信息或发送包含中文的命令时出现乱码

查看数据库

show databases;       查看数据库服务器中的全部数据库
show create database 数据库名;      查看数据库的创建语句

创建数据库

create database 数据库名 [charset 字符集];

删除数据库

drop database 数据库名;

修改数据库

 alter database 数据库名 charset 新字符集;         修改字符集,数据库名是不能修改的

选择数据库

use 数据库名;

数据表

存储数据的地方

字段类型

整型

int (21 亿) 占据 4 个字节空间 tinyint (-128,127) 占据 1 个字节空间 后面加 unsigend 无负号(0,255)

bigint 8 个 mediumint 3 个 smallint 2 个

小数类型

float (单精度浮点数) decimal (定点类型) 一般存储与钱有关的数字

字符串类型

varchar(M) 一般用来存储长度变化比较大的字符串,M 为该字段可以存储的最多字符数 char(M) 存储长度比较固定的字符串 text 可以用 text 类型存储较长的字符串,无需指定字符串的具体长度

日期时间类型

datetime 年月日时分秒 date 年月日 time 时分秒 time() PHP获取时间戳,按照整型数字存储(date函数进行格式化)

列属性

null,not null 限制字段值不能为空 default 设置字段的默认值,在没有录入时自动使用默认值填充 primary key 设置字段为主键,主键的字段的值不能重复不能为空。 auto_increment 设置字段为自动增长,默认从 1 开始自动分配编号,类型必须为整型。自增长字段必须为一个 key unique key 唯一键,设置字段的值为唯一的,唯一键字段的值可以为空 comment 字段注释 enum('a','b') 单选 set('a','b') 多选

表操作

查看表

show tables;  查所有表
show tables from xxx;
show create table student_info; 查看表的创建结构;可以将;用\G替换,在命令中显示更清晰
desc xxx; 查看表结构

创建数据表

create table student_info(
    student_id int primary key auto_increment,
    student_name varchar(20) not null,
    student_gender enum('男','女'),
    student_hobby set('coding','dancing','singing'),
    student_wechat varchar(30) unique key,
    student_salary decimal(6,2),
    grad_time date
);

drop table 数据表表名;

改表名

alter table student_info rename student_infos;

改数据类型

alter table student_info modify student_id tinyint;

改字段 一定加上数据类型

alter table student_info change student_name student_names char(20);

添加字段

alter table student_info add student_age tinyint;
alter table student_info add student_address varchar(30) after student_gender;
alter table student_info add student_ids tinyint first;

删除字段

alter table student_info drop student_ids;

修改表的字符集

alter table student_info charset gbk;

数据操作

插入一条数据

insert into student_info values(null,'xiaobai','2018-01-01');
insert into student_info (name,age) values ('xiaobai',3);

一次插入多条数据

insert into student_info values(null,'xiaobai','2018-01-01'),(null,'smile','2018-01-01);

delete from 数据表 [where 条件];
truncate 数据表; 删除表并重新创建了一个新表

update 数据表 set 字段1 = 值1 , 字段2 = 值2 where 条件;

查询所有数据

select * from student_info;

根据条件查询

select * from student_info where student_id = 1;

高级查询 [where] [group by ] [having ] [order by ] [limit] 顺序不能改变

  • where 根据条件查询
  • group by 分组
    • count(字段) 返回该分组的行数
    • max(字段) 返回分组字段的最大值
    • min(字段) 返回分组字段的最小值
  • having 分组之后再查询
    select max(price) as max from apple_p group by cid having max > 3000;
    
  • order by 排序 升序asc 降序 desc 随机rand()
    select * from apple_p order by price asc ;
    
  • limit 查询显示条数
    select 字段列表 from table limit 偏移量offset,每页显示的行数pagesize
    

引入 sql 在 CMD 中直接执行

source e:/back.sql

连接查询

select 字段1 as 别名1 ,字段2 from A join B on A.字段 = B.字段 [where字句]

默认 inner join .. on ..left join .. on .. 以左边表为主表匹配,右表中未匹配到的数据依然显示在表中 right join .. on ..

子查询

select 字段列表 from table where .. (子查询);

查询数目

count(*) from