数据库 mysql 命令(总结)与正则

Ubuntu下安装mysql
apt update
sudo apt-get install mysql-server mysql-client
启动 service mysql start
停止 service mysql stop
重启 service mysql restart
查看mysql服务状态 service mysql status
允许远程连接
找到mysql配置文件并做如下修改:允许远程连接
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
刷新权限 FLUSH PRIVILEGES;
退出命令行 exit quit
进入mysql mysql -u root -p;
创建数据库

  1. 直接创建:create database 名称;(这样会使用mysql默认的字符集)  create schema 名称;
  2. 通过字符集来创建: create database 名称 charset=utf8;
  3. 创建数据库前判断数据库是否存在: create database if not exists 名称;
    查看数据库:show databases;
    选择数据库:use 数据库名称;l
    查看当前所在数据库:select database();
    1
    删除数据库:例如:drop database 数据库名称;
    如果删除的数据库不存在,则会报错,的解决方:例如:drop database if exists 名称;

查看所有的字符集:show charset;
查看当前数据库编码格式: show variables like 'character_set_database';
添加数据库的utf8默认编码:alter database 数据库名 character set utf8;
查询MySQL中支持的存储引擎 show engines;
查看数据库的默认的搜索引擎:show variables like ' default_storage_engine ';
修改默认存储引擎 set default_storage_engine=innodb
创建表:create tables 表的名字;列表的名字和定义用逗号隔开;(userid int not null auto_increment),(name char(10) not null);
查看表:show tables;
查看表的详细信息:show create table 名称;
查看表的结构:desc 数据表名;
查看某一列的的结构: desc 数据表名 列名; 例如: desc oppo name;
创建表时如果一个表存在的时候还创建,应在表名后给出 if not exists 检查表是否存在,仅在表名不存在的时候创建它;
自增长:auto_increment ;
主键:primary key;
设置默认值:default
例如:phone varchar(11) not null default '12345678909';

更新表时:alter table ;
添加新字段(列):例如:alter table 表名 add age int default 10;
修改字段的值: alter table 表名 modify 字段 修改后的类型;
修改字段名(列):alter table 表名 change 旧字段名 新字段名 数据类型 约束 属性;
在不改变旧字段名的情况下修改(类型,复制);
例如:alte table 表名 change modify 字段名,匹配;类型 约束 属性;
删除字段(列):例如:alter table 表名 drop phone ;
修改表名:例如:alter table 旧表名 rename as 新表名;
修改表:alter table 表名 charset=.......;
重名表名:例如:rename table 旧表名 To 新表名;
删除表:例如:drop table 表名;
删除一个不存在的表会报错,如果不报错如下;
例如:drop table if exists 数据表名;
复制表:例如:create table if not exists 原名字 like 复制后的新名字;
crud  对表的增删改查
增 insert into (注意:我们插入的数据顺序必须要跟列对应)
1.完全插入:例如:insert into 表名 values( 108401,' 小甜甜 ', 20,1,' 1245678999 ');
2.选择插入:例如:insert into 表名(userid,name,age) values( 10000,' 花花 ',19);
3.多行插入:例如:insert into 表名(userid,name) values(19999,' 葡萄 '),(18888,‘ 辣椒 ’);
查看已经插入的数据 select * from 表名 (表示所有);
将一个表复制到另一个表中 insert into 新表 (列名,列名...) select 列名,列名... from 原表 ;
修改 跟新 update
1.跟新单个字段(列) update 表名 set name = '娜娜' , age = 19 where id = 12345;
2.跟新多行 : update 表名 set name = ' 娜娜 ' ;(修改表中某一列的全部值 尽量不要去做)
3.跟新多个字段(列) update 表名 set name = ' 娜娜 ', age = 19 where id = 18888 ;
删除数据 delete
删除特定的一行:例如:delete from 表名 where id = 10010 ;
删除所有行:例如:delete from 表名 (不能轻易做);
查询
  查询所有 select * from 表名 ;
  查询某一个 select * from 表名 where id = 13333 ;
  查询年龄这个列 select age from 表名 where id = 19999;
使用限定的方式查找,不进入数据库就可以查询到表的信息
  select * from 数据库名.表名;
使用 distinct 去重,返回不重复的列的值
  select distinct age from 表名;
把一个表插入到另一个表中:例如:insert into 表 (列名,列名...) select 列名,列名... from 表
数据库的查询 where(过滤)
  查询一行 select * from 表名 where age = 6  ;
select 字段名 from 表名 WHERE 条件;
where 条件查询和运算符 
  = 等于 select * from 表名 where age = 6 ;
<> 不等于, != 不等于,
  < 小于, <= 小于等于, > 大于, >= 大于等于,
  between ... and 在两者之间(包含边界值);(左右闭合)
