【mysql数据库基础】
基础:
·数据库的本质是一个文件
·行---记录
·列---字段
·RDBMS是一个程序
·SQL是结构化的查询语言
·MYSQL是一个数据库软件,可以通过SQL操作MYSQL数据库
·SQL语句不区分大小写
·学了SQL还可以操作别的数据库,比如sqlite3 oracle等
.SQL语句主要分为:
·DQL 数据查询语言,用于对数据进行 查询
·DML 数据操作语言,对数据进行 增加、删除、修改
·MYSQL的特点
·由C和C++编写,可以移植
·支持多种操作系统
·支持多线程,充分利用CPU资源
一、数据库的操作(linux-ubantu)
(一)数据库的操作
1.链接数据库:mysql -uroot -p
mysql -uroot -pmysql
2.退出数据库:exit/quit/ctrl+d
3.查看数据库:show databases
4.显示时间:select now():
5.显示数据库版本:select version():
6.创建数据库:create database+数据库名字
create database+数据库名字+charset=utf8 # 制定编码为utf8,默认为latin
7.查看创建数据库的语句:show creat databases+数据库名字
8.删除数据库:drop database+数据库名字
9.查看当前使用的数据库:select database():
10.使用数据库:use+数据库名字
(二)数据表的操作
1.查看当前数据库中所有的表:show tables
2.创建表:create table 表名(id int,name varchar(30))
例1: create table xxxxx(id int,name varchar(30));
例2: create table yyyyy(id int primary key not null auto_increment,name varchar(30));
例2中的primary key not null auto_increment 表示 主键 非空 自动增长 是约束.
·创建表实例:学生表
create table students(
id int unsigned not null auto_increment primary key, # aotu_increment 自动增长的
name varchar(30),
age tinyint unsigned default 0, # default 默认值
high decimal(5,2), # decimal(5,2) 小数共5位,小数点后2位
gender enum('男','女','保密') default '保姆' # enum() 自定义
cls_id int unsigned
):
3.查看表的结构:desc+表名
4.插入信息: insert into students values(1,'老王',18,188.88,'男',0) # 插入此数据到表中
(三)修改表
1.添加字段 alter table 表名 add 列名;
2.修改字段属性 alter table 表名 modify 原列名 新属性
·alter table students modify birthday date;
3.修改字段名字 alter table 表名 change 原列名 新列名
·alter table students change birthday birth;
4.删除表中数据:alter table 表名 drop 列名
·alter table students drop birthday; # 一般不要随意删除,宁曾勿减。
5.删除数据库:drop database 数据库名字
删除表:drop table 表名
(四)查看数据
1.show create tables +表名
·show create tables students;
·结果---> students | CREATE TABLE `students` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` tinyint(3) unsigned DEFAULT NULL,
`high` decimal(5,2) DEFAULT NULL,
`gender` enum('male','female','others') DEFAULT 'male',
`cls_id` int(10) unsigned DEFAULT NULL,
`birthday` date DEFAULT '2000-01-01',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
二、数据库的最基本操作:增删改查curd(create,updata,retrieve,delete)
(一)增加数据:insert into 名字 values(具体数据)
1.整行插入:
# 自动增长处使用 0 或 null 或 default 是相同的。
insert into students values(0,'小李飞刀',20,168.05,'male',2,'1990-01-01');
insert into students values(null,'小李飞刀',20,168.05,'male',2,'1990-01-01');
insert into students values(default,'小李飞刀',20,168.05,'male',2,'1990-01-01');
# 枚举enum处 可以用数字代替 例如: 1代表male 2代表female 3代表others
insert into students values(0,'小李飞刀',20,168.05,1,0,'1990-01-01');
insert into students values(0,'小李飞刀',20,168.05,2,0,'1990-01-01');
insert into students values(0,'小李飞刀',20,168.05,3,0,'1990-01-01');
结果如下:
+----+----------+------+--------+--------+--------+------------+
| id | name | age | high | gender | cls_id | birthday |
+----+----------+------+--------+--------+--------+------------+
| 1 | 老王 | 18 | 188.88 | male | 0 | NULL |
| 2 | 小明 | 20 | 177.77 | male | 1 | NULL |
| 3 | 小李飞刀 | 20 | 168.05 | male | 2 | 1990-01-01 |
| 4 | 小李飞刀 | 20 | 168.05 | male | 2 | 1990-01-01 |
| 5 | 小李飞刀 | 20 | 168.05 | male | 2 | 1990-01-01 |
| 6 | 小李飞刀 | 20 | 168.05 | male | 0 | 1990-01-01 |
| 7 | 小李飞刀 | 20 | 168.05 | female | 0 | 1990-01-01 |
| 8 | 小李飞刀 | 20 | 168.05 | others | 0 | 1990-01-01 |
+----+----------+------+--------+--------+--------+------------+
2.数据部分插入:
1.单行插入
insert into students (name,gender) values('小乔',2);
结果如下:
| 8 | 小李飞刀 | 20 | 168.05 | others | 0 | 1990-01-01 |
| 9 | 小乔 | NULL | NULL | female | NULL | 2000-01-01 |
+----+----------+------+--------+--------+--------+------------+
2.一次性多行插入用逗号隔开
insert into students (name,gender) values('大乔',2),('貂蝉',2);
结果如下:
| 10 | 大乔 | NULL | NULL | female | NULL | 2000-01-01 |
| 11 | 貂蝉 | NULL | NULL | female | NULL | 2000-01-01 |
+----+----------+------+--------+--------+--------+------------+
3.一次性多行全部插入用逗号隔开
insert into students values(0,'西施',21,165.00,2,0,'2000-02-02'),(0,'王昭君',22,167.00,2,0,'2000-02-02');
结果如下:
| 13 | 西施 | 21 | 165.00 | female | 0 | 2000-02-02 |
| 14 | 王昭君 | 22 | 167.00 | female | 0 | 2000-02-02 |
+----+----------+------+--------+--------+--------+------------+
(三)修改数据:update
全部修改:update students set gender=1 #
部分修改:update students set gender=1 where id = 7;
部分修改:update students set gender=1 where name = '小李飞刀';
| 7 | 小李飞刀 | 20 | 168.05 | female | 0 | 1990-01-01 |
修改后
| 7 | 小李飞刀 | 20 | 168.05 | male | 0 | 1990-01-01 |
(四)查询数据:select
1.全部查询:select * from +表名;
2.定条件查询:select * from +表名+ where +条件
·select * from students where name='小李飞刀';
·select * from students where id>3;
3.查询指定列:select 列名 from 表名;
·select gender,id from students;
4.查询指定列用as重命名:select + 列名 as 重命名 ,列名 as 重命名 from 表名
·select id,gender as '性别', age as '年龄'from students;
(五)删除数据:delete
物理删除:真删除
1.清空数据表: delete from 表名; # 数据表中所有数据全部删除
2.条件删除表: delete from 表明 where 条件;
·delete from students where name='小李飞刀'
逻辑删除:假删除--->添加一个字段is_delete字段bit类型; # bit 2进制 只有1 和0
1.添加一个字段:
·alter table students add is_delete bit default 0;
2.逻辑删除:
·update students set is_delete=1 where id='11';
alter table goods add brand_name1 varchar(40);
三、Mysql查询
(一)、数据准备
1.创建数据库:
create database 'python_test01' charset=utf8;
2.使用数据局
use python_test01
3.显示数据库
select databases();
4.创建数据表:studentsnew
create table username(
id int unsigned not null primary key auto_increment,
username varchar(150) not null,
password int unsigned not null
);
create table studentsnew(
id int unsigned not null primary key auto_increment,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0
);
5.创建数据表:classes
create table classes(
id int not null primary key auto_increment,
name varchar(30) not null
);
6.添加数据
+-----------+-------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | | |
| age | tinyint(3) unsigned | YES | | 0 | |
| height | decimal(5,2) | YES | | NULL | |
| gender | enum('男','女','中性','保密') | YES | | 保密 | |
| cls_id | int(10) unsigned | YES | | 0 | |
| is_delete | bit(1) | YES | | b'0' | |
+-----------+-------------------------------+------+-----+---------+----------------+
insert into studentsnew values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,0),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'黄蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,2,1),
(0,'周杰伦',36,null,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
(0,'郭靖',12,170.00,1,4,0),
(0,'周杰',34,176.00,2,5,0);
(二)、查询数据
1.查询所有字段:数据小时可以用
select * from studentsnew;
select * from classes;
2.查找指定字段:
select name,id from studentsnew;
3.使用as重命名
select name as 姓名,age as 年龄 from studentsnew;
4.查询多个表的信息
select class.name,studentsnew.age
5.给表重命名
select s.name,s.id,s.age,s.gender from studentsnew as s;
6.消除重复行 distinct
select distinct gender from studentsnew;
(三)、条件查询
1.比较运算符 select ... from 表名 where...
select * from studentsnew where age>18;
select * from studentsnew where age>=18;
select id,name,gender from studentsnew where age>18;
2.逻辑运算符 and,not,or
·and
select * from studentsnew where age>18 and age<38;
select * from studentsnew where age>18 and gender = 2;
select * from studentsnew where age>18 and gender = '女';
·or
select * from studentsnew where age>18 and height>180.00;
·not
select * from studentsnew where not (age>18 and gender=1);
(四)、模糊查询
1.like:(效率低)
·用%替换一个或者多个
·用_替换一个
select name from studentsnew where name like '小%';
查询姓名中有'小'字的名字:select name from studentsnew where name like '%小%';
查询姓名中第二个字是'月'的名字:select name from studentsnew where name like '_月%';
查询姓名至少两个字的名字:select name from studentsnew where name like '__%';
查询姓名至少三个字的名字:select name from studentsnew where name like '___%';
2.rlike:(效率高)正则表达式
查询以周开始的姓名:select name from studentsnew where name rlike '^周.*';
查询以周开始,伦结尾的姓名:select name from studentsnew where name rlike '^周.*伦$';
(五)、范围查询
1.in
查询年龄为12,18,34的姓名:select name,age from studentsnew where age=12 or age=18 or age=34;
select name,age from studentsnew where age in(12,18,34);
2.not in
查询年龄不是12,18,34的姓名:select name,age from studentsnew where not(age=12 or age=18 or age=34);
select name,age from studentsnew where age in(12,18,34);
3.between...and...
范围查询年龄12-18之间(包含首尾):select id,name,age from studentsnew where age between 18 and 28;
4.not between...and...(此时not between是一种用法,不用加括号)
范围之外查询0-12,18+(不包含首尾):select id,name,age from studentsnew where age not between 18 and 28;
(六)、判断空
1.is null
判断空:select * from studentsnew where height is Null;
2.is not nul
判断不是空:select * from studentsnew where height is not Null;
(七)、排序(应用很多)(存在先后顺序,先排序身高,升高相同的前提下排序年龄)
1.order by 单个字段
·asc从小到大
·desc从大到小
·查询年龄在18-34岁之间男性,年龄按照从小到大排序:
select id,name,age,gender from studentsnew where (age between 18 and 34)and gender=1 order by age asc;
·查询年龄在18-50岁之间的女性,身高从小到大排序:
select * from studentsnew where (age between 18 and 50)and gender=2 order by height asc;
2.order by 多个字段
·查询年龄在18-50岁之间的女的,身高从高到矮排序,如果身高相同按照年龄大到小排序;
select * from studentsnew where(age between 18 and 50) and gender=2 order by height desc,age asc;
·查询年龄在18-50岁之间的女性,身高从高到矮排,如果身高相同的情况下按照年龄从大到小排序,如果年龄也相同按照id从大到小排序;
select * from studentsnew where(age between 18 and 50) and gender=2 order by height desc,age desc,id desc;
·按照年龄从小到大,身高从高到低排序
select * from studentsnew order by age asc,height desc;
(八)聚合函数
1.count求总数
·查看男生多少人,女生多少人
select count(*) as '男性人数' from studentsnew where gender=1;
select count(*) as '女性人数' from studentsnew where gender=2;
2.max/min 求最大值/最小值
·查看男生身高最大值
select age from studentsnew where gender=1;
select max(age) as '男生身高最大值' from studentsnew where gender=1;
3.sum计算总和
·计算年龄总和sum(age)/count(*)
select sum(age) from studentsnew;
4.avg计算平均 or sun()/count(*)计算平均
select sum(age)/count(*)as '平均年龄' from studentsnew;
select avg(age) as '平均年龄'from studentsnew;
5.round四舍五入:
注意:不要用在银行等。
·round(123.12,1)---->123.12保留一位小数
·平均年龄保留两位小数自动四舍五入
select round(avg(age),2) as '平均年龄'from studentsnew;
select round(sum(age)/count(*),2) as '平均年龄'from studentsnew;
·计算男性平均身高,保留两位小数
select round(avg(age),2) from studentsnew where gender=1;
6.group by分组
·按性别分组(...处要放唯一能分组的量)
错误:select * from studentsnew group by gender;
错误:select name from studentsnew group by gender;
正确: select gender from studentsnew group by gender;
·计算每种性别的人数:group_concat(查询同种条件下的姓名)
select gender,count(*) from studentsnew group by gender;
结果如下:
+--------+----------+
| gender | count(*) |
+--------+----------+
| 男 | 6 |
+--------+----------+
select gender,group_concat(name)from studentsnew where gender=1 group by gender;
select gender,group_concat(name,age,id)from studentsnew where gender=1 group by gender;
select gender,group_concat(name,'_',age,'_',id)from studentsnew where gender=1 group by gender;
结果如下:
+--------+---------------------------------------------------------------------+
| gender | group_concat(name,'_',age,'_',id) |
+--------+---------------------------------------------------------------------+
| 男 | 彭于晏_29_3,刘德华_59_4,周杰伦_36_8,程坤_27_9,郭靖_12_13,周杰_34_14 |
+--------+---------------------------------------------------------------------+
7.having对分组进行过滤
·查询平均年龄超过30岁的性别,以及姓名having avg(age)>30
select gender,group_concat(name,'',age),avg(age)from studentsnew group by gender having avg(age)>30;
·查询每种性别中人数大于2的信息
select gender,group_concat(id,'',name,'',age)from studentsnew group by gender having count(*)>2;
注意:where和having的区别
1.用法不一样,where和having在group by前后不一样,where在前 having在后
2.where对原表的条件,having是对分组的判断。
8.limit分页
·限制查询出的数据个数前连个:limit 2 ---->最大显示2个
select * from studentsnew where gender=1 limit 2;
·限制范围内的个数:limit 0,5----->从第一个开始查询五个数据
limit 5,5----->从第六个开始查询五个数据
select * from studentsnew limit 0,5;
select * from studentsnew limit 5,5;
select * from studentsnew limit 10,5;
·每页显示2个,显示第六页信息,按照年龄从小到大排序;
select * from studentsnew order by age asc limit 6,2;
总结规律: 1.limit nx,x (n=0,1,2,3,4,5......)
2.limit后的参数不能跟算术式
作业:查询所有女性的信息并按照身高从高到低的顺序只显示2个;
select * from studentsnew where gender=2 order by height desc limit 2;
9.链接查询
.内链接取交集:inner join ... on
·select * from 表A inner join 表B on 条件;
*表示所有全部显示
·查询能够对应班级的学生的信息
select * from studentsnew inner join classes on studentsnew.cls_id=classes.id;
·按照要求显示班级、姓名
select studentsnew.*,classes.name from studentsnew inner join classes on studentsnew.cls_id=classes.id;
·给数据表起名字
select s.*,c.name from studentsnew as s inner join classes as c on s.cls_id=c.id;
·班级显示在前
.左链接取左边为基准: A left join B on (right join on 用的很少,只需要将left join 里面AB互换就行了)
·查询每位学生对应的班级信息
select * from studentsnew as s left join classes as c on s.cls_id=c.id;
select * from classes as c left join studentsnew as s on c.id=s.cls_id;
·查询没有班级信息的学生
select * from classes as c left join studentsnew as s on c.id=s.cls_id having c.id is null;
select * from classes as c left join studentsnew as s on c.id=s.cls_id where c.id is null;
10.自关联
1.新建一张表area
create table areas(
id int primary key,
title varchar(20),
pid int);
2.导入一张省市县三级表
跳过
3.通过一张表中有id和pid的自关联来查询各省市县的具体信息
11.子查询:更消耗时间 select.....(select....)先执行括号内的子语句
·查询身高最高的男生信息
select * from studentsnew where height=(select max(height) from studentsnew);
insert into username values(1,'bill',123),(2,'alex',456),(3,'pall',789);
四、数据库设计
软件:power design ,db designer
(一)三范式 Normal Form目前总有8中范式,遵循前三点1
.把每一个信息拆成每一个字段。不能好几种信息合在一起2.主键可以有多个.
一是必须有一个主键(primary key),
二是没有包含主键的列必须完全依赖于主键,而不能只依赖主键的一部分。当只依赖于一部分的时候需要继续拆分。
三非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在非主键B依赖于主键A,非主键C依赖于非主键B的情况。
出现此种情况要继续拆分表格。(二)E-R模型 entry实体/relationship关系1.一对一在随便一张表中添加字段2.
多对一是在多的里面添加主键3.多对多时候新开一张表存储他们的主键三范式
①不能再拆分②其他键必须完全依赖主键③必须直接依赖主键,不能传递依赖 E-R模型 ①一对一时候 主键放在哪个都可以②一对多时候 主键放在多的里面③多对多时候 新建一张表存放主键
【mysql数据库基础】的更多相关文章
- mysql数据库基础的简单操作指南
最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据 ...
- MySQL数据库基础
MySQL数据库基础 本文的所有操作是基于CMD环境,MySQL通过在命令行中输入SQL语句对数据库进行操作.配置问题可参考<打通MySQL的操作权限>中的内容,该文算是针对前期的环境配置 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- Mysql数据库基础操作
Mysql数据库基础操作 在mysql数据库中开启使用tab键补全功能 1)修改主配置文件/etc/mysql/my.cnf(mysql和mariadb目录有些不同) vim /etc/mysql/m ...
- mysql数据库基础-2019-9-10(随堂笔记)
mysql数据库基础 在cmd情况下启动mysql数据库:(配置path环境变量后可忽略) 运行mysql1. 进入mysql路径2. 执行:mysql -uroot -p,安装时的密码 1.数据库& ...
- php面试专题---15、MySQL数据库基础考察点
php面试专题---15.MySQL数据库基础考察点 一.总结 一句话总结: 注意:只写精品 1.mysql定义int(3),那么我存1234就错了么? 不是:无影响:只会影响显示字符的个数:可以为整 ...
- PHP面试 MySQL数据库基础
MySQL数据库基础 MySQL数据类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 属性:UNSIGNED 长度:可以为整数类型指定宽度,列 ...
- MySQL数据库--基础简述
MySQL数据库--基础简述 1.15.1 MySQL简介 Mysql是最流行的RDBMS(Relational Database Management System:关系数据库管理系统),特别是在W ...
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- 26.MySQL数据库基础
MySQL数据库基础 目录 MySQL数据库基础 数据库的概念 数据 表 数据库 数据库的管理系(DBMS) 数据库系统 访问数据库的流程 数据库系统发展史 当今主流数据库介绍 关系数据库 关系数据库 ...
随机推荐
- Django项目后台不挂断运行
Django项目后台不挂断运行 方法一: 1.进入项目目录下,运行下面程序: nohup python manage.py runserver 0.0.0.0:5008 & nohup(no ...
- 03 Django模型层: 常用(非常用)字段和参数
Django模型层: 常用(非常用)字段和参数 1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为i ...
- 武汉百得思维Java面试总结
武汉百得思维Java面试总结 在一个愉快的下午,我们并不十分愉快地参加了宣讲会.那是国庆的前两天,大家正在为放假的愉悦所兴奋也在为找工作而紧张. 在听过一阵胡吹乱侃之后,大家都昏昏欲睡,于是终于迎来了 ...
- linux常用命令 总结
最最常用的快捷键,Tab 键 ,自动补全功能, / 根目录 man 帮助手册:man cd ,查看cd的用法! cd 进入目录:ls -l 列表查看文件详细信息:pwd 当前路径: cp 复制 .rm ...
- css 浮动 定位
浮动 元素的浮动是指设置了浮动属性的元素会脱离标准普通 流的控制,移动到其父元素中指定位置的过程. 语法: float . left . right . none(默认) 注意: 1 ...
- Unity- 小“东西”
菜单栏遍历处理预制体工具 public class GameEditor : Editor { private static void ProcessPrefabs(Action<GameObj ...
- 找出系统web路径
方法一 :打开web查看源码,复制一个特征字符串,然后替换进下面命令的htmlString搜索之. Win :findstr /s/i/n /d:E:\code\xampp\htdocs\ /c:&q ...
- 用PyInstaller打包用PyQt5编写的python程序
0.背景 本弱初学PyQt5,写了一个GUI小程序,但在用PyInstaller打包时出现了不少问题,现将几个比较大的问题记录如下,希望以后能记住. 1. 资源打包 首先是资源打包的问题,我写的程序引 ...
- 集训 T4-分配时间
题目: 思路: 这个题目正解为dp,但是我并不会dp,所以写了个类似于T3的搜索.(然后就70分了 先看一张图: 我的思路是把写名字的时间和写卷子的时间算在了一起(下标表示时间点,比如下标2那一行代表 ...
- Inoreader - 在线Rss阅读器