1.1收集信息mysql
1.2概念設計(E-R圖)sql
1.3詳細設計(數據庫模型圖)數據庫
1.4審覈數據庫(三大範式)編程
2.1 E-R 安全
矩形:實體服務器
橢圓:屬性併發
菱形:關係app
3.1 映射關係ide
一對一,一對多,多對一,多對多函數
4.1 三大範式
第一範式:每一列都要保證原子性,分的不能再分了
第二範式:在知足1NF基礎上,每一張表只能表述一件事(有主鍵)
第三範式:在知足2NF基礎上 ,確保除主鍵以外的列都必須和主鍵有直接的關係,而不是間接地關係
建庫:create database myschool;
三種文件格式:主文件.mdf,次要文件 .ndf,日誌文件.ldf
create database myschool
--主文件
on [primary]
(
name='', --邏輯名稱
filename=‘。mdf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增加率 不能加百分號
),
--次要文件
(
name='', --邏輯名稱
filename=‘.ndf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增加率 不能加百分號
)
on log
(
name='', --邏輯名稱
filename=‘.ldf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增加率 不能加百分號
)
給數據庫添加文件
alter database myschool
add file
--次要文件
(
name='', --邏輯名稱
filename=‘.ndf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增加率 不能加百分號
)
Create table 表名
(
列 數據類型 數據特性(null or not null)
)
自動增加列 identity(1,1)
好比
Create table student
( id int identity(1,1) not null
)
刪除表 drop table 表名
刪除數據 delete 表名,truncate 表名
Alter table 表名
Add constraint pk_約束名 primary key (列名)
Alter table 表名
Add constraint uq_約束名 unique (列名)
Alter table 表名
Add constraint ck_約束名 check (列名<=100)
Alter table 表名
Add constraint df_約束名 default(‘默認值’) for 列名
Alter table 外鍵表
Add constraint fk_約束名 foreign key 列名 references 主鍵表(列名)
Alter table 表名
Drop constraint 約束名
局部變量Declare @變量名 數據類型=值
所有變量 @@error 錯誤號,@@identity 獲取最近一次的值 @@version版本號
set @變量名=值 or(set @變量名=(子查詢)) ,一次只能給一個變量賦值
Select @變量名 =值 ,select @變量名=字段,@變量名=字段 from 表,能夠給多個變量賦值;當返回多個數據的時候取最後一個
Convert (數據類型,變量)
特殊的能夠對datetime 類型的字段轉換 好比convert(字段,102)
Cast(變量名 as 數據類型)
If (條件)
Begin
---sql
End
Else
Begin
--sql
end
While(條件)
Begin
End
Case when 條件 then 結果
When 條件 then 結果
Else
End
批處理,把多條sql打個包一塊兒發送服務器執行,執行速度加快
select * from ( 子查詢 )別名
Select * from 表名 where 列名 in(子查詢)
Select * from 表名 where 列名 in(‘’,’’,’’)
Select * from 表名 where 列名 not in(子查詢)
Select * from 表名 where 列名 not in(‘’,’’,’’)
If exists(sql查詢) 判斷是否能查出數據
能夠改寫in 和not in
執行的效率比in和not 快
Select * from student wehre exists (select * from grade where grade.gradeid=student.gradeid)
Create proc 存儲過程名稱
As
Sql 語句
Go
Creta proc 存儲過程名稱
@變量名 數據類型
As
Sql 語句
Go
Creta proc 存儲過程名稱
@變量名 數據類型=’默認值’
As
Sql 語句
Go
Create proc 存儲過程名
@輸入變量 數據類型,
@輸出變量 數據類型 output
As
Sql語句
Go
Exec 存儲過程名稱
Execute 存儲過程名稱
經驗:當遇到go的時候 exec 能夠省略
開啓事務 begin transaction
提交事務 commit transaction
事務回滾 rollback transaction
惟一索引:當給一個列建惟一約束的時候,系統自動建立一個惟一索引(不能出現同一列重複的兩行)
主鍵索引:特殊的惟一索引,當給列添加一個主鍵的時候,系統自動建立一個彙集的索引
彙集索引:一張表只能有一個彙集索引(相似與字典的拼音查找)
非彙集索引:一張表能夠有多個非彙集索引(相似與自動偏旁部首)
語法
Create [unique|nonclustered|clustered]
Index ix_索引名 on tbale(列,列) with
Fillfactor=80 (沒有百分號)
刪除索引
Drop index table.索引名
運行速度快
使用成本低
可移植性強
適用用戶廣
社區版 免費,開源。適合普通用戶
企業版 收費,不可自由下載 功能和服務更完善 適合對功能和安全要求高的企業用戶
端口號:3306
默認字符集:utf8
utf8:一種Unicode編碼,解決國際上字符不統一的多字節編碼,通用性強
將bin目錄寫入環境變量
root密碼設置
Bin ,include,lib,share
my.ini:記錄MySQL配置信息,可修改配置內容,如端口號,字符集
Information_schema
Performance_schema
Mysql
Test
Myschool
Bank
Hospitaldb
create database myschool;
use 數據庫名稱
drop database 數據庫名稱
CREATE TABLE [IF NOT EXISTS] 表名(字段 數據類型 特徵)
非空約束 NOT NULL 字段不容許爲空
默認約束 DEFAULT 賦予某字段默認值
惟一約束 UNIQUE KEY(UK) 設置字段的值是惟一的容許爲空,但只能有一個空值
主鍵約束 PRIMARY KEY(PK) 設置該字段爲表的主鍵可惟一標識該表記錄
外鍵約束 FOREIGN KEY(FK) 用於在兩表之間創建關係,須要指定引用主表的哪一字段
自動增加 AUTO_INCREMENT 設置該列爲自增字段 默認每條自增1一般用於設置主鍵
主鍵 PRIMARY KEY
註釋 COMMENT ‘編號’ COMMENT='測試表’
設置字符集編碼 CHARSET = 字符集名
查看錶是否存在 USE myschool;SHOW tables;
查看錶定義 DESCRIBE 表名;或DESC 表名;
刪除表 DROP TABLE [IF EXISTS] 表名;
DML(數據操做語言)
用來操做數據庫中所包含的數據(update,delete,insert )
DDL(數據定義語言)
用於建立和刪除數據庫對象等操做(drop ,alter,create)
DQL(數據查詢語言)
用來對數據庫中的數據進行查詢(select)
DCL(數據控制語言)
用來控制數據庫組件的存取許可、存取權限等(grant)
TINYINT很是小的數據 有符值: -27 ~ 27-1 無符號值:0 ~ 28-1 1字節
SMALLINT 較小的數據 有符值: -215 ~ 215-1 無符號值: 0 ~ 216-1 2字節
MEDIUMINT 中等大小的數據 有符值: -223 ~ 223-1 無符號值: 0 ~ 224-1 3字節
INT 標準整數 有符值: -231 ~ 231-1 無符號值:0 ~ 232-1 4字節
BIGINT 較大的整數 有符值: -263 ~263-1 無符號值:0 ~264-1 8字節
FLOAT 單精度浮點數 ±1.1754351e -38 4字節
DOUBLE 雙精度浮點數 ±2.2250738585072014e -308 8字節
DECIMAL 字符串形式的浮點數 Decimal(M,D) M+2個字節
UNSIGNED屬性 標識爲無符號數
ZEROFILL屬性 寬度(位數)不足以0填充
CHAR[(M)] 定長字符串 M字節
VARCHAR[(M)] 可變字符串 可變長度
TINYTEXT 微型文本串 0~28–1字節
TEXT 文本串 0~216–1字節
DATE YYYY-MM-DD,日期格式 1000-01-01~ 9999-12-31
DATETIME YY-MM-DD hh:mm:ss: 1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIME hh:mm:ss: -835:59:59 ~ 838:59:59
TIMESTAMP YYYYMMDDHHMMSS 1970年某時刻~2038年某時刻,精度爲1秒
YEAR YYYY格式的年份 1901~2155
MyISAM、InnoDB 、Memory、CSV等9種
使用MyISAM: 不需事務,空間小,以查詢訪問爲主
使用InnoDB: 多刪除、更新操做,安全性高,事務處理及併發控制
修改存儲引擎 InnoDB
位置
MyISAM類型表文件:*.frm:表結構定義文件 *.MYD:數據文件 *.MYI:索引文件
InnoDB類型表文件:*.frm:表結構定義文件 ibdata1文件!!!
修改表名:ALTER TABLE 舊錶名 RENAME [TO] 新表名;
添加字段:ALTER TABLE 表名 ADD 字段名 數據類型 [屬性];
修改字段:ALTER TABLE 表名 CHANGE 原字段名 新字段名 數據類型 [屬性];
刪除字段:ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 表名 ADD CONSTRAINT 主鍵名 PRIMARY KEY 表名(主鍵字段);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY(外鍵字段)REFERENCES 關聯表名(關聯字段);
插入單條數據記錄
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
插入多條數據記錄
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);
將查詢結果插入新表
INSERT INTO 新表(字段1,字段2……) SELECT字段1,字段2……FROM 原表;
SELECT字段1,字段2…… INTO 新表 FROM 原表;
更新數據記錄
UPDATE表名 SET字段1=值1,字段2=值2,...,字段n=值n[WHERE條件];
刪除數據記錄
DELETE FROM 表名 [WHERE條件]; TRUNCATE TABLE 表名;
TRUNCATE語句刪除後將重置自增列,表結構及其字段、約束、索引保持不變,執行速度比DELETE語句快
SELECT <字段名列表>
[WHERE <查詢條件>]
[GROUP BY <分組的字段名>]
[HAVING <條件>]
[ORDER BY <排序的字段名> [ASC 或 DESC]]
LIMIT子句
[LIMIT [位置偏移量, ]行數];
AVG():返回某字段的平均值
COUNT():返回某字段的行數
MAX():返回某字段的最大值
MIN():返回某字段的最小值
SUM():返回某字段的和
CONCAT(str1,str1...strn) 字符串鏈接 SELECT CONCAT('My','S','QL');返回:MySQL
INSERT(str,pos,len,newstr) 字符串替換SELECT INSERT('這是SQL Server數據庫', 3,10,'MySQL');返回:這是MySQL數據庫
LOWER(str)將字符串轉爲小寫SELECT LOWER('MySQL');返回:mysql
UPPER(str)將字符串轉爲大寫SELECT UPPER('MySQL');返回:MYSQL
SUBSTRING(str,num,len)字符串截取SELECT SUBSTRING( 'JavaMySQLOracle',5,5);MySQL
CURDATE() 獲取當前日期 SELECT CURDATE();返回:2016-08-08
CURTIME() 獲取當前時間 SELECT CURTIME();返回:19:19:26
NOW() 獲取當前日期和時間 SELECT NOW();返回:2016-08-08 19:19:26
WEEK(date) 返回日期date爲一年中的第幾周 SELECT WEEK(NOW());返回:26
YEAR(date) 返回日期date的年份 SELECT YEAR(NOW());返回:2016
HOUR(time) 返回時間time的小時值 SELECT HOUR(NOW());返回:9
MINUTE(time) 返回時間time的分鐘值 SELECT MINUTE(NOW());返回:43
DATEDIFF(date1,date2) 返回日期參數date1和date2之間相隔的天數
ADDDATE(date,n) 計算日期參數date加上n天后的日期 SELECT ADDDATE(NOW(),5);
返回:2016-09-02 09:37:07
CEIL(x) 返回大於或等於數值x的最小整數 SELECT CEIL(2.3)返回:3
FLOOR(x) 返回小於或等於數值x的最大整數 SELECT FLOOR(2.3)返回:2
RAND() 返回0~1間的隨機數 SELECT RAND()返回:0.5525468583708134
SELECT … FROM 表1 WHERE 字段1 比較運算符(子查詢)
子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其餘子查詢中的查詢
子查詢在WHERE語句中的通常用法
使用mysqldump 命令
在cmd中寫命令(若是報錯,不支持內部名稱-》使用cmd 打開mysqldump.exe的安裝目錄)
備份個別表
mysqldump -u 用戶名 -p密碼 數據庫名稱 表1,表2,表3...>文件路徑d:\1.sql (注意:後面不能寫「;」號)
備份整個數據庫中全部的信息
mysqldump -u 用戶名 -p密碼 數據庫名稱>文件路徑d:\2.sql
mysql -u 用戶名 -p密碼 數據庫名稱<文件路徑
(注意:後面的「;」號不能寫)
select * from tablename into outfile '文件路徑地址';
load data infile '文件路徑地址' into table 表名稱
create tablespace sa
datafile 'D:\orcldata\sa.dbf' size 200M
reuse autoextend on next 1m maxsize unlimited;
--建立用戶 此用戶的密碼是accp 默認表空間是bdqn
create user sa identified by accp default tablespace sa;
grant connect,resource,dba to sa;
alter tablespace bdqn
add datafile 'D:\orcldata\bdqn2.dbf' size 200M
reuse autoextend on next 1m maxsize unlimited;
create table score(id int,
studentname varchar2(50),
classname varchar2(50),
result number(18));
insert into score values(1,'張三','一班',90);
insert into score values(2,'李四','一班',80);
insert into score values(3,'王五','一班',80);
insert into score values(4,'趙六','一班',60);
insert into score values(5,'小七','二班',90);
insert into score values(6,'李連杰','二班',80);
insert into score values(7,'王菲','二班',70);
insert into score values(8,'歐陽','二班',70);
select * from score;
--分頁
select id,studentname,classname ,result,rownum from score
--第一種排名
select t.*,rownum mc from (select id,studentname,classname ,result from score
order by result desc)t
--第二種排名
select t.*,rank() over(order by t.result desc ) mc from (select id,studentname,classname
,result from score
order by result desc)t
--第三種
select t.*, DENSE_RANK() over(order by t.result desc ) mc from (select id,
studentname,classname ,result from score
order by result desc)t;
--第四種,根據分組字段排名
select t.*,DENSE_RANK() over(partition by classname order by t.result desc )
mc from (select id,studentname,classname ,result from score
order by result desc)t
--累計
select tt.*,sum(tt.result) over(order by mc) from (select t.*,DENSE_RANK()
over(partition by classname order by t.result desc ) mc from
(select id,studentname,classname ,result from score
order by result desc)t)tt;
--累加
select score.*,sum(result) over(order by id) from score order by id;
expdp jhpt/1 dumpfile=hbjy20140923.dmp directory=DATA_PUMP_DIR FULL=Y --DATA_PUMP_DIR 在數據庫中查路徑,把文件導出到這個文件夾(select * from dba_directories 查看DATA_PUMP_DIR 對應的目錄)
impdp jhpt/1 dumpfile=hbjy20140923.dmp directory=DATA_PUMP_DIR FULL=Y
exp jhpt/1@orcl155 file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp log=d:\jhpt20150424.log
也能夠加owner=jhpt
imp jhpt/1@orcl155 file=D:\app\User\admin\orcl\dpdump\jhpt23.dmp FULL=Y
imp jhpt/qwer1234@orcl155 file=d:\base_purchaseinfo.bak tables=base_purchaseinfo
本機備份和還原效率最高,可是隻限於本機器
遠程備份是本地安裝Oracle數據庫,備份遠程數據庫的數據到本地
遠程還原是,把本地備份的數據還原到遠程數據庫
還原以前,把用戶,表空間,數據文件所有刪除,而後從新建立,還原的數據有幾個數據文件,須要建立幾個數據文件否則還原到一半拋出文件不夠錯誤
/*--刪除表空間已經表空間下的文件
drop tablespace jhpt including contents and datafiles;
--刪除用戶
drop user jhpt cascade;