1. 程式人生 > >MySql學習完後總結的知識點

MySql學習完後總結的知識點

約束 character 原子 目的 uid 年月日 建模 back ech

gc是java中垃圾回收機制


DBA(數據庫管理員)  統一密碼 aptech

關系型 (sql)   mysql oracle sql server sqlite(手機 輕量級數據庫) DB2       ----結構化

非關系(nosql)  redis(存的是鍵值對) MongoDB(微信公眾號) 

mysqld 安裝和卸載 mysqld -install提示服務安裝成功 運行services.msc可以查看本機服務
mysql 登錄和註銷
mysql 修改密碼

---- DOS執行mysql
1 打開mysql net start mysql 關閉 net stop mysql
2 登錄mysql mysql -h服務器主機地址 -u 用戶名 -p密碼 之間沒有空格
1 修改密碼 set password for‘root‘@‘localhost‘=password(‘aptech‘)

2 修改密碼 這個要在打開mysql 不能登錄進去再輸入下面的修改
mysqladmin -u root -p password

3 查看mysql版本信息和用戶名 select version(),user() 註意全部大寫

4 創建數據庫 create database 數據庫名
5 查看所有數據庫 show databases
show create database 數據庫名字

6 選擇使用的數據庫 use 數據庫名字
7 刪除數據庫 drop database 數據庫名字

