分享

数据库 MySQL基础

 印度阿三17 2021-01-08

数据库 MySQL

  • 健康码
  • 公安系统
  • 支付宝微信支付
  • 酒店
  • 12306 买票
  • 网易云 收藏歌曲
  • 手机通话记录 地铁卡余额
  • 吃鸡 、王者荣耀 皮肤 装备

Mysql 5.7当前主流数据库

  • mysql 被Oracle 收购
  • sqlserver
  • oracle
  • sqlite3

数据库语法都差不多

mysql、sqlite 开源免费

安装数据库

五个基本单位

  • 数据库服务器 mysql server
  • 数据库
  • 数据表
  • 数据字段
  • 数据行

娱乐化讲解表关系

数据库的操作

mysql 以;为结束

连接数据库

mysql -u  用户名 -p密码 
mysql -u  用户名 -p   
输入密码  

mysql -u root -h ip地址 -p 
输入密码  

-u 用户名
-p密码
-h host ip地址

退出数据库

exit

创建数据库

mysql>   database 数据库名;
Query OK, 1 row affected (0.00 sec)


mysql> create database if not exists 数据库名;
Query OK, 1 row affected (0.01 sec)

查看数据库

show databases;

删除数据库

不要删除 mysql数据库

drop database 数据库名;

选中数据库

mysql> use 数据库名字;
Database changed

查看里边的数据表

show tables;

数据表操作

use 数据库名字;
show tables;

查看表结构

mysql> desc 表名;
 ---------- -------------- ------ ----- --------- ---------------- 
| Field    | Type         | Null | Key | Default | Extra          |
 ---------- -------------- ------ ----- --------- ---------------- 
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | NO   |     | NULL    |                |
| password | varchar(255) | NO   |     | NULL    |                |
| age      | tinyint(4)   | YES  |     | NULL    |                |
 ---------- -------------- ------ ----- --------- ---------------- 
4 rows in set (0.00 sec)
Field 字段名  
Type  字段的类型  int 整数   varchar 字符串  tinyint微整型     
Null 字段是否可以为空   
Key  主键  外键 等     
Default 默认值    
Extra 额外的  比如自动递增 

查看创建表的语句

mysql> show create table 表名;
 ------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| Table | Create Table                                                                                                                                                                                                                      |
 ------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| users | CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `age` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
 ------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
1 row in set (0.00 sec)


engine mysql 引擎   

charset mysql 编码   

创建数据表

mysql> create table if not exists 表名(字段名 类型(长度),字段2 类型(长度),字段3 类型(长度))engine=innodb default charset=utf8mb4; # mysql 只有 utf8 没有utf-8
Query OK, 0 rows affected (0.04 sec)

mysql> create table if not exists person(id int(11),username varchar(64),password varchar(128))engine=innodb default charset=utf8mb4;
Query OK, 0 rows affected (0.04 sec)

删除表

drop table 表名;  

数据表字段操作

alter table 表名

修改表字段类型

alter table 表名 modify 字段名 类型(长度);

mysql> alter table 表名 modify 字段名 类型(长度);
mysql> alter table users modify age bigint(10); #示例

增加表字段

alter table 表名 add column 字段名 类型(长度); # column 可写可不写

mysql> alter table users add sex tinyint; #默认加到最后面 
mysql> alter table users add column tel varchar(11) after password; #指定加到某个字段的后边
ysql> alter table users add column height varchar(11) first; #加到第一个位置   

删除表字段

alter table 表名 drop column 字段名; #column 可加 可不加

mysql> alter table users drop column sex;

修改表字段

alter table 表名 change 原表名 新名字 类型(长度);

mysql> alter table users change username user_name varchar(128);

change、add 、 modify 都支持后边 加 first 、after

mysql> alter table users modify tel char(11) first;

修改表名

alter table 旧表名 rename 新表名;

数据类型 、引擎、字符集 、索引

数据类型

  1. 数值类型
  2. 字符串类型
  3. 日期类型
  4. 复合类型
  5. 空间类型 (了解 不做讲解)

数值类型

类型所占字节范围
tinyint1-128~127
smallint2个字节-32768-32767
mediumint3个字节-8388608~8388607
int4个字节-2147483648~2147483647
bigint8个字节

ps: 性别 要么 男 要么 女用 0表示女 1表示男 tinyint就够了

