昨日回顾:

一. 数据库的介绍
管理数据的软件
二. 数据库的 分类:
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相关推荐

  1. mysql文件_mysql 的各种文件详细说明

    1:数据目录 mysql> show global variables like '%datadir'; +---------------+------------------+ | Varia ...

  2. MYSQL的主从和主主复制模式

    一.复制介绍 MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录 ...

  3. LOG的含义 : Mysql 之 binlog介绍

    1.什么是binlog binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录. ...

  4. 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 ...

  5. redis的学习使用,第二章

     在IDEA里面使用redis,使用架包   jedis-2.4.2.jar 1 public class Main { 2 3 public static void main(String[] ar ...

  6. JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");)    ②连接数据库(Conne ...

  7. Docker php 环境搭建dockerfile

    搭建基于ubuntu的基础环境: 参考: http://open.daocloud.io/ru-he-kai-fa-yi-ge-php-mysql-de-docker-hua-ying-yong/ h ...

  8. JNDI学习总结(2)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");)    ②连接数据库(Conne ...

  9. 恢复删除了数据文件的表MyISAM

    在实际工作中,数据文件被RM -RF掉的情况比较少见,常见的是DROP TABLE ,TRUNCATE TABLE,DELETE FROM TABLE WHERE 1=1; 如果遇到了RM掉数据文件时 ...

最新文章

  1. Python 之 pip拒绝访问
  2. CCNA11月14日战报
  3. YOU SAY quot;THE RULE IS HEREquot;,BUT I SAY quot;WHY?quot;
  4. SCVMM2008的P2V后 MAC地址冲突
  5. 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
  6. vue2.0 仿手机新闻站(七)过滤器、动画效果
  7. uniapp滑动切换tab标签_Web前端,Tab切换,缓存,页面处理的几种方式
  8. java如何解决高并发症,JAVA线上故障紧急处理详细过程!
  9. 织梦留言簿使用及修改
  10. Numpy Chararray对象
  11. minus出错matlab,请求帮忙指点MATLAB中的语法错误
  12. Node.js 8有哪些重要功能和修复? 1
  13. 架构真经 | 缓存为王
  14. 北上广深不相信电单车 共享单车终究走向“死“胡同?
  15. 联通路由器设置FTP服务器,做家庭储存云盘
  16. android-GooglePlay上架
  17. matlab保存pgm图形,pgm格式文件及其在matlab中的读取存储方法(1)
  18. 网站收录之采集新闻源工具
  19. 基于规则的分形图形生成方法
  20. rand()和srand()函数的用法

热门文章

  1. java中的关键字transient说明
  2. Consider renaming one of the beans or enabling overriding by setting
  3. 安装chrome插件
  4. Node 中用 ESLint 验证代码
  5. 程序员的内功修炼——值得看的9本书
  6. SouceInsight 快捷方式查看与修改
  7. 编译安装-httpd-2.2.15.tar.gz
  8. EXSi5.5安装篇
  9. ubuntu sudo apt-get update 失败 解决方法
  10. Linux命令--- /dev/null和/dev/tty