8 創建表 create table 表名字(
字段1 數據類型 [字段屬性| 約束][索引][註釋],
。。。。。最後一行不加逗號 字段也就是列


查看表 show tables
#顯示表結構
DESC book;
SHOW CREATE TABLE book;

#刪除表
USE Library;
DROP TABLE book;
DROP TABLE Library.book;

9 主鍵 primary key 多主鍵

主鍵和自動增長是一起使用的 主鍵是唯一不重復的 不能出現空值 一張表只能有一個主鍵

唯一約束 可以為空但是只能一個空值 不能重復

10 註釋 comment加上註解名字 可以單引號包括起來

10 字符集 小括號後面加上 charset=字符集名字

11 無字符/有字符 unsigned 也就是不允許為負數


----SQL(結構化查詢語言)

1 DML (數據操作語言)insert
2 DDL (數據定義) create 列如 creat table create view drop table
3 DQL (數據查詢) select
4 DCL (數據控制) grant revoke 全部大寫

DML(inster update delete) DQL(select) 是重要的

---sql 的邏輯運算符

and 倆邊都是true結果才是true
or 倆邊都為false才返回false
not 對布爾表達式值取反 優先級最高

---查看某個數據庫的表
use 數據庫名字
describe 表名

---刪除表
use 數據庫名字
drop table 表名字

---修改表名字
alter table<舊表名>rename[to]<新表名>

--添加字段
alter table 表名 add 字段名 等等
ALTER TABLE test1 ADD `passwored` VARCHAR(10) NOT NULL

--修改字段

alter table 表名 change 原字段 新字段 數據類型[屬性]
ALTER TABLE test1 CHANGE id xinid INT NOT NULL

--刪除字段

alter table 表名 drop 字段

--添加主鍵

aleter table 表名 add constraint 主鍵名 primary key 表名(主鍵字段)

將表student的id 設置為主鍵
alter table student add constraint pk_student primary key student(id)

--添加外鍵
alter table 表名 add constraint 外鍵名 foreign key (外鍵字段)references 關聯表名(主鍵列)
列如 設置student 的字段id 和teacher 的字段 name建立主外鍵關聯
alter table student add constraint fk_student_teacher foreign key(id)references tercher(name)

auto_increment=100 設置初始值為100
set@@ auto_increment_increment=5 每次增長的是5

獲得當前系統時間的默認值 用now()
lenddate` DATETIME NOT NULL DEFAULT NOW() COMMENT ‘借閱日期‘,


----------------------------------表達當前時間 default current_timestamp

--------------------------------以上都是DDL的內容

----------------代碼練習
#創建數據庫
CREATE DATABASE ceshi;
#查看數據庫
SHOW CREATE DATABASE ceshi;
#刪除數據庫
DROP DATABASE ceshi;

#創建表
USE ceshi;
CREATE TABLE `bird`(
`id` INT(4) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT ‘小鳥的id‘,
`name` VARCHAR(6) UNIQUE KEY COMMENT ‘小鳥的名字‘,
`date` DATETIME DEFAULT NOW() COMMENT ‘小鳥的生日‘
)CHARSET=utf8
#查看表結構
DESC bird;
SHOW CREATE TABLE bird;

#刪除表結構
DROP TABLE bird1;
DROP TABLE ceshi.bird;


#修改表名字
ALTER TABLE bird1 RENAME bird;

#添加字段
ALTER TABLE bird ADD `sex` VARCHAR(1) DEFAULT ‘男‘;

#修改字段
ALTER TABLE bird CHANGE `sex``xinsex`INT(1) DEFAULT ‘1‘;

#刪除字段
ALTER TABLE bird DROP xinsex;

#添加主鍵約束
CREATE TABLE `xiniao`(
`id` INT(4) NOT NULL COMMENT ‘小鳥的id‘,
`name` VARCHAR(6) UNIQUE KEY COMMENT ‘小鳥的名字‘,
`date` DATETIME DEFAULT NOW() COMMENT ‘小鳥的生日‘
)CHARSET=utf8

ALTER TABLE xiniao ADD CONSTRAINT PK_xiniao PRIMARY KEY xiniao (id);

#添加外鍵約束
ALTER TABLE nan ADD CONSTRAINT fk_ren_nan FOREIGN KEY (id)
REFERENCES ren (id)

--------------給子類創建外鍵保持關聯 父類的字段必須是主鍵 子類的外鍵在子類中可以是主鍵也可以不是主鍵
----刪除的話父類不能先被刪除 一致而且數據類型必須
CREATE TABLE nian(
gradeid INT(10) PRIMARY KEY NOT NULL,
`name` VARCHAR(6) NOT NULL

)

CREATE TABLE student(
stuno INT(6) NOT NULL,
gradeid INT(5) PRIMARY KEY NOT NULL,
CONSTRAINT fk_nian_student FOREIGN KEY(stuno) REFERENCES nian(gradeid)
)

刪除外鍵
alter table student drop foreign key 寫上外鍵的名字
然後在刪除他的索引
alter table student drop foreign key 寫上外鍵的名字


--------------------------《使用DMA進行數據操作 添加刪除修改 表 中的數據》----------------------
insert 添加
update 修改
delete 刪除 ----------------操作的都是數據


# 1:字段或值之間用英文逗號隔開
# 2:字段1, 字段2… 該部分可省略,
# 但添加的值務必與表結構數據列順序相對應,且數量一致
# 3:提供的值要註意約束
---------------添加數據格式
insert into[(字段1,字段2.。。)] values(‘值1‘,‘值2‘,值3.。。)

字段可以省略
insert into表名 (字段)values(‘值1‘),(‘值2’)可以為一個字段列插入多個數據


#指定字段添加
INSERT INTO student(loginpwd,studentname,
gradeid,phone) VALUES(‘123‘,‘李四‘,20,‘13212345678‘);
#省略字段添加
INSERT INTO result VALUES(20180001,1,‘2018-1-31‘,60) ;
#違反約束的數據插入會出現異常
INSERT INTO result VALUES(20180011,1,‘2018-1-31‘,60) ;


#插入多行記錄
INSERT INTO result VALUES(20180001,1,‘2017-2-28‘,60),
(20180001,1,‘2017-3-31‘,70),
(20180003,1,‘2017-4-22‘,80),
(20180004,1,‘2017-5-31‘,90)


---------修改表裏的數據格式
update 表名 set 字段column_name=value[,column_name=value3][where condition]


-----刪除表中的數據 delete-----------

格式: delete [from] 表名 在加上 where 條件

#刪除表中所有的數據 再次使用insert into的話自增是在原來基礎上自增的

DELETE FROM bank ==truncate table +表名


delete刪除的是一整行 所有delete後不加字段 加的是表名


#刪除指定的數據
DELETE FROM student WHERE
studentno=20180005 OR
studentno=20180006
OR studentno=20180007

DELETE FROM result;

DELETE FROM student WHERE
studentno IN(20180001,20180003,20180004)


-----------------------------------like 和 % 和_的用法
#修改數據 login_pwd 帶有1的
UPDATE xintercher SET login_pwd=666
WHERE login_pwd LIKE ‘1%‘

UPDATE xintercher SET login_pwd=555
WHERE login_pwd LIKE ‘%1%‘

UPDATE xintercher SET studentname=‘xxxx‘
WHERE login_pwd LIKE ‘2_‘

between A AND B 介於 A和B之間的數值


WHERE studentno IN(20180001,20180003,20180004)====where studentno=2018001 or studentno=20180003 or studentno=2018004


-----------------創建 備份一個表格
#創建一個新表
CREATE TABLE stuback(SELECT * FROM student)

-------------------------------《DQL查詢語句 》------------------------
1 打開表-在刷新查看看的快捷鍵
select * from +表名
2 ‘‘是空 adress=‘‘ IS NULL 是(NULL)這個代表是空值 adress is null

3 select 字段 from 表名
where 加條件
order by 加字段 升序asc 降序 desc 默認不寫的升序 asc
limit [位置偏移量 行數] 4,4 偏移量從0開始


5 AS作為別名 給數據列取一個新名字(只讀不修改) 註意要有空格 還要逗號隔開 最後一個字段不加逗號 可以省略

#AS作為別名

#給數據列取一個新名字(只讀不修改)
SELECT stuid AS 編號,stuname AS 姓名 FROM student
SELECT stuid 編號,stuname 姓名 FROM student

#給數據表取個別名
SELECT s.stuid,s.stuname FROM student AS s

#把經過計算的結果用一個新名字代替
SELECT CONCAT(‘s:‘,stuid) AS 學號 FROM student;

6去除重復的記錄distinct
SELECT DISTINCT studentresult FROM result;

7#查詢家庭住址為null的學生的學號 電話 姓名
SELECT stuid,stuname,phone FROM student
WHERE adress IS NULL;#--------------------------不能寫成=null

8 聚合函數

avg()平均值 count()行數 max 最大值 min 最小值 sum 求和


查詢科目編號為1 的學生的最高分 和最低分
SELECT MAX(studentresult)AS 最高分,
MIN(studentresult)AS 最低分,
AVG(studentresult)AS 平均分,
SUM(studentresult)AS 總和
FROM result WHERE subno=1001;
查詢年級編號為1的學生個數
SELECT COUNT(*) AS 學生個數 FROM student WHERE nian_id;

9 字符串函數
concat(str,str)連接成一個字符串

insert(str 3 10 newstr)
#insert 插入替換字符串 3代表開始替換的位置 6是替換的長度
SELECT INSERT(‘我的家鄉是河南開封市‘,3,6,‘哈哈‘);

#截取字符串 substring 3代表開始截取的位置 2是截取的個數
SELECT SUBSTRING(‘abcdefghijk‘,3,2);

lower(str) 都變成大寫 upper(str)小寫

10 日期函數
#獲得當前日期
SELECT CURDATE();
#獲得當前時間
SELECT CURTIME();
#獲得當前日期和時間
SELECT NOW();

#倆個時間間隔天數
SELECT DATEDIFF(NOW(),‘1994-12-09‘)

year(date)獲得date中的年份
date(date)獲得date中的年月日
minute(date)獲得date中的分鐘
hour(datr)獲得date中的小時
adddate(date,n)計算日期date加上n天的日期


11 數學函數

ceil(2.3)返回大於等於數值2.3的最小整數 得到3
floor(2.3)返回小於等於數值2.3的最大整數 得到2

rand()返回0-1之間的小數


---------------代碼

#上機練習4
#1 查詢所在學期id為2的所有男同學的姓名和地址(倆個註意逗號隔開)
SELECT stuname ,adress FROM student
WHERE nian_id=1;

#2查詢無電子郵件的學生姓名和年級信息 (is null 代表的是空值)
SELECT stuname,nian_id FROM student
WHERE adress IS NULL;
#where adress=‘‘;

#3 查詢所在學期id為2 的學生中所在1990年後出生的學生姓名(year把birthday包裹住只能單一的顯示出他的年份其他不顯示出來)
SELECT stuname FROM student
WHERE nian_id=2 AND YEAR(birthday)>=1990

#4 查詢參加了日期為2013-2-15日的java科目考試的學生成績信息
SELECT subid FROM sub_kemu
WHERE sunname=‘java‘
SELECT studentresult 成績 FROM result
WHERE DATE(examdate)=‘2016-12-12‘ AND subno=1001;

#5查詢參加了java科目考試的學員總成績
SELECT SUM(studentresult) 總成績 FROM result
WHERE subno=1001

#查詢css的平均分
SELECT AVG(studentresult) 平均分 FROM result
WHERE subno=1001;

#上機練習5

#1 按照出生日期查詢學期id為1的學生信息
SELECT stuname 姓名,stuid 編號 FROM student
WHERE nian_id=1
ORDER BY birthday DESC;#(降序)

#2 按日期先後 成績由高到低查詢編號為1的科目考試成績信息
SELECT * FROM result
WHERE subno=1001
ORDER BY studentresult DESC,examdate ASC;#(最後再加分號)

#3 查詢2013-3-22參加java考試的前五名
SELECT studentresult 前五名 FROM result
WHERE DATE(examdate)=‘2016-12-12‘ AND subno=1001
ORDER BY studentresult DESC
LIMIT 0,5;

#4 查詢y2課時最多的科目名稱
SELECT subid 科目 FROM sub_kemu
ORDER BY `subdate` DESC
LIMIT 1

#5 查詢年紀最小的學生的姓名和所在班級
SELECT stuname 姓名,nian_id 所在班級,birthday FROM student
#order by DATEDIFF(now(),birthday)
ORDER BY birthday DESC
LIMIT 1

#6 查詢2013--3-22參加考試的最低分出現在哪個科目中

SELECT subno ,studentresult FROM result
WHERE DATE(examdate)=‘2016-12-12‘
ORDER BY studentresult
LIMIT 0,1

#7 查詢學號10000的學生參加所有的考試信息並按時間的先後順序顯示
SELECT * FROM result
WHERE stuno=3
ORDER BY examdate

#8 查詢10000學生參加過所有的考試中最高分極時間 科目
SELECT studentresult 成績,examdate 時間,subno 科目 FROM result
WHERE stuno=3
ORDER BY studentresult DESC
LIMIT 1

#上機練習6

#1 查詢2016-2-17考試前五名的學生的學號和分數
SELECT stuid AS 學號,studentresult AS 分數 FROM student
INNER JOIN result
WHERE examdate=‘2016-12-12‘
ORDER BY studentresult DESC
LIMIT 0,5;

#將所有女學生按年齡由大到小排列 從第2條記錄開始顯示6名女學生的姓名 年齡 出生日期 手機號
SELECT stuname AS 名字, birthday AS 出生日期,phone AS 手機號,CEIL(DATEDIFF(NOW(),birthday)/365) AS 年齡 FROM student
WHERE sex=‘女‘
ORDER BY birthday DESC
LIMIT 1,6
#按出生年份分組統計學生人數 將各組中的人數達到倆人的年份和人數顯示出來
#2016-12-12考試的所有學員最高分 最低分 平均分
SELECT MAX(studentresult),MIN(studentresult),AVG(studentresult) FROM result
WHERE DATE(examdate)=‘2016-12-12‘

-------------------------------DQL查詢 的子查詢 分頁查詢 分組 自連接 連接查詢
#-------------------------分頁顯示
#要求 分頁顯示學生信息 每頁顯示5條
SELECT * FROM student
ORDER BY stuid DESC
#第一頁
LIMIT 0,5

SELECT * FROM student
ORDER BY stuid DESC
#第二頁
LIMIT 5,5

SELECT * FROM student
ORDER BY stuid DESC
#第三頁
LIMIT 10,5

()()()()()-------》#偏移量的算法是 當前頁數減去一在乘 當前顯示的條數 列如 第三頁 偏移量=3-1*5(條數)


------------------------------------子查詢 連接查詢
#-----------------group by分組查詢
SELECT COUNT(1) FROM student #返回所有總行數 匯總所有記錄 用數字代表字段
SELECT COUNT(adress) FROM student #返回具體的列名 統計的是不為空的記錄

#統計每個班級的人數
SELECT COUNT(1) AS 總人數 , nian_id AS 班級 FROM student
GROUP BY nian_id

SELECT nian_id,COUNT(1) FROM student
GROUP BY nian_id

#統計每個班級男同學和女同學的人數 切 人數大於8人的班級
SELECT COUNT(1) 總人數,sex, nian_id FROM student
GROUP BY sex,nian_id
HAVING COUNT(1) >8


#上機練習4
#1查詢每個年級的總學時數,並按照升序排列
SELECT gradeId 年級,SUM(classHour) 總學時 FROM `subject`
GROUP BY gradeId
ORDER BY SUM(classHour)
#2查詢每個參加考試的學員的平均分
SELECT studentNo 學號, AVG(studentResult) 平均分 FROM result
GROUP BY studentNo
#3查詢每門課程的平均分,按降序排列
SELECT subjectNo 課程編號,AVG(studentResult) 平均分 FROM result
GROUP BY subjectNo
ORDER BY AVG(studentResult) DESC
#4查詢每個學生參加的所有考試的總分,並按照降序排列
SELECT studentNo 學號,SUM(studentResult) 總分 FROM result
GROUP BY studentNo
ORDER BY SUM(studentResult) DESC


#1 查詢每個班級的總學時數 並按照升序排列
SELECT nian_id AS 班級, SUM(`subdate`) 成績和 FROM sub_kemu
GROUP BY nian_id
ORDER BY SUM(`subdate`)


#2 查詢每個參加考試的學員的平均分
SELECT stuno 學員id, AVG(studentresult) FROM result
GROUP BY stuno

#3 查詢每門課程的平均分 並按降序排列
SELECT subno AS 每門課程, AVG(studentresult) FROM result
GROUP BY subno
ORDER BY AVG(studentresult)

#4 查詢每個學生的參加所有考試的總分 並按照降序排列
SELECT SUM(studentresult) ,stuno FROM result
GROUP BY stuno
ORDER BY SUM(studentresult)

#連接 查詢

#--------------------------------------內連接(等值)
#從sub和nian_id中找到課程名字 所屬年級名稱
#第一種寫法 where
SELECT DISTINCT n.nian_id ,sunname,nian_name FROM nian_biao n ,sub_kemu s
WHERE n.nian_id=s.nian_id

#第二種寫法 inner on
SELECT DISTINCT n.nian_id ,sunname,nian_name FROM nian_biao n
INNER JOIN sub_kemu s
ON n.nian_id=s.nian_id

#查詢 學號 姓名 考試科目名稱 成績 (3表內聯)
SELECT s.stuid AS 學號, stuname AS 姓名, sub.sunname AS 學科名稱, r.studentresult AS 成績
FROM student s
INNER JOIN sub_kemu sub
ON s.stuid=sub.subid
INNER JOIN result r
ON r.stuno=sub.subid

#------------------------左右外連接
#左邊為基準 右邊沒有的用null填充

SELECT DISTINCT n.nian_id ,sunname,nian_name FROM nian_biao n
LEFT JOIN sub_kemu s
ON n.nian_id=s.nian_id

#上機練習8
#查詢所有科目的考試成績信息 (某些科目可能從沒有被考試過)
SELECT s.sunname,r.studentresult FROM sub_kemu s
LEFT JOIN result r
ON s.subid=r.subno

#查詢從未考試的科目
SELECT s.sunname,r.studentresult FROM sub_kemu s
LEFT JOIN result r
ON s.subid=r.subno
#where r.studentresult is null; 不能拿成績 做條件 有的人缺考
WHERE r.examdate IS NULL;

SELECT sunname, studentresult FROM sub_kemu s
LEFT JOIN result r
ON s.subid= r.subno
WHERE r.examdate IS NULL;

#----------------------------自身連接

CREATE TABLE fuzi(
id INT(4) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
idname VARCHAR(6) NOT NULL,
parentid INT(4) UNSIGNED
)CHARSET=utf8

INSERT INTO fuzi (id,idname) VALUES (1,‘軟件開發‘),
(2,‘美術設計‘),
(3,‘java基礎‘),
(4,‘oop基礎‘),
(5,‘數據庫技術‘),
(6,‘ps技術‘),
(7,‘色彩搭配技術‘)

#要求把父類子類信息分別顯示出來
SELECT p.idname AS 父欄目,c.idname AS 子欄目 FROM fuzi p
INNER JOIN fuzi c
ON p.id=c.parentid


#-------------分頁顯示
#要求 分頁顯示學生信息 每頁顯示5條
SELECT * FROM student
ORDER BY stuid DESC
#第一頁
LIMIT 0,5

SELECT * FROM student
ORDER BY stuid DESC
#第二頁
LIMIT 5,5

SELECT * FROM student
ORDER BY stuid DESC
#第三頁
LIMIT 10,5

#偏移量的算法是 當前頁數減去一在乘 當前顯示的條數 列如 第三頁 偏移量=3-1*5(條數)


# 子查詢 也叫嵌套查詢 查詢方式由裏到外 子查詢的結果一般是集合 建議使用in關鍵字


#查詢比孫悟空小的學生信息
SELECT * FROM student
WHERE birthday>(
SELECT MAX(birthday) FROM student
WHERE stuname=‘孫悟空‘
)


#使用子查詢 查詢參加最近一次 java考試成績的學生最高分和最低分

#查詢Logic Java的科目編號
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘
#查詢獲得Logic Java最近一次的考試日期
SELECT MAX(DATE(examdate)) FROM result
WHERE subjectno IN(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘)
#根據課程編號獲取考試成績的最高分和最低分
SELECT MAX(studentresult),MIN(studentresult) FROM result
WHERE subjectno=(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘
)
AND
DATE(examdate)=(
SELECT MAX(DATE(examdate)) FROM result
WHERE subjectno=(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘)
)
---------------------------------------------------------------------
SELECT MAX(studentresult), MIN(studentresult) FROM result
WHERE subno IN(
SELECT subid FROM sub_kemu WHERE sunname=‘java‘
)
AND
DATE(examdate)=(
SELECT MAX(DATE(examdate)) FROM result
WHERE subno IN(
SELECT subid FROM sub_kemu WHERE sunname=‘java‘
)
)

#檢查LogicJava課程最近一次考試。如果有成績達到80分
#以上者,則顯示分數排在前5名學員的學號和分數
SELECT studentno,studentresult FROM result
WHERE EXISTS(
SELECT * FROM result WHERE subjectno=(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘
) AND examdate=(
SELECT MAX(examdate) FROM result
WHERE subjectno=(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘)
) AND studentresult>80
)
AND
subjectno=(
SELECT subjectno FROM SUBJECT WHERE subjectname=‘LogicJava‘
)
ORDER BY studentresult DESC
LIMIT 5

SELECT * FROM result WHERE EXISTS
(
SELECT * FROM result WHERE studentresult>80
)

--------------------------------------------------------------------------------------------------------------------
------HAVING子句是用來對分組後的數據進行篩選的 where不能對分組的進行篩選
執行順序 WHERE---GROUP BY--HAVING

--DATEDIFF(date1,date2)返回1和2之間相隔的天數
--ADDDATE(date,n)計算date加上n天的日期

---數據類型 double(5,2)取值範圍是-999.99~999.99
tinyint smallint mediumint int float double decimal
字符串類型
char 固定長度 varchar 可變長度

語法
where
group by
order by
limit 4 ,4
是從第五條數據開始顯示的第一條數據的偏移量是0 8

--子查詢作為where條件的一部分 當和比較運算符比較的時候子查詢返回的值不能多於一個

--inner jion 。。。on
--子查詢必須在一個小括號裏面

--模糊查詢 %代替一個或者多個字符 _ 代表一個字符查詢

--查詢沒有參加最近一次java考試的學生的學生信息 參加了用 in 沒有參加就用 not in

--高級子查詢
exists和not exists 子查詢是將主查詢字段傳遞到後邊的查詢作為條件 返回值true或者false

內連接 外鏈接(左右連接)
=和<>
使用inner join on 或者 where進行表之間的連接
inner jion 連接倆個表(inner可以省略)
on 用來設置條件

事務 原子性 一致性 隔離性 持久性
set autocommit=0 關閉自動提交 =1 開啟自動提交 begin或者start transaction 開始事務 commit 提交事務 rollback 回滾事務

--------------《數據庫設計》
建模
visio流程圖 UML 圖 ---》 數據庫模型圖、
powerdesigner 數據庫模型圖---》流程圖 UML圖
rose

數據庫設計流程
需求分析 分析客戶業務和數據處理需求
概要設計 設計數據庫的E-R模型圖確認需求信息的正確性和完整
詳細設計 應用三大範式審核數據庫結構
代碼編寫 物理實現數據庫編寫實現應用
軟件測試。。。。
軟件部署。。。

E-R圖是實體關系圖 數據庫模型圖 倆大圖

entity實體 relationship實體之間的關系

實體 矩形 屬性 橢圓 關系 菱形

後綴 .cdm 是E-R圖的後綴
後綴 .pdm是數據庫模型圖

映射基數 一對多
一對一 一對多 多對一 多對多


第一範式 確保每列的原子性 (滿足是不可再分的最小單元) 則就是第一範式
第二範式 確保每個表只描述一件事情
第三範式 滿足了第二範式然後確保每列和主鍵列直接相關 而不是間接相關


創建索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER NOT NULL ,
`content` text CHARACTER NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))-------------------------------
)

修改表結構的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

刪除索引
DROP INDEX index_name ON tabl

MySql學習完後總結的知識點