每天給自己一個希望,努力做好自己,不為明天煩惱,不為昨天嘆息。當夢想還在,告訴自己:努力,就總能遇見更好的自己! [toc] MySql筆記(一) 1、創建資料庫以及刪除 1.創建資料庫語法:(命令行視窗操作) ~~~~sql CREATE DATABASE DATABASENAME ~~~~ 示例 ...
目錄
每天給自己一個希望,努力做好自己,不為明天煩惱,不為昨天嘆息。當夢想還在,告訴自己:努力,就總能遇見更好的自己!
MySql筆記(一)
1、創建資料庫以及刪除
1.創建資料庫語法:(命令行視窗操作)
CREATE DATABASE DATABASENAME
示例:創建名為MySQLTest的資料庫
CREATE DATABASE MySQLTest;
2.刪除資料庫語法:(命令行視窗操作)
DROP DATABASE DATABASENAME
示例:刪除名為MySQLTest的資料庫
DROP DATABASE MySQLTest;
2、Sql常用數據類型
1.整數類型:tinyint(微小的整數),smallint(小的整數),int(普通的整數),bigint(大的整數)
存儲的空間不同:tinyint只有一個位元組,smallint有兩個位元組,int有四個位元組,bigint有8個位元組
2.小數點的數據類型:定點數(decimal(p,s))和浮點數float(p,s)四個位元組,double(p,s)八個位元組。
定點數的小數點是固定的,而浮點數的小數點是不固定的,區別:定點數的小數點是固定的所以他的小數精度準確,
而浮點數的小數點是不固定的,所以浮點數的小數點的精度沒有定點數的精度準確度高。但是浮點數表示的範圍更大
3.日期/時間類型:date(某個日期,不包含時間), time(一天當中某一個點數) datetime(連日期帶時間)
4.文本類型:char(固定長度的文本) ,varchar , text(是存儲大文本的數據類型)
5.二進位的數據類型:bit(如果使用了bit類型,系統就會將數據存儲為二進位的形式)
3、創建數據表以及範式
(1.資料庫設計基本步驟(分四個階段):
1.需求分析階段:分析客戶的業務和數據處理需求
2.概要設計階段:將需求設計成資料庫的E-R模型圖,確認需求信息的正確和完整
3.詳細設計階段:將E-R模型圖轉換為多張表,進行邏輯設計,並應用數據量設計的三大範式進行審核
4.代碼編寫階段:選擇具體資料庫進行物理實現,並編寫代碼實現前端應用
例子:
模型QQ游戲大廳項目
1.需求分析:系統要記錄哪些信息?中國象棋,撲克游戲和玩家的信息,分數信息等
2.數據表:游戲表,玩家表,分數表
3.每個表的欄位
游戲表 玩家表 分數表
1.編號 1.QQ號 1.游戲編號
2.名稱 2.昵稱 2.玩家QQ
3.類型 3.性別 3.得分
4.難度 4.生日
5.手機號
將這些數據用E-R做一個模型實體關係圖
用長方形符號表示實體,一般是名詞
用圓形符號表示屬性,一般是名詞
用三角形符號表示關係,一般是名詞
2 範式:設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,
這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小
3 Dr E,F,codd最初定義了規範化的幾個級別,範式用以定義具有最小的冗餘的表結構
第一範式(1st NF)
如果每列都說不可再分的最小數據單元(也稱為最小的原子單元),側滿足第一範式(1NF)
第一範式的目標是確保每列的原子性
示例:
玩家QQ 地址 玩家QQ 國家 城市
12301 中國北京 -》修改為 12301 中國 北京
12302 美國紐約 12302 美國 紐約
第二範式(2nd NF)
如果一個關係滿足1NF,並且除了主鍵以為的其他列,都完全依賴於該主鍵,側滿足第二範式(2NF)
第二範式要求每個表只描述一件事情
示例: 游戲
游戲 欄位 值
欄位 值 游戲編號 1
游戲編號 1 游戲名稱 3D撞球
游戲名稱 3D撞球 -》修改為 游戲類型 體育
游戲類型 體育 游戲難度 1
游戲難度 1
勝者得分 100 難度獎勵
欄位 值
游戲難度 1
勝者得分 100
第三範式(3rd NF)
如果一個關係滿足2NF,並且除了主鍵以外的其他列都不傳遞依賴於主鍵列,側滿足第三範式(3NF)
第三範式要求表中不存在冗餘欄位
示例:
分數表 分數表
欄位 值 欄位 值
游戲編號 1 游戲編號 1
玩家QQ 12301 -》修改為 玩家QQ 12301
玩家昵稱 悟空 得分 2760
得分 2760
(2.使用客戶端創建數據表
步驟:
1.打開鏈接,選擇資料庫
2.右鍵選擇新建表
3.填寫表各個欄位的名稱,數據類型,勾選是否允許空
4.保存表
(3.使用命令行的方式創建數據表
步驟:
1.從命令行視窗登錄MySQL
2.使用CREATE TABLE語句創建表
語法公式:
CREATE TABLE table_name{
col_name1 col_type[not null].
col_name1 col_type[not null].
...
}
4、為隊列添加約束
(1.主鍵約束
1.約束的概念和作用(約束就是檢查官,檢查數據是否有重覆的內容)
2.主鍵約束作用:保證實體完整性
3.PRIMARY KEY是檢查兩條表中的語句是否有重覆
示例:為玩家表的玩家QQ列添加主鍵約束
create table users(
user_qq varchar(20) not null PRIMARY KEY,
user_name varchar(50) not null,
user_sex char(2) not null,
user_birthday date not null,
user_mobile char(11) not null
)
(2.外鍵約束
1.外鍵約束作用,保證引用完整性
2.references關鍵字的意思是引用的意思。
示例:為分數表添加外鍵約束
create table scores(
user_qq varchar(20) not null
references users(user_qq),
gno int not null,
score int not null
)
(3.檢查約束
1.檢查約束作用,保證域完整性
2.check()關鍵字的意思是游戲編號等要大於0,否則錯誤
例如:為游戲表添加檢查約束
create table games(
gno int not null check(gno>0),
gname varchar(50) not null,
gtype varchar(20) not null
)
(4.預設約束
1.作用:保證域完整性
2.DEFAULT'男'
(5.自增列
1.作用:保證實體完整性
2.AUTO_INCREMENT是自增列的關鍵字
例:為游戲表添加自增列
CREATE TABLE Games(
GNO INT NOT NULL AUTO_INCREMENT,
GName varchar(50) NOT NULL,
GType varchar(20) NOT NULL
}
5、查看表數據
查看表的基本結構
語法:DESCRIBE/DESC TABLE_NAME
結果含義:
Field:欄位名
Type:欄位類型
NULL:是否可以為空
Key:是否編製索引
Default:預設值
Extra:附加信息,如自增列
查看表的詳細結構
語法:SHOW CREATE TABLE TABLE_NAME
格式化結果:SHOW CREATE TABLE TABLE_NAME\G
6、修改數據表
修改表名
語法:ALTER TABLE OLD_NAME RENAME TO NEW_NAME
示例:
ALTER TABLE GAMES RENAME TO QQ_GAME
修改欄位名
語法:ALTER TABLE TABLE_NAME CHANGE OLD_NAME NEW_NAME NEW_TYPE
示例:
ALTER TABLE GAMES CHANGE GNO GAME_ID VARCHAR(20)
修改欄位數據類型
語法:ALTER TABLE TABLE_NAME MODIFY COL_NAME NEW_TYPE
示例:
ALTER TABLE GAMES MODIFY GNO VARCHAR(20)
添加和刪除欄位
添加欄位語法:ALTER TABLE TABLE_NAME ADD NEW_COL_NAME NEW_TYPE
刪除欄位語法:ALTER TABLE TABLE_NAME DROP COL_NAME
增補約束
添加主鍵語法:ALTER TABLE TABLE_NAME ADD CONSTRAINT CON_NAME PRIMARY KEY(COL_NAME)
示例:ALTER TABLE USERS ADD CONSTRAINT PK_USERS_USERQQ PRIMARY KEY(USERQQ)
添加外鍵語法:ALTER TABLE F_TABLE ADD CONSTRAINT CON_NAME FOREIGN KEY(F_COL)REFERENCES M_TABLE(M_COL)
示例:ALTER TABLE SCORES ADD CONSTRAINT FK_SCORES_GAMES FOREIGE KEY(GNO)REFERENCES GAMES(GNO)
添加檢查約束語法:ALTER TABLE TABLE_NAME ADD CONSTRAINT CON_NAME CHECK(EXP)
示例:ALTER TABLE GAMES ADD CONSTRAINT CK_GAMES_GNO CHECK(GNO>0)
添加預設值語法:ALTER TABLE TABLE_NAME ALTER COL_NAME SET DEFAULT VALUE
示例:ALTER TABLE USERS ALTER USER_SEX SET DEFAULT'男'
7、刪除數據
刪除無關聯數據表
語法:DROP TABLE [IF EXISTS] TABLE_NAME1,TABLE_NAME2
示例:DROP TABLE SCORES
刪除有關聯數據表
先解除關聯關係語法:ALTER TABLE F_TABLE_NAME DROP FOREIGN KEY CON_NAME
刪除表:DROP TABLE TABLE1,TABLE2
8、插入數據
為所有列都插入值
語法:INSERT[INTO] TABLE_NAME VALUES(V1,V2...Vn)
特點--列值同數,列值同序
示例;INSERT INTO USERS VALUES('12301'.'周天'.'男','1982-02-01','1371111222')
為特定列插入值
語法:INSERT[INTO] TABLE_NAME(COL1,COL2...COLn)VALUES(V1,V2...Vn)
特點:指定順序,列值對應
示例:INSERT INTO USERS(USER_QQ,USER_NAME,USER_MOBILE)VALUES('20020106','叮噹','13834561278')
一次性插入多條記錄
語法:INSERT[INTO] TABLE_NAME[(COL1,COL2...COLn)]VALUES(V1,V2...V1n),(V21,V22...V2n),(V23,V23...V3n)
示例:INSERT[INTO] USERS(USER_QQ,USER_NAME,USER_BIRTHDAY,USER_MOBILE)
VALUES('20020106'.'周天','1980-07-08','1371111555'),('20025564'.'立飛','1983-09-08','1382111555')
9、修改數據
修改全部數據
語法:UPDATE TABLE_NAME SET{COL_NAME=EXPRESSION}[...n]
示例1:把所有玩家的性別都改為男性
UPDATE USERS=SET USER_SEX='男'
示例2:把所有玩家的所有游戲分數都增加100分
UPDATE SCORES SET SCORE=SCORE+100
修改特定數據
語法:UPOATE TABLE_NAME SET{COL_NAME=EXPRESSION}[...n]
WHERE CONDITION_EXPRESSION
示例:把QQ為'12302'的玩家性別都改為女性
UPDATE USERS SET USER_SEX='女'
WHERE USER_QQ='12302'
#### 10、刪除數據
使用DELETE命令刪除數據表中的數據
語法:DELETE[FROM] TABLE_NAME
[WHERE CONDITION_EXPRESSION]
示例:刪除玩家表中所有女性玩家的信息
DELETE FROM USERS WHERE USER_SEX='女'
使用TRUNCATE TABLE刪除數據
語法:TRUNCATE TABLE TABLE_NAME
示例:清空分數表中所有信息
TRUNCATE TABLE SCORES
11、刪除數據
查詢和提取數據的過程
1.客戶端與伺服器交互
2.語法:SELECT COL1,COL2,...COLn
FROM TABLE1,TABLE2...TABLEn
[WHERE CONDITIONS][GROUP BY GROUP_BY_LIST]
HAVING CONDITIONS[ASC|DESC]]
3.SELECT的意思是:我要查詢或者顯示出哪幾個列的結果
FROM的意思是:這些列來源於哪些表
WHERE的意思是:符合部分條件的語句就寫上WHERE
GROUP BY的意思是:把查詢的結果進行分組
HAVING的意思是:統計結果
ORDER BY的意思是:把查詢的結果進行排序
12、刪除數據
1.查詢表的全部行和列
示例:查詢玩家表中全部的行和列
SELECT USER_QQ,USER_NAME,USER_SEX,USER_BIRTHDAY,USER_MOBILE
FROM USERS
簡便的查詢表的全部行和列的方法
語法:SELECT *FROM USERS
2.查詢表的部分列
示例:從玩家表中查詢玩家QQ和昵稱
SELECT USER_QQ,USER_NAME FROM USERS
3.別名的使用
示例:從玩家表中查詢玩家QQ和昵稱,並顯示為“玩家QQ”和“玩家昵稱”
SELECT USER_QQ AS'玩家QQ',USER_NAME AS'玩家姓名'
FROM USERS
4.DISTINCT關鍵字
作用:消除結果集中的重覆行
示例:顯示參與了游戲的玩家QQ,要求參與了多個游戲的玩家不重覆顯示QQ號
語法: SELECT DISTINCT USER_QQ FROM SCORES
5.LIMIT關鍵字
作用:指定結果集中數據的顯示範圍
示例:顯示玩家表中第三至第5條數據
語法:SELECT * FROM USERS LIMIT2,3