mysql 42
昨日回顾:
一. 数据库的介绍
管理数据的软件
二. 数据库的 分类:
a.关系型数据库
有约束
b.非关系型数据库
没有约束
三. MySQl 的安装:
a. exe msi文件 点击下一步下一步
b. 压缩包
bin
mysqld : 启动mysql服务的
mysql : 连接mysql
环境变量
四. 数据库(文件夹)
数据表 (文件)
数据行(文件行)
五. 数据库:
增:
create database 数据库名;
删:
drop database 数据库名;
查:
show databases;
数据表:
创建:
create table 表名(
id int auto_increment primary key
列名1 列类型 [not null/ null default '' ],
列名2 列类型 [not null/ null default '' ],
列名n 列类型 [not null/ null default '' ]
)engine=Innodb charset=utf8;
列类型:
数值类型:
tinyint
samllint
mediumint
int
bigint
有符号 / 无符号 (unsigned)
字符串类型:
char varchar text
时间日期类型:
datetime 年月日时分秒
删除:
drop table 表名;
查询:
show tables;
修改:
alter table 表名 change/modify 旧列名 新列声明;
alter table 表名 add 新列声明;
alter table 表名 drop 旧列名;
数据行:
增:
insert into 表名 (列1,列2, 列n) values (值1, 值2, ..., 值n);
删除:
delete from 表名 where id=12;;
truncate 表名;
修改:
update 表名 set name='xxxx';
update 表名 set name='xxxx' where id=12;
update 表名 set name='xxxx',age=12 where id=12;
查询:
select * from 表名;
select name, age from 表名;
六.外键 (一对多)
作用:
1. 约束
2. 节省空间
create table department (
id int auto_increment primary key,
depart_name varchar(32) not null default '',
num int not null default 0
)engine=Innodb charset=utf8;
create table userinfo (
id int auto_increment primary key,
name varchar(32) not null default '',
depart_id int not null default 1,
# constraint 外键名(fk_userinfo_depart) foreign key (列名(depart_id)) references 表名(department)(关联的列名(id)),
# constraint fk_userinfo_depart foreign key (depart_id) references department(id)
)engine=Innodb charset=utf8;
ps:
1. 不能将创建外键的语句单独拿出来
alter table userinfo add constraint fk_userinfo_depart foreign key (depart_id) references department(id);
alter table userinfo drop foreign key 外键名称(fk_userinfo_depart );
2. 外键关联的时候, 必须关联的是表的主键ID
3. 练习的时候, 将语句写在文本中, 然后考过去执行
4. 主键索引 : 加速查找 + 不能为空 + 不能重复
今日内容:
一. 外键的变种: (*********************************************************)
1. 唯一索引:
create table t5(
id int,
num int,
unique(num)
)engine=Innodb charset=utf8;
作用:
num列的值不能重复
加速查找
create table t6(
id int,
num int,
unique(id, num)
)engine=Innodb charset=utf8;
联合唯一索引作用:
num列和id列的值不能重复
加速查找
create table t6(
id int,
num int,
unique(id, num......)
)engine=Innodb charset=utf8;
2. 一对多:
部门表:
id depart_name
1 公关部
2 公共部
3 保安部
员工表:
id name age depart_id(外键)
1 lxxx 12 2
2 xxxx 13 1
3 xxxx 13 2
3. 一对一:
用户表:
id name age
1 zekai 23
2 eagon 34
3 lxxx 45
4 owen 83
博客表:
id url user_id (外键 + 唯一约束)
1 /linhaifeng 2
2 /zekai 1
3 /lxxx 3
4 /lxxx 4
4. 多对多:
用户表:
id name phone
1 root1 1234
2 root2 1235
3 root3 1236
4 root4 1237
5 root5 1238
6 root6 1239
7 root7 1240
8 root8 1241
主机表:
id hostname
1 c1.com
2 c2.com
3 c3.com
4 c4.com
5 c5.com
为了方便查询, 用户下面有多少台主机以及某一个主机上有多少个用户, 我们需要新建第三张表:
user2host:
id userid hostid
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 3 2
7 3 4
创建的时候, userid 和 hostid 必须是外键, 然后联合唯一索引 unique(userid, hostid)
Django orm 也会设计
二. 数据行的操作:
增:
insert into 表名 (列名1, 列名2,) values(值1, 值2);
insert into 表名 (列名1, 列名2,) values(值1, 值2),(值1,值2),(值n,值n);
insert into 表名 (列名1, 列名2,) select 列名1, 列名2 from 表名;
删除:
delete from 表名;
delete from 表名 where id > 10
delete from 表名 where id < 10
delete from 表名 where id <= 10
delete from 表名 where id >= 10
delete from 表名 where id != 10
delete from 表名 where id = 10 and name='xxx'; and : 并且 两个条件都必须要成立
delete from 表名 where id = 10 or name='xxx'; or : 或者 只要满足一个条件成立
修改:
update 表名 set name='zekai', age=23 where id > 10;
查询:
基本:
select * from 表名;
select name , age from 表名;
高级:
a. where 条件查询:
select * from 表名 where id=10;
select * from 表名 where id >10 and id<15;
select * from 表名 where id > 10;
!= : 不等与
>= <=
between and: 闭区间
select * from t4 where id between 9 and 12;
in: 在某一个集合中
select * from t4 where id in (9,10,11....);
select * from t4 where id in (select id from t3 where id between 2 and 4)
是可以这样使用的, 但是不建议大家使用;
b. 通配符:
alex
select * from 表 where name like 'ale%' - ale开头的所有(多个字符串)
select * from 表 where name like 'ale_' - ale开头的所有(一个字符)
c. 限制取几条:
select * from 表名 limit 索引偏移量, 取出多少条数据;
select * from t3 limit 0, 10; 第一页
select * from t3 limit 10, 10; 第二页
page = input('page:')
page 索引偏移量 数据量(offset)
1 0 10
2 10 10
3 20 10
4 30 10
page (page-1)*offset offset
分页核心SQL:
select * from t3 limit (page-1)*offset, offset;
d. 排序:
order by
降序:
select * from t4 order by 列名 desc; descending
升序:
select * from t4 order by 列名 asc; ascending
多列:
create table t7(
id int auto_increment primary key,
num int not null default 0,
age int not null default 0
)charset=utf8;
insert into t7 (num, age) values (2, 12),(3,13),(4, 12);
select * from t4 order by num desc, name asc;
如果前一列的值相等的话, 会按照后一列的值进行进一步的排序.
e. 分组
select age, 聚合函数(count(num)/sum(num)/max(num)/min(num)/avg(num)) from 表名 group by 列名;
select age, avg(num) from t7 group by age;
select age, count(num) from t7 group by age;
select age, count(num) as cnt from t7 group by age; 显示别名 as
having的二次删选:
select age, count(num) as cnt from t7 group by age having cnt>1;
where 和 having的区别:
1). having与where类似,可筛选数据
2). where针对表中的列发挥作用,查询数据
3). having针对查询结果中的列发挥作用,二次筛选数据, 和group by配合使用
f. 连表操作
select * from userinfo, department; (笛卡尔积)
select * from userinfo, department where userinfo.depart_id=department.id;
左连接:
select * from userinfo left join department on userinfo.depart_id=department.id;
左边的表全部显示, 右边没有用到不显示
右连接:
select * from userinfo right join department on userinfo.depart_id=department.id;
右边的表全部显示, 左边没关联的用null表示
内连接:
左右两边的数据都会显示
ps:
a.只需要记住左连接 left join
b.可以连接多张表 通过某一个特定的条件
注意查询的顺序:
select name,sum(score) from 表 where id > 10 group by score having age> 12 order by age desc limit 2, 10
转载于:https://www.cnblogs.com/zahngyu/p/11018843.html
mysql 42相关推荐
- mysql文件_mysql 的各种文件详细说明
1:数据目录 mysql> show global variables like '%datadir'; +---------------+------------------+ | Varia ...
- MYSQL的主从和主主复制模式
一.复制介绍 MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录 ...
- LOG的含义 : Mysql 之 binlog介绍
1.什么是binlog binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录. ...
- Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm
先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...
- redis的学习使用,第二章
在IDEA里面使用redis,使用架包 jedis-2.4.2.jar 1 public class Main { 2 3 public static void main(String[] ar ...
- JNDI数据源的配置
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conne ...
- Docker php 环境搭建dockerfile
搭建基于ubuntu的基础环境: 参考: http://open.daocloud.io/ru-he-kai-fa-yi-ge-php-mysql-de-docker-hua-ying-yong/ h ...
- JNDI学习总结(2)——JNDI数据源的配置
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conne ...
- 恢复删除了数据文件的表MyISAM
在实际工作中,数据文件被RM -RF掉的情况比较少见,常见的是DROP TABLE ,TRUNCATE TABLE,DELETE FROM TABLE WHERE 1=1; 如果遇到了RM掉数据文件时 ...
最新文章
- Python 之 pip拒绝访问
- CCNA11月14日战报
- YOU SAY quot;THE RULE IS HEREquot;,BUT I SAY quot;WHY?quot;
- SCVMM2008的P2V后 MAC地址冲突
- 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
- vue2.0 仿手机新闻站(七)过滤器、动画效果
- uniapp滑动切换tab标签_Web前端,Tab切换,缓存,页面处理的几种方式
- java如何解决高并发症,JAVA线上故障紧急处理详细过程!
- 织梦留言簿使用及修改
- Numpy Chararray对象
- minus出错matlab,请求帮忙指点MATLAB中的语法错误
- Node.js 8有哪些重要功能和修复? 1
- 架构真经 | 缓存为王
- 北上广深不相信电单车 共享单车终究走向“死“胡同?
- 联通路由器设置FTP服务器,做家庭储存云盘
- android-GooglePlay上架
- matlab保存pgm图形,pgm格式文件及其在matlab中的读取存储方法(1)
- 网站收录之采集新闻源工具
- 基于规则的分形图形生成方法
- rand()和srand()函数的用法
热门文章
- java中的关键字transient说明
- Consider renaming one of the beans or enabling overriding by setting
- 安装chrome插件
- Node 中用 ESLint 验证代码
- 程序员的内功修炼——值得看的9本书
- SouceInsight 快捷方式查看与修改
- 编译安装-httpd-2.2.15.tar.gz
- EXSi5.5安装篇
- ubuntu sudo apt-get update 失败 解决方法
- Linux命令--- /dev/null和/dev/tty