​ 年龄 要使用无符号整型 年龄没有负数

​ 在实际开发过程中 为了避免浪费空间 选择合适的类型

浮点类型

类型字节范围
float(m,d)4单精度 m 总个数,d 小数位 float(10,2)
double(m,d)8双精度m 总个数,d 小数位 double(10,2)
decimal(m,d)存储的是字符串的浮点数

ps: 浮点型是非精确值 会存在不太准确的情况

​ decimal 定点数 mysql内部 本质上字符串存储 开发过程中我们 要对 金额等精度要求高的浮点数进行存储 建议使用decimal

字符串

类型字节范围
char0-255字节定长
varchar0-255字节变长
tinyblob0-255字节不超过255字节的二进制字符串
tinytext0-255字节短文本字符串
blob0-65535字节二进制形式的长文本
text0-65535字节长文本
mediumblob0-16777215字节二进制形式的中等长度文本
mediumtext0-16777215字节中等长度文本
longblob二进制形式的极大长度文本
longtext极大长度文本
varbinary(M)允许长度0-M个字节的定长字符串指的长度 1个字节
binary(M)允许长度0-M个字节的定长字符串

ps: char(100) 如果 字符串长度只有10 剩下的90用空格补齐

​ varchar(100) 如果字符串长度只有10 剩下的90不用空格补齐 别的字符串可以占用

​ text blob : text 普通字符串不区分大小写

​ blob 二进制字符串 区分大小写

​ 大小写修饰符 不适用于 TEXT blob类型

时间类型

类型字节范围
date3个字节2021-01-04
time3个字节16:08:58
datetime8个字节2021-01-04 16:08:58
timestamp4个字节自动存储记录的修改时间
year1个字节年份

ps:

1. 网站、app 很多人喜欢用int 来存储时间  int存的是时间戳 方便计算  哪怕前端语言后端语言不一样 只需要将时间转化一下就好   
2.  也有人喜欢用datetime 站在数据库角度 方便查看   
3. 具体根据实际情况选择 

总结

  1. 论占据空间的大小 从大到小 字符串 日期 数值
  2. 根据实际情况选择合适的类型 避免浪费 但是也要考虑到后期的扩展情况

复合类型

类型说明举例
set集合set(‘num1’,‘num2’)
enum枚举enum(‘num1’,‘num2’)

ps:区别 enum只允许从一个集合中取一个

​ set 允许从一个集合中取任意多个

字段其它属性设置

unsigned 主要适用于 整型 和浮点型 使用无符号 也就说 前面没有 负号 -

​ 可以是 存储的位数更长 以tinyint为例子 -128~127 使用无符号 可以存储 0-255个长度

​ 只需要在创建表的时候 整型或者浮点字段后边加上 unsigned

​ create table user(id int(11) unsigned);

zerofill 0 不是空格 使用它可以阻止里边填负数 在创建表的时候 在int 或者浮点 后边加上 zerofill

default 设置默认值

​ mysql> alter table test1 add column age tinyint default 18;

not null 不能为空 精确的说法是 无 其中 0 空格 空字符串’’ 不代表无

字符集

  • 常用字符集
  • 数据库我们用什么字符集

常用字符集

  1. ascii 使用指定的7位或者 8位 二进制数(只包含 0 1)组合来表示128或者 256种可能的字符

    https://www.cnblogs.com/xmxu/archive/2012/07/10/2584032.html 对照表

  2. GBK GB2312的升级版 中国定义的 汉字编码规范 早期 就是gb2312 gbk向下兼容 gb2312

  3. Unicode(统一码 万国码 单一码) 国际定义可以容纳世界上所有的文字和符号的字符编码方案,满足跨语言、跨平台文字处理方案

  4. utf-8(通用转换格式) 万国码 针对 Unicode的可变长度字符编码 空间比ASCII 大一倍 对ASCII 来说 高字节 0 没有任何意义 为了解决这个问题 出现了中间格式字符集 也叫通用转换格式

中文常用的字符集

  • gbk
  • utf-8
开发中
字符集说明
utf8_general_ciUnicode 多语言 不区分大小写
gbk_chinese_ci简体中文 不区分大小写

ci 存储 排序的时候 不区分大小写

mysql 没有 utf-8 只有utf8

来源:https://www./content-2-814301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多