首頁  >  文章  >  資料庫  >  學習基礎mysql語法

學習基礎mysql語法

巴扎黑
巴扎黑原創
2017-06-23 11:10:401595瀏覽

 

  前 言

 mysql 

# mysql語法--本篇學習都是透過使用Navicat Premium(資料庫管理工具,連接mysql資料.



本篇學習主要有兩個部分:

     一、建立用戶,建立資料庫,給予使用者權限,刪除使用者權限。

     二、MYSQL中常見的資料類型
   三、表-建立表格、主鍵、外鍵
     四、資料庫設計的三大範式
以下所有程式碼全部在新查詢表裡面使用mysql語法編輯。 ############ #########################1、建立用戶,建立資料庫,給予使用者權限,刪除使用者權限。 #########################
/* SQL 多行註解*/
-- SQL 單行註解

#建立使用者:CREATE USER '使用者名稱'@'主機名稱' IDENTIFIED BY '密碼';
#      主機名稱可以為空,為空預設為%權限,表示所有主機可連線。
給使用者指派權限: GRANT 權限名稱ON 資料庫名稱.表示TO 使用者名稱@主機名稱         
#刪除使用者權限#:    REVOKE 權限名稱ON 資料庫名稱.表示FROM 使用者名稱@主機名稱;
建立資料庫: CREATE DATABASE [IF NOT EXISTS] 資料庫名稱[CHARACTER SET[= ] 'UTF8'];
     <<<如果省略[IF NOT EXISTS] 重複建立資料庫時,會報錯!
查詢本機中所有的資料庫:SHOW DATABASES

使用mydb這個資料庫↓,表示下面的查詢都會預設針對mydb資料庫
USE mydb;
查詢資料庫中所有資料表: SHOW TABLES [FROM 資料庫]

 

#2  MYSQL中常見的資料類型
   
一、字元型:

      ① CHAR(N):固定N個字元長度的字串,如果長度不夠會自動空格補齊;
