数据库
mysql服务相关
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
客户端连接
mysql -u 用户名 -p
mysql -h IP -u 用户名 -p
1.创建数据库开始
CREATE DATABASE IF NOT EXISTS 数据库名称 (这样会使用mysql默认的字符集)
2.创建指定字符集的数据库
CREATE DATABASE IF NOT EXISTS 数据库名称 CHERSET=utf8/gbk/gb2312 .....
3.修改数据库
ALTER DATABASE IF NOT EXISTS 数据库名称 CHARSET=字符集
4.删除数据库
DROP DATABASE 数据库名
5.查看当前选择的数据库
SELECT DATABASE()
6.切换数据库
USE 数据库名
9.查看数据库中的表
show tables;
表的创建
数据库的三大引擎Innodb、MYSIAM、MEMARY
数据库字段:
三大类:
字符串:char、varchar、longtext、mediumtext、text
日期:date、year、time、datetime、timestamp....
数值:int、smallint、tinyint、mediumint
#约束:
not null:设置指定的列不能为nill !=> 空字符串
default : 给指定的列设置一个默认值,如果插入数据的时候
不给当前列设置值,就会使用默值,如果设置了值,就会使用
设置的值。
primary key:主键,不能为null、唯一
unique:唯一,可以为null
foreign key:外键,外键是某一个表的主键,不为null,
加强表与表之间的数据联系(关系)
属性:
auto_increment 自增
可以指定指定步长和起始值
会话级步长:
set session auto_increment_increment = 步长
set session auto_increment_offset=10; 会话级别的起始值
全局的步长设置
set global auto_increment_increment = 步长
set global auto_increment_offset=10;全局级别的起始值
#给一个表指定一个起始的自增的值
ALTER TABLE 表名 auto_increment = 起始值
#一个表里面自能有一个自增,并且都是给主键设置自增.
ERROR 1075 (42000): Incorrect table definition; there
can be only one auto column and it must be defined as a key
CREATE TABLE IF NOT EXISTS 表名(
字段名 类型 约束 属性(自增),
字段名 类型 auto_increment primary key,
字段名 类型 not null unique key,
字段名 类型 not null default 默认值,
primary key(列名)/primary key(列名,列名)
unique key(列名)/unique key(列名、列名)
constraint FK_ID foreign key(列名) references 主表(primary key)),
constraint FK_XX foreign key(XX) references 主表(primary key))
)engine=数据库引擎 default charset=字符集(utf8 ....);
#查看表的创建语句
show create table tablename;
show create table tablename \G;
#查看表的结构
DESC tablename;
#修改表
ALTER TABLE 表名 charset=...;
#(重命名)
RENAME TABLE 旧表名 TO 新表名;
#修改表名
ALTER TABLE 旧表名 RENAME AS 新表名;
#修改表中的字段旧字段名
ALTER TABLE 表名 change 字段名 新字段名 类性 约束 属性;
#在不改变的情况下修改(类型、约束等)
ALTER TABLE 表名 change modify 字段名 类型 约束 属性;
#修改表中内容
UPDATE class SET 要改后的 where 条件;
#删除表中全部内容
DELETE FROM 表名;
TRUNCATE TABLE 表名;
#添加新的列
ALTER TABLE 表名 ADD 字段名 类性 约束 属性;
#删除某一列
ALTER TABLE 表名 DROP IF EXISTS 字段名;
#删除表
DROP TABLE 表名;
CURD
增:
#全列插入(注意:我们插入的数据顺序必须要跟列对应)
INSERT INTO tablename VALUES(值,值,值);
#非全列插入(指定要插入哪些列)
INSERT INTO tablename(列,列,列) VALUES(值,值,值);
#多行插入
INSERT INTO tablename(列,列,列) VALUES(值,值,值),(值,值,值),(值,值,值),...;
删:
#删除指定数据
DELETE FROM tablename WHERE 条件;
#删除全部数据
DELETE FROM tablename;
改:
#修改表中某一列的全部值(不要这么去做)
UPDATE tablename SET 列名=值;
#根据条件修改数据
UPDATE tablename SET 列名=值 WHERE 条件;
UPDATE tablename SET 列名=值,列名=值,.. WHERE 条件;
查:
select * from tablename;
select 列,列,列,... from tablename;
#去重DISTINCT
select distinct 列 from tablename;
#whereselect * from tablename where 列=值;select * from tablename where 列>值;select * from tablename where 列<值;select * from tablename where 列<=值;select * from tablename where 列>=值;# 不等于select * from tablename where 列<>值;select * from tablename where 列!=值;#is nullselect * from tablename where 列 is null;#orselect * from tablename where 列=值 or 列!=值;#inselect * from tablename where 列 in(值,值,值,值,..);#and(同时满足条件)select * from tablename where 列=值 and 列!=值;#notselect * from tablename where 列 not in(值,值,值,值,..);select * from tablename where 列 not is null;#BETWEEN...AND... 在某一个范围(左右都闭合)select * from tablename where 列 between 值 and 值;#排序 order by#升序(ASC)select * from tablename order by 列 (默认是升序)select * from tablename order by 列 ASC;#降序(DESC)select * from tablename order by 列 DESC;#多个列做排序select * from tablename order by 列 (ASC|DESC),列 (ASC|DESC);#聚合函数COUNT(*)|COUNT(1):计算所有行AVG():计算列的平均值SUM():求和,计算列的值的和MAX():计算列的最大值MIN():计算列的最小值#通配符%:匹配任意字符,任意次数_:匹配任意字符,必须有且仅有一次一般跟LIKE配和使用select 列,列 from tablename where 列 like '条件%'select 列,列 from tablename where 列 like '条件_'正则:. \d \D \s \S \w \W [0-9] [0-56-9] [^0-9] ^[0-9]$ ^ \A \Z * + ? {m,n} {n} {n,} {,m}非贪婪: *? +? ?? {m,n}?| () (|) (?P) (?P=name1) \num
python re模块
complie
match:从起始位置匹配,如果开头就不符合直接返回None,如果匹配到值
立即返回结果,单次匹配,取值使用group()
search:从头开始匹配,在整个字符串中查询,只要又符合规则的就立即返回,
单次匹配,如果没有符合规则的就返回None
findall:在整个串中,返回所有符合规则的结果,是一个列表
sub:替换
split:分割字符串、返回列表
finditer:跟findall功能一致,返回结果有区别,返回的是一个可迭代的对象
r:原始字符串
\:转义符
##分组:
group by
#单个去做分组,只能返回分组的名称
#group by 跟聚合函数使用
select count(1),列 from tablename group by 列;
select count(1),列,列 from tablename group by 列,列;
#group_concat()
select count(1),列,group_concat(非分组的某个列) from tablename group by 列;
#with rollup
select count(1),列 from tablename group by 列 with rollup;
#HAVING:过滤分组
HAVING后面跟条件,过滤分组的结果
select count(1),列 from tablename group by 列 HAVING count(1) > 2;
#LIMIT
select * from tablename limit 6;
select * from tablename limit 7,6;
总结:
select 列,...
from tablename
where 条件
group by 分组
having 过滤分组
order by 排序(ASC|DESC)
limit 限制返回条数(设置起始位置和返回条数)
#创建计算字段
使用函数或者运算符去计算出一个结果,把这个结果作为一个列返回
select sum(age)/count(1) as avg_age from tablename
select 函数() as 别名 from tablename
数学函数
字符串函数
日期函数
条件判断函数(
IF(条件,r1,r2)、
IFNULL(r1,r2)、
case when 条件 then 结果1 else 结果2 end
)
加密函数 (PASSWORD()、MD5())
表的设计:
范式:
1nf:列不可再分
2nf:一个表必须要有一个主键(可以由单个列或多个列构成),
非主键的列必须完全依赖于主键,而不是部分依赖于主键
3nf:非主键的列,必须直接依赖主键,不能出现传递关系
(非主键的列A,依赖与非主键的列B,非主键的列B依赖于主键)
E-R模型:
E:实体,一个实体其实就是指的一张表
R:关系,表与表之间的一个数据的联系
一对一:
一对多:
多对多: