My First Post
MySql 数据库学习笔记
基础概念
数据库管理系统 DBMS,主要用于帮助实现对文件夹中的文件进行操作。
本质就是对于文件的管理,计算机发送指令给 mysql,mysql 再去解析指令,进行相应的操作。
mysql 的学习路径
- 创建数据库
- 创建表结构
- 创建账号并且授权
- 基于 pymysql 链接数据库
- 基于 pymtsql 像 mysql 发送指令
类比
数据库管理(类似文件夹)
表管理(类似 excel 中的表)
数据行管理(类似 excel 中的数据行)
指令
数据库操作
-
查看所有数据库
show databases;
-
创建数据库并且指定字符集
create database testdb default charset utf8 collate utf8_general_ci;
-
删除数据库
drop database testdb;
-
进入数据库
use testdb;
-
查看表
show tables;
-
查看表结构
desc testdb;
-
查看字符集
show charset;
数据表操作
-
创建表结构
create table 表名 ( 列名 类型, 列名 类型, 列名 类型 ) default charset=utf8
类型后面可以跟着多个参数
primary key
主键not null
不允许为空default <value>
给与默认值auto_increment
自增 -
删除表
drop table tb1; -- 删除表 delete from tb1; -- 清空表数据 truncate table tb1; -- 清空表数据,无法回滚
-
修改表
-
添加列
alter table tb1 add 列名 类型; alter table tb1 add 列名 类型 default 默认值; alter table tb1 add 列名 类型 not null default 默认值; alter table tb1 add 列名 类型 not null primary key auto_increment;
-
删除列
alter table tb1 drop column 列名;
-
修改列类型
alter table tb1 modify column 列名 类型;
-
修改类型和名称
alter table tb1 change 原列名 新列名 类型;
-
修改默认值
alter table tb1 alter 列名 set default 默认值;
-
删除默认值
alter table tb1 alter 列名 drop default;
-
-
常见数字列类型
-
int[m][unsigned][zerofill]
int 可以是有符号的,取值范围是 -2147483648 - 2147483647,unsigned 表示无符号 zerofill 表示前方补多少个 0
-
tinyint[m][unsigned][zerofill]
有符号,取值范围:-128 - 127
无符号,取值范围:0 - 255
-
bigint[m][nusigned][zerofill]
长数字
-
decimal[m[,d]][unsigned][zerofill]
准确的小数值,m 是数字总个数,d 是小数点后个数,m 最大值为 65,d 最大值为 30 。
-
-
字符串类型
-
char(m)
定长字符串,最多可以存放 255 个字符。
-
varchar(m)
变长字符串,最多可以存放 65535 个字节。
-
text
用于保存长文本和大字符串。
-
-
时间类型
-
datetime
、timestamp
格式:
YYYY-MM-DD HH:MM:SS
Datetime 不会对输入的时间做任何改变,timestamp 会把客户端插入的时间转换成 utc 进行存储,查询的的时候又转化为客户端的时区进行返回。
-
time
、date
时间和年月日
-
增删改查
-
新增数据
insert into 表名(列名) values(对应的值),(对应的值);
-
删除数据
delete from 表名; delete from 表名 where 条件; delete from 表名 where 条件 and 条件;-- 条件支持布尔运算
-
修改数据
update 表名 set 列名=值; update 表名 set 列名=值 where 条件;
Concat() 函数可以用于拼接字符串
-
查询数据
select * from 表名; select * from 表名 where 条件;
防止 SQL 注入
在开发中,不要使用字符串格式化,建议使用 pymysql 的一个方法。
cursor.execute("select * from user where name=%s and passwd=%s", [name, passwd])
可以使用 fetchone()
或者 detchall()
获取返回值。