例如:select name ,age from 表名 where age between 5 and 30 ;
  is null 判断某一列的数据,如果包含null ,则返回记录;
  例如:select * from 表名 where phone is null ;
and 链接查询条件,查询的数据要全部满足
  例如:select name from 表名 where userid>=18004 and age>99;
or 链接查询条件,查询的数据只要满足其中一个即可
  例如:select name from 表名 where userid>=18004 or age>90;
in 操作符 (相当于 or ) in (条件1,条件2,条件3);
  SELECT name FROM customers WHERE userid IN(10011,10013);   
NOT操作符
  例如:> select name from 表名 where userid not in(10011,10013);
排序 order by
升序(asc): 例如:select * from 表名 order by age(列)(默认的是升序的);
降序(desc): 例如:select * from 表名 order by age(列)desc;
多个列做排序:例如:select * from 表名 order by 列(asc|desc),列(asc|desc);
聚合函数
count(
) | count(1) :计算所有行;
avg() :计算列的平均值;
max() :计算列的最大值;
min() :计算列的最小值;
sum() :求和 ,计算列的总和;
通配符
% :匹配任意字符,任意次数;
_ : 匹配任意字符,必须有仅且有一次;
一般和ike配合使用
select 列 ,列 from 表名 where 列 like ‘赵%’;
select 列 ,列 from 表名 where 列 like ‘赵%’;
正则
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次,最少m次,最大n次
非贪婪模式匹配:尽可能少的匹配
转义符号 \
^ 匹配字符串以...开头
$ 匹配字符串以...结尾
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
python re 模块
complie: 生成一个正则匹配规则对象。
match:丛起始位置匹配,单次匹配,如果匹配不成功直接返回none,如果匹配成功就立即返回,
,取值使用group();
search:从头开始匹配,在整个字符串中查询,只要符合规则就立即返回,
单词匹配,如果不符合返回NONE ;
sub:字符串替换;
split:分割字符串,返回列表;
findall:在整个串中,返回所有符合规则的结果,是一个列表;
finditer:跟findall功能一样,都是匹配出所有符合正则规则的结果,返回结果有区别,返回的是一个可迭代对象;
r:原始字符串;
\:转义符;
分组 group by
单单只是用分组没有意义;
分组跟聚合函数的使用,统计每一个分组下有多少人(有多少条记录)
SELECT count() as total,age FROM studentinfo GROUP BY age;
统计分组的信息
SELECT count(
), avg(age),min(age),sum(age),gender FROM studentinfo GROUP BY gendeou
group by 与 group_concat(列)(表示分组之后)
group_concat(字段名)可以作为一个输出字段来使用,
表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
SELECT gender,group_concat(student_name),group_concat(age) FROM studentinfo GROUP BY gender;
group by + with rollup (统计总数)
在最后新增一行,来记录当前列里所有记录的总和
SELECT gender,count() FROM studentinfo GROUP BY gender with rollup;
having过滤分组,
每个分组下的记录(行)大于2,才返回
SELECT count(
),age FROM studentinfo GROUP BY age HAVING count() >2;
SELECT count(
),age,gender FROM studentinfo GROUP BY age,gender HAVING gender =1 ;
跟order by 配合使用
SELECT count(),age,gender FROM studentinfo GROUP BY age,gender HAVING gender=1
ORDER BY age DESC;
having后跟多条件筛选分组
SELECT count(
),age,gender FROM studentinfo GROUP BY age,gender HAVING gender=1
AND age > 67 ORDER BY age DESC;
限定查询 limit
1.如果LIMIT 后面只跟了一个数字,表示限制返回多少条,并且从第一条开始。
SELECT * FROM studentinfo LIMIT 6; => SELECT * FROM studentinfo LIMIT 0,6;
  2.如果LIMIT 后面只跟了两个数字,第一个数字表示偏移量(不包含当前数字对应的这一行),
后一个数字表示限制返回多少条。
SELECT * FROM studentinfo LIMIT 6,6;

从第6条开始查询,返回6条结果。不包含第六条。返回(7条-12条)

   select * from 表名 limit 7,12;

我们如何去实现一个分页功能,输入对应的页码m,每一页返回20条数据,

   SELECT * FROM studentinfo LIMIT (m-1)*20,20

取年龄最大的

   SELECT * FROM studentinfo ORDER BY age DESC LIMIT 1;

取年龄最小的

   SELECT * FROM studentinfo ORDER BY age LIMIT 1;

限定条件返回结果(LIMIT)

  SELECT count(*),age,gender FROM studentinfo GROUP BY age,gender HAVING gender=1 ORDER BY 
   age DESC LIMIT 2,2;

