SIKI学院 MySQL
案例:
数据库:Mygamedb
账户表格: user 表格
账户的拥有的角色:role 表格
账户拥有的所有角色的物品:goods 表格
怎么知道每个role拥有哪些goods? Inventory 中间表——通过查询所有Inventory.roleid相同的值,去检索Inventory.goodsid
b) 一个role有多个good物品,每个good能被多个user账户多个role拥有
1:)SQL语句 可用于多种数据库语言MySQL 、SQL Server、Oracle等等。
2)字符串用单引号表示,每个SQL语句以分号表示,表头之间用逗号隔开。
CREATE TABLE `mygamedb`.`users` (
`username` VARCHAR(32) NOT NULL,
`password` VARCHAR(45) NULL,
PRIMARY KEY (`username`));
3)MySQL 不区分大小写
4)在表格添加数据记得点击“Apply”按钮提交到数据库
5)数据库的每一张表格都必须有一个主键,主键是该条信息区别于其他信息的唯一标识,有点像符号表Dictionary<Key,Value> 的Key,内部实现对Key进行排序,查询信息时通过Key来查询Value。
· 主键不能为null,
· 通常以int型 ID设为主键,为什么username不能为主键,想一下如果两个用户的名字一样,我们就不能区别他们两个了。
所以ID主键是该条信息区别于其他信息的唯一标识。
· 表头里面可以有多个主键- 即主键由一列或多列组成,那么身份的唯一标识就是二者的组合。这种情况下多列主键的值不能相同,相同则不能区分二者了。 尽管如此,还是不推荐使用多个主键。
6)各个表头的属性
* PK 设为主键
* NN 不能为空
* UQ 不可以重复 Unique ,用于注册时的用户名
* B
* UN
* ZF
* AI ——auto Incremental
7)外键就是表的某一列引用另一个表的主键。
两个表之间的外键关联: role.userid——user.id
关联后role.userid的值不能是User.id 中没有的值
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1,什么是数据库?
Excel就是一个数据表,人操作
MySQL是一个数据库,便于程序操作,便于存储百万以上级别的数据
对于数据库的基本操作:增删改查
如何对数据库操作 SQL语句 SQL命令 Structured Query Language(SQL)
1,每个命令后;
2,不区分大小写
学习数据库注意事项:学会老师讲解的80%,遇到剩余20%不懂的,学会多搜索
2,数据库排行(2016.10)
Oracle
MySQL
SQL Server
MongoDB
PostgreSQL
DB2
3,关系数据库,
是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
Oracle、SQL Server、MySQL
4,服务器端运行原理图
(理解什么是ip和端口号)
Web Application Server
Game Server
5,如何在MySQL中存储数据
MySQL下可以创建多个库(数据库)database
每个库下可以创建多个表(表格)table
通过表格存储我们的数据
6,什么是表(Table)(表,行,列,格子)
表有表头(表头表示这个表有哪些列)
表里面的每一行都是我们存储的数据
7,假如我们要学生信息和班级信息,如何设计表呢
8,MySQL安装
默认超级管理员
root root
9,
MySQL Workbench介绍
MySQL Command Line Editor
数据库的链接
localhost 127.0.0.1 都代表本机
10,什么是表(Table)(表,行,列,格子)
表有表头(表头表示这个表有哪些列)
表里面的每一行都是我们存储的数据
主键(Primary Ke y)
1,每行数据独一无二的标识
2,一个表必须有主键(只能有一个主键)
3,不能为NULL(空值)
4,由一列或者多列组成
Unique Key
1,表示该项数据不能重复
2,允许一条可以为NULL
外键(Foreign Key)
1,这列数据引用了另外一个表的主键
表的关系
一对一 OneToOne
一对多 OneToMany
多对多 ManyToMany
数据库的创建
表的创建
列的设置
数据添加
数据删除
数据修改
数据查询
10,数据类型
字符串 - char varchar(length) - string
整数 - int - int
小数 - float - float
日期时间 - date - DateTime
默认值
可以为NULL
自动增长
11,MySQL控制台命令
help;
quit;
show databases;
use databasexxx;
show tables;
select * from tablename;
创建数据库:create database XXX;
删除数据库:drop database XXX;
执行SQL语句是,提示 Query OK 表示语句执行成功。
使用数据库的原因:处理上千万上亿条数据时,查询快
12,MySQL Workbench全面功能学习
http://dev.mysql.com/doc/workbench/en/
添加表
添加数据
数据的查询
数据的更改
数据的提交
添加数据
修改表结构查看表结构 alter table
13,select column_list
from table_name
where filter_condition
order by column_list (desc)
limit rom_limit;
示例:
//仅仅查询你需要的列
select username from mytable where id>3;
select username,password from mytable where id>3;
//查询且排序
select *from mytable order by username ; //正序
select *from mytable order by username desc; //反序
select *from mytable order by username desc limit 1; //反序后取第一条,即得到最后一条;
select *from mytable order by username desc,password ; //username反序,password 正序;
SQL添加注释
--单行注释
/* */多行注释
14, 查询静态值
select 'some string';
select 1+1;
select now(); //日期和时间
select curdate(); //日期
select curtime(); //时间
select pi();
select mod(45,7); //求余
select sqrt(25);
可以在查询的时候通过as 修改这一列的列名/表头
15,select * from where 1=2;
16,查询的时候可以对查询的列做一些运算
*
/ (除 结果为浮点)
Value1 div Value2 (除 结果为整数)
Value1(%/mod)Value2 支持小数
+
-
17,查询的时候可以使用的功能函数
round() 四舍五入 select round(4.45,1); //保留一位小数=4.5;
round(columnname,x)四舍五入保留x位小数
floor(float v) 直接舍 :不大于v的最大整数 floor(9.2)=9;
ceiling(loat v) 直接入:不小于v的最小整数 floor(9.8)=10;
18,字符串操作
concat (s1,s2....);
left
length
reverse 字符串翻转
replace(S1,S2,S3);把S1中S2替换为S3
示例:Select replace(username,'K','Q')from mytable;
date_format %m %b %d %y %Y %T %f
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
get_format(datetime,'EUR' 'ISO' 'USA')
dayofweek
quarter //1-2-3-4春夏秋冬的季节
week
monthname
19,distinct 去重select distinct * from xxx;
20,where条件
1,数字 > < = >= <= <>不等于
2,字符串 = '' > < = >= <= <> !=
逻辑操作
is 仅用is null或is not null
and - or -not 或且非
and 优先级> or
范围判断
in (not in)
between num1 and num2 (not between)
示例:
select * from users where name in(‘Kismy’,‘SIKI’,‘Alice’);
select * from users where id in(‘1,4,7,8,9);
select * from users where category_id between 1 and 9;
like (not like) % _ 【如同正则表达式】
示例1:
select * from category where name like 'A%'; 检索以A开头的,‘%’代表任意多个字符
select * from category where name like 'A_ _'; 检索以A开头,且仅有三个字符的,‘_’代表任意字符
关于NULL的条件 // is 仅用is null或is not null
is NULL
is not NULL
21,limit x
limit x1,x2;
//去掉前x1条,查询x2条; 注意——并不是从X1条开始查询;
//常用于分页查询,例如每一页显示10条
示例:
select * from mytable limit 0,10;
select * from mytable limit 10,20;
22,创建表【创建表之前,先“use 数据库name”】
create table tablename(
col_name type not null auto_increment,
col_name type default,
primary key(col_name)
);
desc tablename;查看表结构
插入表数据
(不能为null 的列必须插入,自增的列不需要插入)
insert into tablename(col_name,col_name,col_name)
values(value1,value2,value3,value4,value5);
查询表数据
select * from tableName;
更新数据
update tablename
set col_name = value,
col_name = value
where condition;
示例:
update mytable set username='Demon' where id=1;
//注册用户的id是唯一区别于其他用户的标识。修改用户的名称是通过id来修改的。
update mytable set username='Demon' where username='Kismy';
删除表
drop table XXX;
删除表数据
delete from tablename where condition;
示例:
delete from mytable where id=1;