PHP+MySQL学习笔记(一)
一、MySQL数据库概述
1.认识数据库
- 数据库:存储信息的仓库,信息就是存下来的数据
- 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;
- 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
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