查询语句的顺序:
SELECT 列,列 FROM 表名 WHERE 条件 GROUP BY 列,列 HAVING 条件 ORDER BY 列
  (ASC|DESC) LIMIT start,count;
回顾
关于自增的扩展:
可以设置设置auto_increment一个起始值
ALTER TABLE 表明 AUTO_INCREMENT=180460
改变自增的步长
1.会话级别:
show session variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
修改步长:
SET SESSION auto_increment_increment=2(设置步长的值)
2.基于全局的设置:
show global variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
修改步长:
SET global auto_increment_increment=2(设置步长的值)
总结:
一个表里面只能有一个自增,并且一般都会设置主键为自增,
不然会报错:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

创建计算字段

   创建的计算字段原本并不存在我们的表里面。我们通过mysql的函数或者算术运算得到一个结果,
   我们把这个结果起一个别名,这个字段就是我们创建的计算字段。

加密函数

   1.PASSWORD('')     2.MD5('')

创建计算字段

   1.IF(x1,v1,v2) : x1:表示条件,如果满足返回v1,否则返回v2
   2.IFNULL(v1,v2) :if v1 not NUll,返回v1,否则返回v2
   3.CASE WHEN 条件 THEN 结果1 ELSE 结果2 END:当遇到某种条件,
   当WHEN后面的条件满足,返回THEN后面的结果1,否则返回结果2.

还有数字函数、字符串函数、日期、时间函数

三范式 、E-R

三范式
1NF:列不可再分(尽量细的去拆分每一列)
2NF:1.一个表必须要有一个主键(这个主键可以由单个列,或者多个列组成)
   2.非主键的列,必须完全依赖于主键,而不是及部分依赖于键
3NF:在第二范式的基础上,不能存在传递依赖,非主键的列,必须直接依赖于主键,而不能存在传递依赖的关系。
E-R模型
E:Entry 表示实体,其实就是根据某一个事物的体征,添加描述信息,我们将这些描述信息添加
在一个表(table)里面,那么这个表就相当于一个实体。
R:Relationship 关系,在这里其实就是指的表与表之间的关系
一对一:个人信息与身份证的信息例子;
一对多:班级与学生的例子;
多对多:很多学生选课的例子;
一对一:个人信息与身份证
  个人信息表
  create table userinfo(
id int auto_increment,
name varchar(10) not null,
idcard int not null,
primary key(id),
#外键:
CONSTRAINT FK_IDCARD(起个名字) FOREIGN KEY(idcard) REFERENCES IDENTIFITY(id)
);
  身身份证表ID
CREATE TABLE IDENTIFITY(
id int auto_increment,
id_num varchar(50) not null,
primary key(id)
);
一对多:班级与学生
学生表
CREATE TABLE studnets(
stu_id int auto_increment,
stu_name varchar(20) not null,
#班级
primary key(stu_id)
);
班级表
CREATE TABLE grade(
cls_id int auto_increment,
cls_name varchar(20) not null,
cls_desc varchar(255) not null,
cls_student_num int default 0,
primary key(cls_id)
);
多对多:选课
学生表
CREATE TABLE studnets(
stu_id int auto_increment,
stu_name varchar(20) not null,
#班级
primary key(stu_id)
);

课程
  CREATE TABLE courses(
cour_id int auto_increment,
cour_name varchar(20) not null,
primary key(cour_id)
)
如何设置外键?
1.首先要找表与表之间的关系。
2.班级表(id,name,主键为id)
3.学生表(id,name,主键id,clsid(外键)->班级表中的班级的主键)
创建学生表必须要有班级表
创建班级表
CREATE TABLE classes(
id int auto_increment,
name varchar(20) not null,
primary key(id)
)engine = innodb default charset=utf8
CREATE TABLE students(
id int auto_increment,
name varchar(20) not null,
clsid int,
primary key(id),
constraint FK_CLSID foreign key(clsid) references classes(id)
);

删除外键

ALTER TABLE students drop foreign key FK_CLSID;

添加外键

ALTER TABLE student ADD constraint FK_CLSID foreign key(clsid) references classes(id);

7]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,787评论 5 116
  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,155评论 0 33
  • 周一、周二、周三晚上思绪好多好多,晚上躺床上简直睡不着,一直大脑转啊转。 回想周六、周日也差不多,连中午睡觉头脑都...
    avaziyi阅读 104评论 0 0
  • 天涯路尽方知归, 浪荡一生终有累。 归时迷途不识径, 发白悔恨难回头。 20150403虎子
    星辰溥天阅读 196评论 0 2
  • 牵引力教育web程序员如何提高自身技能 web程序员以其薪资待遇,就业选择方向多,大有发展前途,梦想成为web程序...
    哇咔哇咔哆啦咪阅读 152评论 0 0