数据库
一、什么是数据库
存储数据的仓库
将数据有组织,按照特定的格式存储在介质上叫做数据库
二、比较多个数据库系统
a) Oracle 最好的数据库没有之一
b) SQL server 最好的数据库(windows)
c) MySQL 甲骨文(Oracle) sun 开源
三、SQL语言
a) SQL(结构化查询语句) 数据库管理系统通过sql语句来管理数据库中的数据
1. 数据定义语言(DDL)
用来定义和管理数据对象,包括数据库、数据表 例如: CREATE、DROP 等
2. 数据操作语言(DML)
用来操作数据库对象中的所有数据 例如:INSERT UPDATE DELETE
3. 数据查询语言(DQL)
用来查询数据对象中的所有数据 例如:SELECT
4. 数据控制语言(DCL)
用来管理数据库的语言,包含赋予权限和更改权限 数据库更改 等 例如GRANT
四、为什么我们要学习MySQL
i. MySQL 免费
ii. 跨平台
iii. 功能强大且方便
五、web开发原理
六、登录和退出mysql服务器
1. 登录: 呼叫 windows键+r 出现运行框
2. 出现下面内容
3. 在运行框中输入下面内容
1. mysql -h localhost -uroot -p123456
2. mysql -h localhost -uroot -p(推荐使用这种方式)
password:******
3. 使用wamp->mysql->mysql console->输入密码回车
4. mysql -h localhost -uroot -p
-h主机名 -u 用户名 -p 密码
主机名: 就是你要链接数据库的所在ip localhost是本地主机名 只能在本地使用
mysql -h 192.168.40.25
用户名:root 是数据库最高用户 超级用户
密码: 默认密码是空
5. 如果在运行框输入找不到文件那么请进行下面操作
打开计算机右键->找到属性->找到高级系统设置->环境变量->在上下都找path这个内容->在path内容上填上下面内容->(C:\wamp\bin\mysql\mysql5.7.11\bin)你需要找到你的wamp路径去复制粘贴上
6. 退出
a) exit退出
b) \q 退出
注意:
1. 每个sql命令都需要使用分号来完成或者使用\G
2. 可以将一行命令拆分为多行
3. 可以通过\c 来取消本行命令
4. 可以通过exit 或者\q退出
我们可以通过一些快捷进行使用 help
1. 将查询结果立起来: \G
2. 取消当前为完成的操作:\c
3. 退出当前客户端:\q
4. 显示当前服务器状态:\s
5. 显示帮助信息:\h
七、查看数据库及创建数据库
i. 查看数据库
SHOW DATABASES;(推荐使用大写)
ii. 创建数据库 [](中括号代表可写可不写不是必须有的内容)
CREATE DATABASE [IF NOT EXISTS] 数据库名(小写)
CREATE DATABASE IF NOT EXISTS ss21 如果创建的数据库不存在我们则创建数据库
八、选择数据库及查看数据库中数据表
i. 选择数据库
USE 数据库名
USE ss21;
如果你不使用上面命令 会出现下面错误代码
ERROR 1046 (3D000): No database selected
ii. 查看数据库中数据表
SHOW TABLES;
九、删除数据库
DROP DATABASE [IF EXISTS] 数据库名
例如: DROP DATABASE IF EXISTS ss21; 如果存在我们就删除
注意:
1. MySQL 数据库中命令不区分大小写
2. 每创建一个数据库 就会在data目录下创建一个相应名字的文件夹
3. 在windows下面 数据库名称也是不区分大小写的 但是在linux 下数据库名严格区分大小写
十、创建一个简单的数据表(了解)
CREATE TABLE IF NOT EXISTS user(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
sex TINYINT NOT NULL DEFAULT 1,
age TINYINT NOT NULL DEFAULT 0
)ENGINE = MyISAM DEFAULT CHARSET=utf8;
十一、表中数据简单管理(增 删 改 查)(重点重点重点)
1. 添加数据
INSERT INTO 表名 VALUES(值)
INSERT INTO user VALUES(NULL,’球球’,10,120);
2. 查询数据
SELECT * FROM 表名;
SELECT * FROM user;
3. 修改数据
UPDATE 表名 SET 你要修改的字段名 WHERE id=数字
UPDATE user SET name=’李想’,sex=’0’,age=18 WHERE id=1
4. 删除数据
DELETE FROM 表名 WHERE id =数字;
DELETE FROM user WHERE id=1
注意:千万where id 后面要有值 否则就是全部删除
十二、新建普通用户
GRANT SELECT ON *.* TO ‘wenzhuo’@’localhost’ IDENTIFIED BY ‘123456’
* 代表所有 前面的* 代表所有库 后面的* 代表所有表
@ 前面写的是用户名 后面写的是主机名
主机名 只有本机的时候localhost 如果是别的主机 主机名就是别的主机的ip地址 例如 192。168.204.138
重点: GRANT 语句 不仅可以创建用户 也可以修改用户密码 而且还可以设置用户权限 因为 GRANT语句是mysql中非常非常非常重要的语句
十三、查看所有用户
SELECT user,host FROM mysql.user;
十四、删除普通用户
DROP USER 用户名@主机名;
例如: DROP USER ‘jiuqin’@‘localhost’
十五、root 用户修改自己密码
SET PASSWORD = PASSWORD(‘新密码’);
注意:新密码必须使用PASSWORD() 加密函数进行加密
十六、root 用户修改普通用户密码
SET PASSWORD FOR ‘用户名’@’主机名’ = PASSWORD(‘新密码’)
SET PASSWORD FOR ‘wenzhuo’@‘localhost’=PASSWORD(‘wenzhuo520’)
十七、授权
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO ‘wenshuai’@’localhost’ IDENTIFIED BY ’wenshuaiaiwenzhuo’
GRANT SELECT,INSERT,UPDATE,DELETE ON ss21.* TO ‘wanli’@’localhost’ IDENTIFIED BY ‘wanli404’
GRANT:被授权的用户可以将这些权限赋值给别的用户
十八、收回权限及查看权限
1. 查看权限
SHOW GRANTS FOR ‘用户名’@’主机名’
2. 收回权限
REVOKE INSERT,UPDATE,DELETE ON ss21.* FROM ‘用户名’@‘主机名’
十九、数据备份
需要在cmd 命令行 windows+r 在运行框中 输入cmd
开始->所有程序->附件->命令提示符
mysqldump -u用户名 -p 库名表名 > 保存的路径
例如: mysqldump -uroot -p ss21 > C:\ss21.sql
如果 在备份当中出现拒接访问 说明你的权限不够
请使用超级管理员权限打开文件
Can't connect to MySQL server on 'localhost' (10061) 服务没有启动
二十、还原数据
首先必须先准备一个空的数据库 ss21
mysql -u 用户名 -p 库名 < 保存的地址
mysql -uroot -p ss21 < C:\ss21.sql
重要的事情需要说三遍 别写分号 别写分号 别写分号
数据表类型
一、 创建数据表
CREATE TABLE IF NOT EXISTS user(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
Sex TINYINT NOT NULL DEFUALT 1,
age TINYINT NOT NULL DEFAULT 0
)ENGINE = MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS 表名称(
字段名1 类型(长度) 属性 索引,
字段名2 类型(长度) 属性 索引,
字段名3 类型(长度) 属性 索引,
字段名4 类型(长度) 属性 索引,
字段名5 类型(长度) 属性 索引,
...
字段名N 类型(长度) 属性 索引,
) ENGINE =MyISAM DEFAULT CHARSET =utf8;
html 设置字符集 utf-8
mysql 设置字符集 utf8
二、 mysql 数据类型
1. 整数类型(重点重点重点)
整数类型 | 字节数 | 无符号范围 | 有符号范围 |
TINYINT(微整型) | 1 | +0 - +255 | -128- +127 |
SMALLINT(小整型) | 2 | 0-65535 | -32768-32767 |
MEDIUMINT(中整型) | 3 | 0-16777215 | -8388608-8388607 |
INT(整型) | 4 | 0-4294967295 | -2147483648-2147483647 |
BIGINT(大整型) | 8 | 0-188446744073709551615 |
mysql 支持的数据类型后面指定该类型的宽度, 基本形式如下:
数据类型(显示宽度)
默认显示宽度: 可以理解为 一个整数类型的默认宽度正好能显示该数据类型的所有值的宽度 默认长度其实是当前位数减一 为什么要减一 是因为第一位是我们的符号位
n1 | tinyint(4)
n2 | smallint(6)
n3 | mediumint(9)
n4 | int(11)
n5 | bigint(20)
在整数类型使用是 可以配置zerofill 参数 zerofill 表示数字不足的显示空间由0来填充补全
出现下面报错的原因是
Out of range value for column 'n1' at row 1
你的长度超出了范围
注意:
使用zerofill是 mysql会自动加上unsigned(无符号)属性 那么该整数类型只能表示无符号数 器显示长度比默认显示宽度小一
在设置了显示宽度时 如果插入的数据宽度大于设置的显示宽度 数据依然可以插入 且能够显示 但是该设置的宽度失效
数据的宽度不能大于默认宽度 如果大于默认宽度 那么该数据已经超出该类型的最大值 因为最大值的宽度必须小于等于默认宽度 如果一个值大于最大值 将不能插入
-- 整数类型还有一个属性 AUTO_INCREMENT 属性 自增
-- 自增属性需要配合索引使用
-- 如果出现下面报错 请在你自增属性后面加上你的索引内容
-- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
-- key(index) 索引
-- 普通索引(index)
-- 唯一索引(unique) 唯一索引所有值不能有重复
-- 主键索引primary key 一个数据表中只能有一个 唯一作用 一般设置都是自增字段
zerofill 零填充
unsigned 无符号
auto_increment 自增
只能修饰整数类型
2. 浮点数和定点数
mysql 中使用浮点数和定点数来表示小数
浮点数: 单精度浮点数(float) 和双精度浮点数(double)
定点数: DECIMAL
定点数在存储空间 是根据精度来决定的
mysql中可以指定浮点数的精度: 数据类型(M,D)
M 精度 是数据的总长度 小数点不占位
D 标度 小数点后的长度
在存储小数的时候 建议使用decimal类型 定点数以字符串形式存储 因此精度要比浮点数更高 而且浮点数容易出现误差 这是浮点数一直存在的问题 如果对数据的精度要求很高 还是选择定点数比较安全
如果标度超出位数那么他会进行四舍五入如果你的精度和标度一样那么我们的整数位只能是零
3. 时间
-- 时间戳
-- 2147483647
INT 2147483647
因为php可以有date函数 你想处理什么样子都可以 所以我们使用时间戳来存储我们php的时间
4. 字符串类型
字符串类型是mysql中用来存储字符串的数据类型 字符串类型包含: VARCHAR CHAR TEXT ENUM SET
CHAR 和VARCHAR
字符串类型(M) M-- 该字符串的最大长度 M
CHAR 定长的字符类型 0-255
VARCHAR 变长的字符类型 5.0以前 0-255 5.0版本以后 0-65535
char(5) 和 varchar(5)区别
插入值 char 占用字数 varchar占用字数
1 5 2
123 5 4
1234 5 5
12345 5 6
CHAR 定长字符类型 分配多少空间就占用多少空间 不计算需要的长度 处理数据速度快
VARCHAR 变长字符类型 根据字符串的长度来分配空间 需要计算长度 处理数据速度稍慢
什么时候用char 什么时候用varchar
当你插入的数据长度一直不变的情况下 请使用char 密码需要使用char
当你插入的数据长度是随时改变的情况下 使用varchar 用户名需要使用varchar
ENUM 类型 枚举类型
ENUM(‘值1,值2,值3,,,,,值n’)
n--代表参数列表中的第n个值 n 65535
ENUM 的值只能去列表中的一个元素
1/65535
SET 类型
在创建表是 set类型的取值范围是以列表的形式指定的
set(‘值1,值2,值3,。。。值n’);
set 类型的值最多只是64个元素 取值可以是一个或者多个 其他特性和enum类似
1-64/64
三 查看表结构
DESC 表名 : 缩写版
DESCRIBE 表名
查看建表语句
SHOW CREATE TABLE 表名
四 创建表
1. 建表语法
CREATE TABLE IF NOT EXISTS 表名称(
字段名1 类型(长度) 属性 索引,
字段名2 类型(长度) 属性 索引,
字段名3 类型(长度) 属性 索引,
字段名4 类型(长度) 属性 索引,
字段名5 类型(长度) 属性 索引,
...
字段名N 类型(长度) 属性 索引,
) ENGINE =MyISAM DEFAULT CHARSET =utf8;
a. 设置主键
PRIMARY KEY
字段名 数据类型 PRIMARY KEY
b. 设置表的非空约束
字段名 数据类型 NOT NULL
不为空 只是不为null
c. 设置表的唯一性
字段名 数据类型 UNIQUE
d. 设置表字段值的自增
字段名 数据类型 AUTO_INCREMENT
如果你设置自增就必须加上 索引 PRIMARY KEY
e. 设置表的字段默认值
字段名 数据类型 DEFAULT 默认值
f. 设置字段的数字类型 不能为负数
字段名 数据类型 UNSIGNED
g. 建表引擎
MyISAM
InnoDB
MyISAM 与 InnoDB 的区别
myisam 读取速度快 不支持事务
InnoDB 读取速度稍慢 支持事务 事务回滚
===================================
根据我们昨天学的内容创建一个表
ERROR 1062 (23000): Duplicate entry 'user1' for key 'name'
说明你的user1在name字段里面有值了 而且你的name字段是唯一字段
2. 修改表(重点重点)
a) 修改表名
ALTER TABLE 表名 RENAME TO 新表名
b) 修改字段的数据类型
ALTER TABLE 表名 MODIFY 字段名 数据类型 属性 索引;
c) 修改字段名
ALTER TABLE 表名 CHANGE 老字段名 新字段名 数据类型 属性 索引;
d) 增加字段
ALTER TABLE 表名 ADD 字段名 数据类型 属性 索引 [FIRST|AFTER 字段名]
如果后面first和after 不写的情况下 默认是添加到字段末尾
e) 删除字段
ALTER TABLE 表名 DROP 字段名
ERROR 1091 (42000): Can't DROP 'phone'; check that column/key exists
删除不存在的字段 会报上面的错误
f) 修改字段的排列位置
ALTER TABLE 表名 MODIFY 字段1 数据类型 属性 索引 AFTER 字段2
g) 修改表引擎
ALTER TABLE 表名 ENGINE = 引擎名
数据量大的时候 不建议像上面一样去修改表引擎 而是先创建一个和myuser表一样的表 然后把空表的引擎修改为我们要修改的引擎之后将数据导入到新表中即可
h) 将自增改为现在的最大值
ALTER TABLE 表名 AUTO_INCREMENT=0;