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

  • 早些年使用,节约空间,速度较快
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大,约为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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值