PHP+MySQL学习笔记(一)

PHP+MySQL学习笔记(一)

一、MySQL数据库概述

1.认识数据库

  • 数据库:存储信息的仓库,信息就是存下来的数据
  • MySQL数据库是由二维表的形式组织起来的,一条条存储在表中。表中的每一条信息称为一条记录。一个数据库中可以有若干张表,每张表中可以存放若干条记录。
  • 每张表有自己的表头,比如学生信息的好几个栏目,这些栏目就是表头,数据库中称之为字段。
    PHP+MySQL学习笔记(一)

2.MySQL支持的数据类型

  • 一个字段一旦设置为某种类型,那么这个字段中只能存入该类型的数据。
  • 数据类型有三大类数值类型、日期类型、字符串类型

3.MySQL使用入门

3.1.SQL分类

  • 1)DDL(Data Definition Languages)语句
    数据定义语句,通过这类语言可以对数据库进行定义和管理
    creat drop alter
  • 2)DML(Data Manipulation Language)语句
    数据操纵语句,用于增删改查数据库记录并检查数据完整性
    insert update delete
  • 3)DCL(Data Control Language)语句
    数据控制语句,通过此类语句可以对数据库的相关权限进行设置
  • 4)DQL( Data Query Language )语句
    查询数据库数据 , 如SELECT语句,简单的单表查询或多表的复杂查询和嵌套查询,是数据库语言中最核心,最重要的语句,使用频率最高的语句。
    select

3.2.基本的数据库操作命令:

连接数据库语句 : mysql -h 服务器主机地址 -u 用户名 -p 用户密码
update user set password=password('123456')where user='root'; 修改密码
create database name; 创建数据库
#create database bill default character set utf8 collate utf8_general_ci;
default character set 指定该数据库的默认字符集和排序规则,创建数据表的时候就不用再指定了
show databases; 显示所有数据库
use databasename; 选择数据库
show tables; 显示数据库mysql中所有的表
describe user; 显示表mysql数据库中user表的列信息

flush privileges; 刷新数据库
exit; 退出Mysql
? 命令关键词 : 寻求帮助
-- 表示注释

二、数据库的基本知识

1.数据库的列类型

 数值
数据类型 描述 大小
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节
decimal 字符串形式的浮点数,一般用于金融计算
字符串
数据类型 描述 大小
char 字符串固定大小 0~255
varchar 可变字符串 0~65535
tinytext 微型文本 2^8-1
text 文本串 2^16-1
时间日期
数据类型 描述 格式
date 日期格式 YYYY-MM-DD
time 时间格式 HH:mm:ss
datetime 最常用的时间格式 YYYY-MM-DD HH:mm:ss
timestamp 时间戳,1970.1.1到现在的毫秒数
year 年份表示
null
  • 没有值,未知
  • 不要使用NULL值进行计算

2.数据库的字段属性

UnSigned

  • 无符号的
  • 声明了该列不能为负数

ZEROFILL

  • 0填充的
  • 不足位数的用0来填充 , 如int(3),5则为005

Auto_InCrement

  • 通常理解为自增,自动在上一条记录的基础上默认+1

  • 通常用来设计唯一的主键,必须是整数类型

  • 可定义起始值和步长

  • 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表

  • SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

NULL 和 NOT NULL

  • 默认为NULL , 即没有插入该列的数值
  • 如果设置为NOT NULL , 则该列必须有值

DEFAULT

  • 默认的

  • 用于设置默认值

  • 例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值

拓展:每一个表,都必须存在以下五个字段:

名称 描述
id 主键
version 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间

3.数据库储存引擎

INNODB

  • 默认使用,安全性高,支持事务的处理,多表多用户操作

MYISAM

  • 早些年使用,节约空间,速度较快
MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大,约为2倍

三、DDL语句

正确的,不会报引号错误的格式:

