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构建