第三十八天
查看所有用户 select user,host from mysql.user;
内容回顾
什么是数据库
数据库:
所有的数据存放的仓库'
每一个文件夹也是一个数据库
数据库管理系统--软件
关系型数据库 和费关系型数据库
关系型数据库: mysql oracle sqllite
非关系型数据库: redis mongodb memcache
数据库管理员-DBA
管理数据库的软件
数据库服务器 一台跑着一个数据库管理软件的机器
表: 文件 一张存储了数据的表
数据\记录: 表中的信息 一行就是一条记录
用户相关操作
查看当前用户是谁: select user()
给当前的用户设置密码 set password= password('123')
创建用户 create user 用户名@ 主机的ip/主机域名 identified by '123'
授权 grant select on 数据库名.* to '用户名'@'主机ip /域名'
授权并创建用户 grant select on 数据库名.* to '用户名'@'主机ip /域名' identified by '123'
查看所有用户 select user,host from mysql.user;
基础的库\表\数据操作
库-文件夹
创建库 create database 库名
切换到这个库下 use 库名
查看所有库 show databases
表-文件
- 查看这个库下的所有表 show tables
- 展示表的类型
show create table eng2
- 表名 加上反引号** tab 上面的
create table 表名(字段名1 数据类型)[(宽度) 约束条件]
uscreate table eng1(name char(12),id int)
#中括号里面 可以不写 int是11
- 删除表 drop table 表名;
数据---文件中的内容
- 增 insert into 表 values (一行数据),(一行数据),(一行数据);
#写入多个数据
insert into eng1 valus(1,'xiaowu')(2,'xiaoding')
#单独插入某个值 写入指定的字段
insert into eng1 (name )valus ('小黑')
- 删 delete from 表 where 条件
- 改: update 表 set 字段名=值, 字段2=值2 where 条件
- 查 select 字段 from 表
select * from eng1
查看表结构
- desc 表名 可以看到 字段 /类型/长度/ 看不到编码/引擎 / 具体约束信息只能看到一部分
mysql> desc eng1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(18) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.10 sec)
- show create table 表名; 查看详细信息
能看到字段/类型/长度/编码/引擎/约束/
今日内容
mysql支持的数据类型
mysql 表的完整性约束 不能有重复的 学号 身份证号
存储引擎--存储数据的方式--(存几个文件的问题)
查看引擎 show engines
查看当前的默认存储引擎:
mysql> show variables like "default_storage_engine";
查询当前数据库支持的存储引擎
mysql> show engines \G;
https://www.cnblogs.com/Eva-J/articles/9682063.html
数据持久化
- 支持事务: 为了保证数据的完整性,将多个操作标称原子性操作 --保持数据安全
- 支持行级锁:修改的行少的时候使用--修改数据频繁的操作
- 支持表级锁: 批量修改多行的时候使用--对于大量的数据的修改
- 支持外键:约束两张表中的关联资的不能随意的添加删除--能够降低数据增删改查的出错率
数据存在硬盘上,也就是说数据持久化存储
一张表
数据
表的结构
索引(查询的时候使用的一个目录结构)
数据和索引存在一起 ----2个文件 innodb存储引擎
默认是这个
-
数据索引一个文件
-
表结构 一个文件
数据和索引不存在一起 ---3个文件 myisam存储引擎
create table eng1(id int,name char(18)) engine=myisam
- 数据
- 索引
- 表结构
数据存储在内存中,也就是说数据断电消失--1个文件 memory存储引擎
create table eng3(id int,name char(18)) engine=memory
- 表结构
面试题:
- 你了解mysql存储引擎吗
- 你的项目用了什么引擎 为什么
- innodb
- 多个用户操作的过程中,对同一张表的数据同时做修改
- innodb支持行级锁 所以我们使用了这个存储引擎
- 为了适应程序未来扩展性, 扩展新功能的时候可能会用到....涉及到维护数据的而完整性
- 项目中有一个 什么什么表 ,之间的外键关系是什么,一张表的修改或者删除比较繁琐,怕出错所以做了外键约束
进入库文件夹里面
frm 框架
ibd 数据
数字类型
无符号数 unsigned 0-255
有符号数 -128-127
int 够用了
中间没有空格
-
tiny int 0-255 一字节 ***
-
small int 0-65535 二字节
-
medium int 0-16777215 三字节
-
int 4字节 *** 默认有符号的
需要定义无符号的 加unsigned
create table t1(id int,age tinyint unsigned);
都有约束
-> ;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
int 可以11 位这么宽
tinyint(3) 3字节宽
- float 4字节 4 5 位
float(5,2)
5------> 总共几位
2-------> 小数几位
- double 8字节
create table t2(
f1 float(5,2), 保留两位小数 并四舍五入
f2 float, ---float(255,30)
f3 double(5,2),
f4 double); ---double(255,30)
-
decimal double(65,30) 可以精确30位
用不上
数据类型 时间
-
date 20190930
-
time 121953
-
datetime 20190930121953 date +time
date 3字节 1000-01-01/9999-12-31 YYYY-MM-DD
year 3 1901/2155
time 3 HH:MM:SS
TIMESTAMP 有自动更新的功能 2038年到期 一般不用
实例
create table t5 (
dt datetime,
d date,
t time,
y year,
tt TIMESTAMP);
insert into t5 values(now(),now(),now(),now(),now());
+---------------------+------------+----------+------+
| dt | d | t | y |
+---------------------+------------+----------+------+
| 2020-03-29 23:23:30 | 2020-03-29 | 23:23:30 | 2020 |
+---------------------+------------+----------+------+
t5 | CREATE TABLE `t5` (
`dt` datetime DEFAULT NULL,
`d` date DEFAULT NULL,
`t` time DEFAULT NULL,
`y` year(4) DEFAULT NULL,
`tt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
给别的赋予 timesstamp 的自动更新的功能
create table t6(
dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
这样就赋予了 dt 自动更新的功能
效果如下:
+---------------------+------+
| dt | id |
+---------------------+------+
| 2020-03-29 23:51:05 | 1 |
| 2020-03-29 23:51:08 | 2 |
| 2020-03-29 23:51:11 | 3 |
| 2020-03-29 23:51:13 | 4 |
+---------------------+------+
4 rows in set (0.00 sec)
字符串
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
char(18) 最多只表示 255个字符
可以不写 长度
char ----------------这样默认长度是1
char(18)
-
定长存储, 不用计算 直接存
-
'alex'其余用空格补齐 ----->18
- 大于 18 位 的 只存前18位
适合用char 身份证号 手机号码 qq号 username12-18 password 32 银行卡
varchar --变长存储 节省空间
必须写长度
varchar(18)
- 变长存储 节省空间 ,存取速度慢
- 'alex' 'alex4'
适合varchar
评论
朋友圈
微博
例子:
create table t7 (
c1 char,
v1 varchar(8),
c2 char(8),
v2 varchar(8));
enum/set
enmu 单选行为
create table t8(
id int,
name char(18),
gender enum('male','female') ******
);
在里面的可以选, 不在里面的不能选
mysql> insert into t8 values(1,'sdas','male'),(2,'sasas',111);
+------+-------+--------+
| id | name | gender |
+------+-------+--------+
| 1 | sdas | male |
| 2 | sasas | |
+------+-------+--------+
2 rows in set (0.00 sec)
set 多选行为
create table t9(
id int,
name char(18),
hobby set('抽烟','喝酒','烫头')
);
insert into t9 values(1,'小屋','抽烟,喝酒,烫头');
'抽烟,喝酒,烫头' ---------->
--> 引号里面写 逗号 里面还不加引号 <---
不能选 范围外面的项
完整性约束
约束某一个字段 unsigned
无符号数 int
默认值 default
不能重复 unique
自增
主键
外键
10
约束 非符号数
create table t10(
id int unsigned)
;
11
非符号数 不为空
字符串 不为空
create table t11(
id int unsigned not null,
*****无符号数 不能为空
name char(18) not null
);
not null 不生效
设置严格模式:
不支持对not null字段插入null值
不支持对自增长字段插入”值
不支持text字段有默认值
直接在mysql中生效(重启失效):
mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
配置文件添加(永久失效):
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
not null不生效
设置默认值 12
create table t11(
id int unsigned not null,
name char(18) not null,
male enum('male','female') not null default 'male'
);
设置默认值 男性
default 在那个地方都 可以用
name char(18) not null default '小屋',
不能重复 unique -值 不能重复 null 可以写入多个
create table t13
(id int inique,
id2 int);
1 1
2 1
#(1 2) 写不进来了
null 1
null 1
写空 不算重复
联合唯一 unique
create table t14 (id int,
server_name char(12),
ip char(15),
port char(5),
unique (ip,port)
);
表示 两个联合唯一
192.168.1.1 3333
192.168.1.1 3334
非空+唯一约束
第一个表 被定义位非空+唯一 的那一列 会成为这张表的 primary key (默认第一个)
一张表只能定义一个主键
***PRI *** 是主键
id int primary key
---> 这是制定主键
create table t15 (
id int not null unique,
username_name char(18) not null unique
);
+---------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| username_name | char(18) | NO | UNI | NULL | |
+---------------+----------+------+-----+---------+-------+
PRI
学到 day38 9 约束

浙公网安备 33010602011771号