欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库 MySQL

程序员文章站 2022-04-08 12:25:40
...

数据库 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> create 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. 空间类型 (了解 不做讲解)

数值类型

类型 所占字节 范围
tinyint 1 -128~127
smallint 2个字节 -32768-32767
mediumint 3个字节 -8388608~8388607
int 4个字节 -2147483648~2147483647
bigint 8个字节

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

字符串

类型 字节 范围
char 0-255字节 定长
varchar 0-255字节 变长
tinyblob 0-255字节 不超过255字节的二进制字符串
tinytext 0-255字节 短文本字符串
blob 0-65535字节 二进制形式的长文本
text 0-65535字节 长文本
mediumblob 0-16777215字节 二进制形式的中等长度文本
mediumtext 0-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类型

时间类型

类型 字节 范围
date 3个字节 2021-01-04
time 3个字节 16:08:58
datetime 8个字节 2021-01-04 16:08:58
timestamp 4个字节 自动存储记录的修改时间
year 1个字节 年份

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_ci Unicode 多语言 不区分大小写
gbk_chinese_ci 简体中文 不区分大小写

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

mysql 没有 utf-8 只有utf8

相关标签: 使用方法 mysql