MySql筆記(一)

目錄html

天天給本身一個但願,努力作好本身,不爲明天煩惱,不爲昨天嘆息。當夢想還在,告訴本身:努力,就總能碰見更好的本身!前端

MySql筆記(一)

一、建立數據庫以及刪除

1.建立數據庫語法:(命令行窗口操做)mysql

CREATE DATABASE DATABASENAME

示例:建立名爲MySQLTest的數據庫sql

CREATE DATABASE MySQLTest;

2.刪除數據庫語法:(命令行窗口操做)數據庫

DROP DATABASE DATABASENAME

示例:刪除名爲MySQLTest的數據庫服務器

DROP DATABASE MySQLTest;

二、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(是存儲大文本的數據類型)code

5.二進制的數據類型:bit(若是使用了bit類型,系統就會將數據存儲爲二進制的形式)

三、建立數據表以及範式

(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].
        ...
}

四、爲隊列添加約束

(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
}

五、查看錶數據

查看錶的基本結構
語法:DESCRIBE/DESC TABLE_NAME

結果含義:
    Field:字段名
    Type:字段類型
    NULL:是否能夠爲空
    Key:是否編制索引
    Default:默認值
    Extra:附加信息,如自增列

查看錶的詳細結構
語法:SHOW CREATE TABLE TABLE_NAME
格式化結果:SHOW CREATE TABLE TABLE_NAME\G

六、修改數據表

修改表名
語法: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'男'

七、刪除數據

刪除無關聯數據表
語法: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

八、插入數據

爲全部列都插入值
語法: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')

九、修改數據

修改所有數據
語法: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'
#### 十、刪除數據

使用DELETE命令刪除數據表中的數據
語法:DELETE[FROM] TABLE_NAME
[WHERE CONDITION_EXPRESSION]

示例:刪除玩家表中全部女性玩家的信息
        DELETE FROM USERS WHERE USER_SEX='女'

使用TRUNCATE TABLE刪除數據
語法:TRUNCATE TABLE TABLE_NAME

示例:清空分數表中全部信息
        TRUNCATE TABLE SCORES

十一、刪除數據

查詢和提取數據的過程
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的意思是:把查詢的結果進行排序

十二、刪除數據

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

相關文章
相關標籤/搜索