数据库语法都差不多
mysql、sqlite 开源免费
略
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);
mysql> alter table users modify tel char(11) first;
alter table 旧表名 rename 新表名;
类型 | 所占字节 | 范围 |
---|---|---|
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. 具体根据实际情况选择
类型 | 说明 | 举例 |
---|---|---|
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 空格 空字符串’’ 不代表无
ascii 使用指定的7位或者 8位 二进制数(只包含 0 1)组合来表示128或者 256种可能的字符
https://www.cnblogs.com/xmxu/archive/2012/07/10/2584032.html 对照表
GBK GB2312的升级版 中国定义的 汉字编码规范 早期 就是gb2312 gbk向下兼容 gb2312
Unicode(统一码 万国码 单一码) 国际定义可以容纳世界上所有的文字和符号的字符编码方案,满足跨语言、跨平台文字处理方案
utf-8(通用转换格式) 万国码 针对 Unicode的可变长度字符编码 空间比ASCII 大一倍 对ASCII 来说 高字节 0 没有任何意义 为了解决这个问题 出现了中间格式字符集 也叫通用转换格式
字符集 | 说明 | |
---|---|---|
utf8_general_ci | Unicode 多语言 不区分大小写 | |
gbk_chinese_ci | 简体中文 不区分大小写 |
ci 存储 排序的时候 不区分大小写
mysql 没有 utf-8 只有utf8