CREATE TABLE `lrs_audit_rule_package`(
  `id` BIGINT(20) AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
  `package_code` varchar(6)  NOT NULL COMMENT '规则包',
  `package_type` varchar(2)  NOT NULL COMMENT '规则包类型',
  `package_desc` varchar(100)  COMMENT '描述',
  `create_time` datetime DEFAULT NULL COMMENT '创始时间',
  `modified_time` datetime DEFAULT NULL COMMENT '修改时间'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='审核规则包';

CREATE创建数据库表

CREATE TABLE IF NOT EXISTS `student`(
	'字段名' 列类型 [属性] [索引] [注释],
    '字段名' 列类型 [属性] [索引] [注释],
    ......
    '字段名' 列类型 [属性] [索引] [注释]
)[表的类型][字符集设置][注释]
-- 目标 : 创建一个school数据库
-- 创建学生表(列,字段)
-- 创建表之前 , 一定要先选择数据库use

CREATE TABLE IF NOT EXISTS `student` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`address` varchar(100) DEFAULT NULL COMMENT '地址',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

-- 查看数据库的定义
SHOW CREATE DATABASE school;
-- 查看数据表的定义
SHOW CREATE TABLE student;
-- 显示表结构
DESC student;

PHP+MySQL学习笔记(一)

  • NOT NULL表示索引非空
  • 表名和字段尽量使用``括起来,字符串使用单引号括起来
  • AUTO_INCREMENT 代表自增
  • 所有的语句后面加逗号,最后一个不加
  • 主键的声明一般放在最后,便于查看
  • 不设置字符集编码的话,会使用MySQL默认的字符集编码Latin1,不支持中文,可以在my.ini里修改

ALTER修改数据库

  • 修改表名 :ALTER TABLE 旧表名 RENAME AS 新表名
  • 添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性]
  • 修改字段 :
 ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
  • 删除字段 : ALTER TABLE 表名 DROP 字段名
-- 修改表名
-- ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS students;

-- 增加表的字段
-- ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE students ADD age INT(11);

-- 修改表的字段(重命名,修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 [列属性];
ALTER TABLE students MODIFY age VARCHAR(11);-- 修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 [列属性];
ALTER TABLE students CHANGE age age1 INT(1);-- 字段重命名

-- 删除表的字段
-- ALTER TABLE 表名 DROP 字段名
ALTER TABLE students DROP age1;

DORP删除数据库

DROP TABLE [IF EXISTS] 表名

  • IF EXISTS为可选 , 判断是否存在该数据表
  • 如删除不存在的数据表会抛出错误
-- 删除表(如果存在再删除)
DROP TABLE IF EXISTS students;

四、DML语句

外键

  • 相当于是一种引用,一种索引,引用别的表的一列当做自己的。
  • 当自己要用那列表的元素时,引用id相对应的,使两张表形成关联。

创建外键:

-- 创建外键的方式一 : 创建子表同时创建外键

-- 年级表 (id\年级名称)
CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

PHP+MySQL学习笔记(一)

INSERT添加数据

INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')

  • 字段或值之间用英文逗号隔开 .
  • ’ 字段1,字段2…’ 该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致 .
  • 可同时插入多条数据 , values 后用英文逗号隔开
-- 使用语句如何增加语句?
-- 语法 : INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
INSERT INTO grade(gradename) VALUES ('大一');

-- 主键自增,那能否省略呢?
INSERT INTO grade VALUES ('大二');

-- 查询:INSERT INTO grade VALUE ('大二')错误代码:1136
Column count doesn`t match value count at row 1

-- 结论:'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.

-- 一次插入多条数据
INSERT INTO grade(gradename) VALUES ('大三'),('大四');

UPDATE修改数据

UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];

  • column_name 为要更改的数据列

  • value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果

  • condition 为筛选条件 , 如不指定则修改该表的所有列数据

-- 修改年级信息
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;

DELETE删除数据

DELETE FROM 表名 [WHERE condition];

  • condition为筛选条件 , 如不指定则删除该表的所有列数据
-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`;

-- 删除指定数据
DELETE FROM `student` WHERE id=1;

TRUNCATE [TABLE] table_name;

  • 用于完全清空表数据 , 但表结构 , 索引 , 约束等不变 ;
-- 清空年级表
TRUNCATE grade
上一篇:git status 中文乱码


下一篇:学成在线