August Rush

一个还在努力成长的小火汁!

游龙当归海,海不迎我自来也。

We create our own demons.

You can reach me at augustrush0923@gmail.com
MySQL基本使用
发布:2020年10月26日 | 作者:augustrush | 阅读量: 388

SQL


SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过SQL操作Oracle,MS Server,MySQL,Sqlite等等所有的关系型数据库。


  • SQL 语句主要分为:

    • DQL: 数据查询语言,用于对数据进行查询,如 select

    • DML: 数据操作语言,对数据进行增加、修改、删除,如insert, update, delete

    • TPL: 事务处理语言,对事务进行处理,包括begin transaction, commit, rollback

    • DCL: 数据控制语言,进行授权与权限回收,如grant, revoke

    • DDL: 数据定义语言,进行数据库、表的管理,如create, drop

    • CCL: 指针控制语言, 通过控制指针完成表的操作, 如declare, cursor


数据类型


  • 使用数据类型的原则是: 够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间

  • 常用的数据类型如下:

    • 整数: int, bit

    • 小数: decimal

    • 字符串: varchar, char

    • 日期时间: date, time, datetime

    • 枚举类型(enum)


数值类型(常用)

类型 字节大小 有符号范围(Signed) 无符号范围(Unsigned)
TINYINT 1 -128~127 0~255
SMALLINT 2 -32768~32767 0~65535
MEDIUMINT 3 -8388608~8388607 0~16777215
INT/INTEGER 4 -2147483648~2147483647 0~4294967295
BIGINT 8 -9223372036854775808~9223372036854775807 0~18446744073709551615


字符串

类型 字节大小 示例
CHAR 0-255 类型:char(3) 输入'ab', 实际存储为'ab ', 输入'abcd',实际存储为'abc'
VARCHAR 0-255 类型:varchar(3) 输入'ab',实际存储为'ab', 输入'abcd',实际存储为'abc'
TEXT 0-65535 大文本


日期时间类型

类型 字节大小 示例
DATE 4 '2020-10-26'
TIME 3 '15:30:30'
DATETIME 8 '2020-10-26 15:30:30'
YEAR 1 '1998'
TIMESTAMP 4 '1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC


  • 特殊说明的类型如下:

  • decimal表示浮点数,如decimal(5,2) 表示共存5位数,小数占2位

  • char表示固定长度的字符串,如char(3), 如果填充'ab'时会补一个空格为'ab '

  • varchar表示可变长度的字符串,如varchar(3),如果填充'ab'时就会存储'ab'

  • 字符串text表示存储大文本,当字符大于4000时推荐使用

  • 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径


约束


  • 主键(primary key): 物理上存储的顺序

  • 非空(not null): 此字段不允许填写空值

  • 唯一(unique): 此字段的值不允许重复

  • 默认(default): 当不填写此值时会使用默认值。

  • 外键(foreign key): 对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常


数据库


  • 查看所有数据库
show databases;


  • 使用数据库
use 数据库名;


  • 查看当前使用的数据库
select database();


  • 创建数据库
create database 数据库名 charset=编码集;


  • 删除数据库
drop database 数据库名;


数据表


  • 查看当前数据库中所有表
show tables;


  • 查看表结构
desc 表名;


  • 创建表
create table table_name(
    column1 datatype constraint,
    column2 datatype [constraint],
    column3 datatype [constraint],
    ......
    columnN datatype [constraint]
);

# 创建班级表
create table classes(
    id int unsigned auto_increment primary key not null,
    name varchar(10)
);

# 创建学生表
create table students(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default '',
    age tinyint unsigned default 0,
    height decimal(5,2),
    gender enum('男','女''保密')
    class_id int unsigned default 0
);


  • 修改表
# 添加字段
alter table 表名 add 列名 类型;

alter table students add birthday datetime;

# 修改字段
alter table 表名 change 原名 新名 类型及约束; # 重命名版

alter table students change birthday birth datetime not null;

alter table 表名 modify 列名 类型及约束; # 不重命名版

alter table sutdents modify birth date not null;

# 删除字段
alter table 表名 drop 列名;

alter table students drop birthday;


  • 删除表
drop table 表名;

drop table students;


  • 查看表的创建语句
show create table 表名;

show create table classes;


数据增删改查

增加

格式: INSERT INTO tb_name VALUES (value),(...);


  • 主键列是自动增长,但是在全列插入时需要占位,通常使用0\default\null来占位,插入成功后以实际数据为准

  • 全列插入:值的顺序与表中字段的顺序对应

insert into 表名 values(...);

insert into students values(0, 'august', 'china', '2000-1-1');
  • 部分列插入: 值的顺序与给出的列顺序对应
insert into 表名(1, ...) values(1, ...);

insert into students(name, hometown, birthday) values ('August', '天涯海角', '2020-1-1');


  • 全列多行插入: 值的顺序与给出的列顺序对应
insert into 表名 values(...),(...)...;

insert into classes values(0,'c1'),(0,'c2'),(0,'c3');

insert into 表名(1,...) values(1,...),(2...)...;

insert into students(name) values('August'), ('Grecia'), ('Taylor');


删除


DELETE FROM tb_name [WHERE 条件判断]


delete from 表名 where 条件

delete from students where id=3;


修改


UPDATE tb_name SET col1=value1,... [where 条件判断]


update 表名 set 1=1,2=2,... where 条件

update students set gender=0,hometown='New York' where name='Taylor';

# 逻辑删除
# 设置isdelete的列,类型为bit,表示逻辑删除,默认值为0
update students set isdelete=1 where id=1;


查询(基本查询)


  • 查询所有列
select * from 表名;

select * from students;


  • 查询指定列
# 可以使用`as`为列或表指定别名
select 1 as 别名1,列2 as 别名2,... from 表名 as 别名3;

select name,age,gender from students;

select id as 序号, name as 名字, gender as 性别 from students;

select s.id, s.name, s.gender from students as s;

select distinct gender from students; # 消除重复行


备份


mysqldump -uroot -p 数据库名 > backup.sql


恢复


mysql -uroot -p 新数据库名 < backup.sql


  • 标签云

  • 支付宝扫码支持一下

  • 微信扫码支持一下



基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建

版权所有 © 2020-2021 August Rush

京ICP备20007446号-1 & 豫公网安备 41100202000460号

网站地图 & RSS | Feed