MySQL的基本概念與操作

數據庫的基本概念
什麼是數據庫?
用於存儲和管理數據的倉庫。
數據庫的特點:
持久化存儲數據的。其實數據庫就是一個文件系統
方便存儲和管理數據
使用了統一的方式操作數據庫 – SQL
數據庫的分類:
數據庫根據存儲採用的數據結構的不同可以分爲許多種,其中包含早期的層次式數據庫、網絡式數據庫。
目前佔市場主流的是關係型數據庫。當然還有非關係(NoSQL)型數據庫(鍵值對數據庫,例如:MongoDB、Redis)等其他類型的數據庫
常見的關係型數據庫:
SQL Server : 微軟提供(收費、Java中使用不多)
Oracle 甲骨文公司(收費、功能強大、性能優異,Java中使用者很多)
DB2 : IBM(收費、中型/大型、銀行/電信等企業)
MySQL : 瑞典MySQL AB(免費開源、小型、性能也不差、適用於中小型項目、可集羣)
SQLite : 迷你數據庫,嵌入式設備中

MySQL數據庫軟件
安裝
參考該博客: [https://blog.csdn.net/zhujialiang18/article/details/79780131]

卸載
推薦使用Total Uninstall 6傻瓜式卸載

啓動
MySQL服務啓動

 1. cmd--> services.msc 打開服務的窗口
 2. 使用管理員打開cmd
     net start mysql : 啓動mysql的服務            
     net stop mysql:關閉mysql服務

MySQL登錄

 1. mysql -uroot -p密碼
 2. mysql -hip -uroot -p連接目標的密碼
 3. mysql --host=ip --user=root --password=連接目標的密碼

1
MySQL退出

 1. exit
 2. quit

SQL
什麼是SQL?

Structured Query Language:結構化查詢語言
其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。

SQL通用語法

  1. SQL 語句可以單行或多行書寫,以分號結尾。
  2. 可使用空格和縮進來增強語句的可讀性。
  3. MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
  4. 3 種註釋

     單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有) 
     多行註釋: /* 註釋 */
    

SQL分類

  1. DDL(Data Definition Language)數據定義語言

    用來定義數據庫對象:數據庫,表,列等。關鍵字:create, drop,alter 等
  2. DML(Data Manipulation Language)數據操作語言

    用來對數據庫中表的數據進行增刪改。關鍵字:insert, delete, update 等
  3. DQL(Data Query Language)數據查詢語言

    用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等
  4. DCL(Data Control Language)數據控制語言(瞭解)

    用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT, REVOKE 等
    

DDL:操作數據庫、表

  1. 操作數據庫:CRUD
    (1) C(Create):創建

創建數據庫:

     create database 數據庫名稱;

創建數據庫,判斷不存在,再創建:

    create database if not exists 數據庫名稱;

創建數據庫,並指定字符集

    create database 數據庫名稱 character set 字符集名;

(2) R(Retrieve):查詢
查詢所有數據庫的名稱:

     show databases;

查詢某個數據庫的字符集:查詢某個數據庫的創建語句:

    show create database 數據庫名稱;

(3) U(Update):修改
修改數據庫的字符集

     alter database 數據庫名稱 character set 字符集名稱;

1
(4)D(Delete):刪除
刪除數據庫

     drop database 數據庫名稱;

判斷數據庫存在,存在再刪除

     
     drop database if exists 數據庫名稱;

(5) 使用數據庫
查詢當前正在使用的數據庫名稱

     select database();

使用數據庫

     
     use 數據庫名稱;
  1. 操作表
    (1) C(Create):創建

創建表:

    create table 表名(
            列名1 數據類型1,
            列名2 數據類型2,
            ....
            列名n 數據類型n
        );
    注意:最後一列,不需要加逗號(,)

約束:對錶中的數據進行限定,保證數據的正確性、有效性和完整性

  • 非空約束:not null,值不能爲null。保證所約束的列必須是不爲空的,即在插入記錄時,該列必須要賦值,例如:用戶註冊時,保存的密碼不能爲空。

        創建表時添加約束

    creare table stu(

    id int,
    name varchar(20) not null -- name爲非空

    );

  • 唯一約束:unique,值不能重複。保證所約束的列必須是唯一的,即不能重複出現,例如:用戶註冊時,保存的用戶名不可以重複。

    創建表時,添加唯一約束

    creare table stu(
        id int,
        phone_number varchar(20) unique -- 添加了唯一約束
    
    );
    • 注意mysql中,唯一約束限定的列的值可以有多個null

  • 主鍵約束:primary key。唯一且不能爲空,一張表只能有一個字段爲主鍵。
    在創建表時,添加主鍵約束
        create table stu(
            id int primary key,-- 給id添加主鍵約束
            name varchar(20)
        );
  1. 自動增長:如果某一列是數值類型的,使用 auto_increment 可以來完成值得自動增長。

        在創建表時,添加主鍵約束,並且完成主鍵自增長

    create table stu(

    id int primary key auto_increment,-- 給id添加主鍵約束
    name varchar(20)

    );

  1. 外鍵約束:foreign key,讓表於表產生關係,從而保證數據的正確性。

         在創建表時,可以添加外鍵

    create table 表名(

    ....
    外鍵列
    constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)

    );