② VARCHAR(N):儲存可邊長度的字元節。常用的 0~255;
      ③ TEXT:儲存可變長度的字串。 (常用語發佈文章等大段內容)0~((2^16-1)*10^2);
      ④ TINYTEXT:0~((2^8-1)*10);
 〠 MEDIUMTEXT:0~((2^24-1)*10^3)​​;
      ⑥ LINGTEXT:0~((2^32-1)*10^4);
      ⑦ enum(" "女"):枚舉類型,欄位只能容納列舉的資料。

二、整形:
    
    ① TINYINT:         無符號0~2^8-1  有符號-2^7~22-1;##^7-1;## ② SMALLINT:    無符號0~2^16-1 有符號-2^15~2^15-1;
    ③ MEDIUMINT:   無符號0~2^24-1 有符號-2^23~2^23 -1;
    ④ INT:             無符號0~2^32-1 有符號-2^31~2^31-1 最常用!
    ⑤ BIGINT:      無符號0~2^64-1 有符號-2^63~2^63-1;


三、浮點型:
##    ① FLOAT:  可以精確到小數點後7位有效數字;
    ② DOUBLE:  可以精確到小數點後15位到16位有效數字;


4、日期時間資料資料類型#    
    注意:由於時間儲存使用字串或時間戳存儲,所以資料庫中幾乎沒有日期類型。
    ① DATE:儲存日期與時間資料
    ② TIMESTAMP:比DATE更精確


## 

## 
##3、表-建立表格、主鍵、外鍵
######
   
 【建立表格

  CREATE TABLE [IF NOT EXISTS] 表單名稱(
  IF NOT EXISTS 可以省略,省略後重複建立報錯.如果不省略,則建立時會偵測表是否已存在,如果表存在則不再執行建立語句
  定義列:列名資料類型清單關鍵字
  )
  常用的列定義關鍵字:
          ① UNSIGNED: 設定清單為無符號列。只能設定類型為數字類型的欄位
          ② AUTO_INCREMENT PRIMARY KEY 設定列為自動成長列。自動增長列必須是主鍵。
          ③ NOT null:設定列為非空白限制
          ④ UNIQUE:設定唯一性限制。該欄位不能出現重複值。
          ⑤ DEFAULT: 設定預設值限制。


 【主鍵

#      1、主鍵的注意事項?  主鍵預設為空!主鍵預設唯一性約束!
                                                                          
      2中使用中主鍵的方式?
              ① 在列定義是設定: age SMALLINT(3) PRIMARY KEY,
         #【外鍵】  
 
      1、設定外鍵有哪些注意事項
          ①=innodb的資料庫引擎支援外鍵,修改mysql.ini    ①=innodb的資料庫引擎支援外鍵,修改mysql.inidefault-storage-engine=innodb的資料庫引擎支援外鍵,修改mysql.ininote類型必須相同。 (數值型要求長度和無符號都相同,字串要求型別相同,長度可以不同。)          ③ 設定外鍵的欄位必須要有索引。如果沒有索引,設定外鍵時會自動產生一個索引。
      2、設定外鍵的語法?
          [CONSTRAINT 外鍵名稱] FOREIGN KEY (外鍵欄位) REFERENCES 參考表(參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update 3、外鍵約束的參照完整性操作?
          參考作業:當參考表的參考欄位進行刪除或更新是,外鍵表中的外鍵如何應對。
          參照作業選用值:restrict 拒絕參考表刪除或更新參考欄位;(預設)
             NO ACTION 與restrict一樣,但這個指令只在mysql生效;
                           欄位時,外鍵表的記錄同步刪除或更新;(外鍵表與參考表同步)
                           外鍵設為null;

         

 

#
CREATE TABLE IF NOT EXISTS tb1( 
-- IF NOT EXISTS 可以省略,省略后重复创建报错.如果不省略,则创建时会检测表是否已存在,如果表存在则不再执行创建语句id INT(3),
    `name` VARCHAR(255) NOT null, -- name是系统关键字,所以使用反引号``包裹age SMALLINT(3) AUTO_INCREMENT PRIMARY KEY,
    lalala INT UNIQUE,
 height DOUBLE(3,2) DEFAULT 1.2 -- 设置默认值约束:默认值为1.2-- PRIMARY KEY(age));create table if not exists classes(
 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  classname VARCHAR(255) NOT NULL );CREATE table if not EXISTS `user`(
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    clsId INT UNSIGNED,
    `name` VARCHAR(255) NOT NULL, CONSTRAINT user_fk_classes FOREIGN KEY (clsid) REFERENCES classes(id) ON DELETE SET NULL on update CASCADE)-- auto_increment-- 显示表结构SHOW TABLES;-- 显示表内容结构SHOW COLUMNS FROM TB1;-- 现实表的建表语句show create TABLE tb1;-- 删除表DROP TABLE IF EXISTS TB1;DROP TABLE IF EXISTS classes;DROP TABLE IF EXISTS `user`;-- 修改表名 ALTER table tb1 rename tb2;-- 修改字段 列-- alter table 表名 change 旧列名 新列名 列定义 [first|after某一列]-- first 将这个字段调整为表格第一列; after某一列: 将这个字段放到某一列后面alter table tb1 change height width VARCHAR(200) not NULL FIRST; 



-- 删除表中某一列alter table tb1 drop name;-- 新增一列:必选部分:alter table tb1 add haha DOUBLE(8,2)alter table tb1 add haha DOUBLE(8,2) DEFAULT 1.2 after age;-- 新增多列:不能调整列的位置,只能插在最后。alter table tb1 add (
    ha1 DOUBLE(3,2) UNSIGNED,
    ha2 VARCHAR(255)
);-- 同时修改多表明  rename table tb3 to tb1[,`USER`to user1];rename table tb2 to tb1,`USER`to user1;-- 增加主键约束alter table tb1 add PRIMARY KEY(id);-- 删除主键约束alter table tb1 drop PRIMARY KEY;-- 新增唯一性约束ALTER table tb1 add unique key(ha1);-- 删除唯一性约束:由于创建唯一性约束会默认创建索引,所以删除时,需删除索引ALTER table tb1 drop index ha1;    
-- 设置默认值约束:前提必须设置default 属性ALTER table tb1 alter ha1 set default 20;-- 删除默认值约束ALTER table tb1 alter haha drop default;-- 设置外键约束 必选部分  alter table tb1 add  foreign key (clsid)REFERENCES classes(id)alter table tb1 add constraint waijianming foreign key (clsid)REFERENCES classes(id) ON DELETE SET NULL on update CASCADE;-- 删除外键约束,由于常见外键时会生成索引,所以删除外键后,需要删索引。alter table tb1 drop foreign key waijianming;alter table tb1 drop INDEX waijianming;

SHOW COLUMNS FROM TB1;




rrreee

 

 

#4  資料庫的三大典範
#   
1、第一範式(1NF):資料表中的每一列(欄位),必須是不可分割的最小單元。也就是確保每一列的原子性。
        例如:userInfo:'山東省煙臺市13181621008'
                   #  下台省下180187201867206767676767607207207072020年307370020年3700070年370007370年部分:# 2.第二範式(2NF):滿足1NF後,要求:表中的所有列,都必須依賴主鍵,而不能有任何一列與主鍵沒有關係。   也就是說,一個表只描述一件事情。

        例如: 訂單表,只能描述與訂單相關的資訊,所以所有的欄位都必須與訂單ID相關;
                                   與產品ID相關;
        因此: 不能在同一張表中同事出現訂單資訊與產品資訊。

3、第三範式(3NF):表中的每一列都要與主鍵直接相關,而不是間接相關。 (表中的每一列,只能依賴主鍵)。
    例如:訂單表中,需有顧客相關資訊,分理處顧客表之後。訂單表中,只需要有一個使用者ID即可。而不能有其他的客戶資料。因為,其他的使用者資訊是直接關聯於使用者ID,而不是關聯於訂單ID。


【第二範式與第三範式的本質差異】
在於沒有分出兩張表,第二範式是說一張表包含了多種不同實體的屬性,那麼必須要分成多張表。
第三範式是要求,已經分好了多張表的化,那麼,一張表中只能有另一張表中的ID(主鍵),而不能有其他的任何信息(其他的任何信息,一律用主鍵在另一表查詢)
         

 

 

 

學習時候的筆記,可能會有一些錯誤的地方,歡迎各位的批評指點。

反思,複盤,每天收穫一點---------------------期待更好的自己

 

#

以上是學習基礎mysql語法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn