目录
一.数据库基础:
-
数据库是按照一定结构来存储数据的仓库。
-
数据库在后台运行是看不到的,我们用数据库管理系统对数据库进行管理,我们看到的是管理系统的界面DMS。
-
用户。
以上三者构成了数据库系统。
-
数据库的使用:
-
了解数据库的设计步骤。
-
绘制数据库的e-r图。
-
数据库的规范-三大范式。
- 数据库的设计
-
好的数据库设计可以节省存储空间。
-
可以最大限度的保证数据的完整性。
-
方便语言程序的开发。
- 数据库在软件开发的地位:
-
需求分析:了解客户的需求-》转化成业务逻辑和数据处理需求。
-
概要设计:客户意图-》e-r模型图(需求分析已明确)。
-
详细设计:e-r模型图-》数据库具体操作内容(数据表)
-
代码编写:语言+数据库表+e-r图-业务流程图
-
软件部署,测试,维护。
关于概要设计的概念:
-
实体:现实世界中事物的抽象。凡是我们能区分开的事物,事情,概念。
-
属性:事物的特性。
-
实体之间的关系-》数据库结构。
e-r图表就是实体间关系的图表,实体用矩形,属性用椭圆,关系用菱形表示。
关系型数据库举例:mysql oracle sql server db2
关系型数据库就是一个二维平面表:
实体:对应的就是表名称。
属性:对应的就是表之中的表头(字段),一行就叫记录。
关系:比较虚的东西,后面再谈。
- Mysql数据库的安装:LInux已经安装
- Mysql基本命令概览:
-
select now();输出当前的日期,时间。
-
select curdate();打印当前的日期。
-
select curtime();打印当前的时间。
-
Show databases();显示数据库
-
Use+数据库名称-》使用数据库。
-
Select database();用来查看当前数据库是哪个库的。
-
Select version();查看当前版本号。
-
Select usr();查看当前用户名。
-
mysql -uroot -hlocalhost -p登录
二.数据库常用命令
一.结构操作
1.登录。进入数据库后默认的数据库我们一般不操作。
2.创建数据库
create database [if not exists] 数据库名称
[default character set=编码方式]
数据名不能相同,数据库名字自己定义
3查看所有数据库
show databases;查看所有数据库
show databases like “%s%”;显示任意多字符s任意多字符的数据库
%表示任意多的字符,包含空字符
show create database 数据库名字;查看创建某个数据库的命令
4修改数据库编码方式
alter database 数据库名称 [default] character set = 编码方式;
5删除数据库
drop database[if exists];
6使用数据库
use database 数据库名称;
使用了数据库以后就要创建和使用我们的二维平面表了
1.创建数据库表
create table [if not exists]表名(自定义)(
列定义.
……….
……….
列名称
列数据类型[not null|null][default value][aruo_increman][uinque key|primary key]
)
列名称 驼峰命名法。必须有字母,数字,下划线,只能以字母开头。
列数据类型:
tinyint 占1个字节
smallint占2个字节
mediumint占3个字节
int占4个字节
bigint占8个字节
float型
float(m,d)m表示总位数,d是精度,占4个字节
double占8个字节
字符串
char()
varchar()变长字符
text()文本类型65535个字符
mediumtext 16777215个字符
longtext 2的32次方
enum(‘值1’,‘值2’....)
日期 时间
datetime 日期时间型数据
date 日期
注意:strtodate--》将时间戳转换成时间
example:create table users(
userId smallint(4) not null auto_increment primary key,
userName varchar(50) not null,
userAge tinyint,
userSex enum('1','2'),
userDate)
auto_crement 自增量,该列的最大值加一为当前值
pirmary key 主键 能确定唯一的记录的字段
查看建表时候的命令:
show tables [from 数据库] like[&'表名称'];
show tables;
查看表结构
desc/describle 数据表名称
查看创建表结构时候的命令
show create table 名称
mysql存储引擎 ENGINE=InnoDB
二 数据操作:表中的数据:
1 插入记录。inseryt into写入时候,主键由于默认是自增长的,所以可以省略。
insert into 表名称(字段1,字段2,字段3,...)values(值1,值2,值3...);
insert(1,“zhangsan”,40,“2”,“2010-06-09”);
2 查询(简单查询)
select * from 表名称
查找表中的所有信息
3乱码问题:数据在入库的时候有可能出现乱码
show variables like '%character%' 查看系统变量
set 变量名称 = utf8;
设置字符集,对于已经存在的库和表无用,设置完毕要记得退出一哈哦
3创建表的其它知识
1》primary key 主键 确定唯一的记录,又叫主索引。
所有的表 都有ID 都设置为主索引
2》唯一索引 保证字段的值不重复。
create table 表名称(
列定义
....
unique key 自定义(字段)
);
唯一索引指的是该列的值不能重复但是唯一索引可以加在多个字段上。
3》主索引和唯一索引另外一种写法
create table 表名称(
列定义:
...
primary key 索引名(字段),
unique key 索引名(字段)
);
唯一索引和主索引的共同点:
值唯一,值不能重复
区别:主索引一般只有一个,而唯一索引可以加在多个字段上。
三 对表结构的修改
1 desc 表名称 :查看表结构
2show create table 表名称:查看创建表的命令
3在表中添加字段
alter table 表名称 add 列名称 列定义 。。。
example: alter table users add usertil varchar(20);
4删除一个字段
alter table 名称 drop 字段;
5修改表中的信息
alter table 表名称 change 旧字段名称 新字段定义;
6修改表名称
alter table 表名称 rename 新名字;
一般命名规则是项目名称_表名称
7删除表
drop table [if exists] 表名称;
8外键约束
表与表之间的约定的某种关系,由于这种关系,我们可以让多张表之间的数据保持统一,主要目的 就是保持表的统一和数据的完整性。
用户表:
订单表:
1》如果删除了用户,订单表之中和数据相关的数据也必须要删除。
2》如果订单表中随便插入了一条记录,在用户表中找不到相关信息,数据也不统一
foreigne key
1》innodb 引擎才支持。
2》外键约束至少要有两张表。
3》外键名字必须唯一。
1.创建表的时候创建外键
create table 表名称(
字段定义...
...
foreign key [外键名称][外键字段] reference [外键表名称] (字段)
[on delete] [restrict|cascad|set null|no action]
[on update] [restrict|cascad|set null|no action])
解释:
reference [外键表名称] (字段):外键来自于哪个表哪个字段
[on delete] /[on update] 在删除或者修改
restrict 拒接操作。
cascadee 父表在删除或者更新时,子表同步删除或者更新相关行
on delete/on update cascade
set null 父表操作时,字表设置为null
no action 不采取任何操作
example:
create table user(
id int(8) not null auto_increment primary key,
name varchar(50),
sex int(1)
)engine=innodb;
sex enum("1","2");
demo:
create table orders(
orders_id int(8) not null auto_increment primary key,
username varchar(50),
money int(8),
datetimes datetime,
u_id int(8),
index (u_id),
foreign key order_f_key (u_id) references user(id) on delete cascad
)engine = innodb
主索引 唯一索引 普通索引
index 普通索引用来提高效率
table user
insert into user(name,sex) values("lisi",1);
insert into user(name,sex) values("zhangshan",2);
table orders
insert into(username,money,datatimes,u_id) values("zhangshan",80,"2016-06-13",1);
删除记录的语句:
delete from 表名称 where id=???
delete from user where id=1; 出错,由于order中的外键是user中的id,所以user表中的数据不能随便修改
2.通过alter table来修改创建外键
alter table 表名称 add foreign key [外键名称](字段) references 表名(字段)
3.删除外键:
alter table 表名称 drop foreign key 外键名称
各个语句回顾:
1.记录操作
create table books(
bId tinyint not null auto_increment primary key,
bName varchar(100),
bTypeId tinyint,
publishing varchar(100),
price varchar(6),
pubDate date,
author varchar(20),
unique key (bName)
);
inert into books (bName,bTypeId,publishing,price,pubDate,author) values ("中国",123,"中国","中国","2013-09-03","中国");
2.修改语句
update 表名称 set 字段=值,字段=值,字段=值,字段=值 where bid=1;
demo:
update books set bName="网络程序设计",publishing="北京交通大学出版社",price="43.00",author="王月" where bid=1;
修改记录必须已经存在且修改记录的时候一定记得加条件,否则是修改的全部记录,令人畏惧。
3.删除语句
delete from 表名称 where 条件
注意:delete 语句必须也要有条件,若是没有条件等于清库了,这是很可怕的一件事情
4.选择(查询)语句:
格式:
select * from 表名称 这个是简化版的查询,我们一般不用这个语句
select[字段列表(字段1,字段2,...|*] from 表名称 [where 条件][order by 字段名称 desc倒叙|asc正序][limit 起始位置,长度][group 字段名称];
demo:
insert into books(bName,bTypeId,publishing,price,author) values ("电脑直通车",2,"电脑爱好者","52.00","黎明");
insert into books(bName,bTypeId,publishing,price,author) values ("网络程序计",3,"北方交通大学出版社","40.00","小迪");
insert into books(bName,bTypeId,publishing,price,author) values ("黑客攻防秘籍",4,"国防科技大学出版社","32.00","张虎");
1.字段列表取查找记录.
select bName,price from books;
字段列表没有顺序限制。
别名:字段和表名称 起一个别名
select bName as bieming,price as didi from books;
起别名以后,查询的结果字段都是以别名定义的
查询的结果我们叫它为结果集
2.排序 order by 字段
select * from books order by price desc;
一般排序字段:id,日期,price
3.limit 起始位置,长度
select * from books limit 0,2;
sql 查询出来的结果,id在一号位位置的地方是0.
4.where 条件
1>在连续的范围内。between...and....
select * from books where price between 30 and 43;
一般在范围的字段有年龄,价格,日期。
2>or 或者 and且
select * from books where price=34 of price=44;
select * from books where author="黄迪" of author="张虎";
or 和 and 两边可以写任意的等式,字段="值"
3>in(不连续的点) 效率不高,一般不用
select from books where price in(34,35,22);
4>like""模糊匹配
%匹配任意字符串
select * from books where 字段 like "%关键词%";
and 优先级高于or
比方说我们要查找价格为34和44,书名中含有网站两个字的倒叙排列的记录
select * from books where price =34 or price=44 and bName like "%网站" order by bId desc;
在这儿先结合and语句 再结合or语句 而且这儿的or 只要满足第一个条件则不执行后面条件了
上面语句应该改为
select * from books where (price=34 or price =44) and bName like"%网站" order by bId desc;
一般讲需要用括号来改变and和or的优先级
以上这些是基础的sql