複製表:

    create table 表名 like 被複制的表名;

數據庫數據類型

    tinyint:佔用1個字節,相對於java中的byte
    smallint:佔用2個字節,相對於java中的short
    int:佔用4個字節,相對於java中的int
    bigint:佔用8個字節,相對於java中的long
    float:4字節單精度浮點類型,相對於java中的float
    double:8字節雙精度浮點類型,相對於java中的double
    date:日期,只包含年月日,yyyy-MM-dd
    datetime:日期,包含年月日時分秒     yyyy-MM-dd HH:mm:ss
    timestamp:時間戳型    包含年月日時分秒     yyyy-MM-dd HH:mm:ss    
            如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
    char(n) 定長字符串,最長255個字符。n表示字符數
    varchar(n):變長字符串,最長不超過 65535個字節,n表示字符數,一般超過255個字節,超過會使用text類型,例如
                * name varchar(20):姓名最大20個字符
                * zhangsan 8個字符  張三 2個

(2) R(Retrieve):查詢
查詢某個數據庫中所有的表名稱:

    show tables;

查詢表結構:

    desc 表名;

(3)U(Update):修改
修改表名

     alter table 表名 rename to 新的表名;

修改表的字符集

     
    alter table 表名 character set 字符集名稱;

修改列名稱 類型

     
    alter table 表名 change 列名 新列別 新數據類型;
    alter table 表名 modify 列名 新數據類型

刪除列

     
    alter table 表名 drop 列名;

(4) D(Delete):刪除
刪除表

    drop table 表名;

判斷表存在,存在再刪除

     
     drop table  if exists 表名 ;

DML:增刪改表中數據
添加數據
語法:

  insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
  創建數據庫,判斷不存在,再創建:
     * 注意:
     1.只能在給所有列插入值時, 纔可以省略列列表, 否則會報錯
     2. 列名和值要一一對應。
     3. 如果表名後,不定義列名,則默認給所有列添加值
         insert into 表名 values(值1,值2,...值n)
     4. 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
     5. 插入數據時或者查詢數據時先確保編碼是否一致        

刪除數據
語法:

 delete from 表名 [where 條件];
 * 注意:
 1. 如果不加條件,則刪除表中所有記錄
 2. 如果要刪除所有記錄
     1. delete from 表名; -- 不推薦使用。有多少條記錄就會執行多少次刪除操作
     2. TRUNCATE TABLE 表名; -- 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。

查詢某個數據庫的字符集:查詢某個數據庫的創建語句:

 show create database 數據庫名稱;

1
修改數據
語法:

  update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
  * 注意:
   如果不加任何條件,則會將表中所有記錄全部修改
   如果修改列存在null值時:null值和任何值計算結果還是null, 因此, 可以通過ifnull函數將null置爲零對待.

DQL:查詢表中的記錄
語法

  select
      字段列表
  from
     表名列表
  where
     條件列表
  group by
     分組字段
  having
     分組之後的條件
  order by
     排序
  limit
     分頁限定

基礎查詢
(1) 多個列名的查詢:

 select 列名1,列名2... from 表名;
 * 注意:
     * 如果查詢所有,則可以使用*來替代列表

)去除重複:

 select  distinct 列名 from 表名;

1
(3)起別名:

 select 列名1 as XXX, from 表名;
 as也可以省略    

條件查詢
(1) where子句後跟條件

 ......form 表名 where 子句;

1
(2)運算符

(3)排序查詢

語法:

order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
1
排序方式:

  • ASC:升序,默認的
  • DESC:降序

注意:

如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件
1
(4)聚合函數

 1. count:計算個數
 2. max:計算最大值
 3. min:計算最小值
 4. sum:計算和
 5. avg:計算平均值

 * 注意:聚合函數的計算,排除null值。
     解決方案:
         1. 選擇不包含非空的列進行計算
         2. IFNULL函數

(5)分組查詢

語法:

group by 列名
1
where 和 having 的區別?

where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
1
2
(6)分頁查詢

  1. 語法:

    limit 開始的索引,每頁查詢的條數

  2. 公式:

    開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數

  3. 注意:

    limit 是一個MySQL"方言"瞭解更多產品詳情可點擊加關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章