mysql总结
1.创建数据库开始
CREATE DATABASE 数据库名称 (这样会使用mysql默认的字符集)
2.创建指定字符集的数据库
CREATE DATABASE 数据库名称 CHARSET=utf8/gbk/gb2312
3.修改数据库
ALTER DATABASE 数据库名称 CHARSET=字符集
表的创建
数据库的三大引擎Innodb、MYSIAM、MEMARY
数据库字段:
三大类:
字符串:char、varchar、longtext、mediumtext
日期:date、year、time、datetime、timestamp ...
数值:int、smallint、tinyint、mediumint
约束:
not null:设置制定的列不能为null !=>空字符
default : 给指定的列设置一个默认值,如果插入数据的时候不给
当前列设置值,就会使用默认值,如果设置了值,就会使用设置的值。
primary key:主键,不能为空、唯一
unique:唯一,可以为null
foreign key:外键,外键是摸一个表的主键,不为null,
加强表与表之间的数据lianxi(关系)
属性:
auto_increment 自增:
可以指定步长和起始值
会话级步长:
set session auto_increment_increment = 步长
全局的步长设置:
set global auto_increment_increment = 步长
给一个表指定一个起始的自增的值
ALTER TABLE 表名 auto_increment = 起始值
一个表里面只能有一个自增,并且都是给主键设置的。
创建表:
CREATE TABLE 表名(
字段名 类型 约束 属性 (自增),
字段名 类型 not null,
字段名 类型 nti null default 默认值,
primary key(列名)/primary key(列名,列名)
unique key(列名)/unique key(列名、列名)
constraint FK_ID foreign key(列名) references 主表(primary key)
)engine=数据引擎 default CHARSET=utf8;
修改表
ALTER TABLE 表名 charset= ...
重命名
RENAME TABLE 旧表名 TO 新表名
修改表名
ALTER TABLE 旧表名 RENAME AS 新表名
修改表中的字段
ALTER TABLE 表名 change 字段名 新字段名 类型 约束 属性;
不改变旧字段名的情况下修改(类型、约束等)
ALTER TABLE 表名 change modify 字段名 类型 约束 属性
添加新的列
ALTER TABLE 表名 ADD 字段名 类型 约束 属性
删除某一列
ALTER TABLE 表名 drop 字段名
删除表
DROP table 表名
删除数据库
DROP DATABASE 数据库名
查看当前选择的数据库
select DATABASE()
切换数据库
use 数据库名
增:
全列插入
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
select * from tablename where 列=值
select * from tablename where 列>值
select * from tablename where 列<值
is null:
select * from tablename where 列 is null
or:
select * from tablename where 列=值 or 列!=值
in:
select * from tablename where 列 in (值,值,值...)
and
select * from tablename where 列=值 amd 列=值
not:
select * from tablename where 列 not in(值。值,值...)
select * from tablename where 列 not is null
between and
select * from tablename where 列 between 值 and 值
排序
select * from tablename order by 列
select * from tablename order by 列 desc
多个列排序
select * from tablename order by 列 desc,列
聚合函数
count(*):计算所有行
avg():计算列的平均值
sum():求和,计算列的值的和
max():计算列的最大值
min():计算列的最小值
通配符
%:匹配任意字符,任意次数
_:匹配任意字符,必须有且仅有一次
一般跟LiKE匹配使用
select 列,列 from tablename where 列 like '条件%'
select 列,列 from tablename where 列 like '条件_'
python re模块:
complie
match:从开头匹配,如果开头就不符合直接返回None,如果匹配到
立即返回结果,单次匹配,取值使用group()
search:从头开始匹配,在整个字符串中查询,只要又符合规则的就立即返回
单词匹配,如果没有符合规则的就返回None
findall:在整个串中,返回所有符合规则的结果,是一个列表
sub:替换
split:分割字符串,返回列表
finditer:跟findall功能一致,返回结果有区别,返回的是一个可选的值
r:原始字符串
\:转义符
表的设计:
范式:
1nf:
列不可再分
2nf:
一个表必须要有一个主键(可以由单个列或多个列构成),非主键的列必须完全依赖于主键,而不是部分依赖于主键
3nf:
非主键的列,必须直接依赖主键,不能出现传递关系(非主键的列A,依赖与非主键的列B,非主键的列B依赖于主键)
E-R模型:
E: 实体,一个实体其实就是指一张表
R: 关系,表与表之间一个数据的联系
一对一:
一对多:
多对多:
查询语句的顺序:
SELECT、列,列、FROM、表名、WHERE、条件、GROUP BY、列,列、HAVING、条件、ORDER BY、列 (ASC|DESC)、LIMIT start,count
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);
删除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table bbb change nnnnn hh int;
修改列名: SQLServer:exec sp_rename't_student.name','nn','column';
修改列名: Oracle:lter table bbb rename column nnnnn to hh int;
修改列属性: alter table t_book modify name varchar(22);
修改表: ALTER TABLE 表名 charset= ...