【學習總結】SQL的學習-2-sql操做

參考連接

目錄

=======================================================html

建庫和建表

語法

  • 建庫:CREATE DATABASE 數據庫名;

    • 示例:mysql> create database learning;
  • 建表:CREATE TABLE table_name (column_name column_type);

    • 示例:

操做

  • 本部分經常使用命令小結

    • 登陸MySQL:mysql -u root -p+回車+輸入密碼
    • 查看已有數據庫:show databases;
    • 選擇要操做的數據庫:use 數據庫名;,例如use learning;
    • 查看當前操做的數據庫:select database();
    • 查看數據庫中已有的表:show tables;
    • 查看某個表的詳細信息:desc 表名;,例如desc houses;
  • step1:登陸MySQL並查看已有數據庫

  • step2:建庫並查看

  • step3:建表並查看

=======================================================mysql

數據庫查詢語言DQL

概述

  • Data Query Language
  • 基本結構:select子句,from子句,where子句組成的查詢塊;
    • SELECT <字段>
    • FROM <表或視圖名>
    • WHERE <查詢條件>
    • 注:視圖view:虛擬的表,只能查詢,不能刪除或修改,操做語法同表table。

查詢語法

  • SELECT column_list/*要查詢的列名稱*/sql

  • FROM table_list /*要查詢的表名稱*/ -- 可能從多張表查詢,而後合併輸出數據庫

  • WHERE condition /*行條件*/函數

  • GROUP BY grouping_columns /*對結果分組*/學習

  • HAVING condition /*分組後的行條件*/3d

  • ORDER BY sorting_columns /*對結果排序*/日誌

  • LIMIT offset_set, row_coun t /*結果限定顯示行數*/ -- 數據太多時,只顯示指定部分的數據code

  • ;htm

  • 注意:註釋放置的位置任意。

合併字段語法

  • concat函數:concat(字段名1 "分隔符", 字段名2)

    • 將字段名1和字段名2經過分隔符鏈接後輸出
    • 示例:select concat(name, "|", house_location) from houses;

具體操做





=======================================================

數據操縱語言DML

概述

  • Data Manipulation Language
  • 包括:插入INSERT,刪除DELETE,修改UPDATE

插入 INSERT

  • 法1:鍵入每一個須要插入的數值

    • 語法:INSERT INTO table_name (field1,field2,...,fieldN) VALUES (value1,value2,...,valueN);

    • 示例:insert into houses (name,house_location,purchaseing_year) values ('甲','天河',1997);

    • 注意:後面的數值要與前面的字段名一一對應好,不然就插入到錯誤的位置了。

  • 法2:從其餘表中提取數據後插入到本表中

    • 語法:INSERT INTO table_name select column1,...columnN from table_name2 WHERE XXX;

    • 示例:INSERT INTO houses2 select name,house_location,purchaseing_year from houses WHERE name = 'xx';

    • 注意:後面的部分仍然是"select-from-where"組合

刪除 DELETE

  • 方法:選取特定表中符合條件的數據並刪除

    • 語法:DELETE FROM table_name WHERE xxx;

    • 示例:delete from houses;

  • delete後,數據是否已經刪除了呢?

更新 UPDATE

  • 方法:更新指定字段的數據爲新的數據,可使用where指定限制條件

    • 語法:UPDATE table_name SET field1=new-value1,field2=new-value2 WHERE xxx;

    • 示例:update houses set name='甲1';

具體操做

  • 插入示例1:

  • 插入示例2:


  • 刪除示例:

  • 更新示例:

=======================================================

數據定義語句DDL

概述

  • Data Definition Language
  • 影響對象的定義和存儲
  • 包括:建立CREATE,修改ALTER,清除TRUNCATE,刪除DROP

建立 CREATE

  • 概述:新建數據庫;數據庫下新建表結構

    • 建庫:CREATE DATABASE 數據庫名;

    • 建表:CREATE TABLE table_name (column_name column_type);

    • 查詢庫下的表:show tables;

    • 查看錶結構:desc table_name;

修改 ALTER

  • 刪除,添加或修改表結構的字段(注:與數據操縱語言區別:修改的是結構,不是具體數值)

    • 刪除某表的指定字段:ALTER TABLE table_name DROP field_i;

    • 添加字段到某表-法1-添加到第一個:ALTER TABLE table_name ADD field_i field_type INT FIRST;

    • 添加字段到某表-法2-添加到某字段後:ALTER TABLE table_name ADD field_i field_type INT AFTER field_j;

  • 修改字段類型及名稱

    • 修改字段類型:ALTER TABLE table_name MODIFY field_name type;

    • 修改字段名稱:ALTER TABLE table_name CHANGE old_field_name new_fiele_name;

    • 同時修改字段名和字段類型:ALTER TABLE table_name CHANGE old_field_name new_fiele_name type;

  • 修改表名

    • 修改指定表名爲新的表名:ALTER TABLE table_name RENAME TO new_name;

清除 TRUNCATE

  • 概述:清除表

    • TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同,均用來刪除表中的所有行,但 TURCATE TABLE 速度更快,且使用的系統和事務日誌資源少。

    • TRUNCATE TABLE 刪除表中的全部行,但表結構及其列、約束、索引等保持不變。

    • 對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。

    • TRUNCATE TABLE 不能用於參與了索引視圖的表。

    • 若是有 ROLLBACK 語句, DELETE 操做將被撤銷(autocommit-off時),但 TRUNCATE 不會撤銷。

  • 小結:

    • TRUNCATE更快,不改變表結構,不會rollback,不能用於由 FOREIGN KEY 約束引用的表,不能用於不能用於參與了索引視圖的表。

    • delete更慢,不改變表結構,能夠回滾。

    • 注意:delete刪除須要from -- delete from table_name;, 而truncate直接加表名便可 -- truncate table_name;

刪除 DROP

  • 刪除數據庫和表

    • 刪除數據庫:drop database <數據庫名>;

    • 刪除表:drop table <表名>;

具體操做

  • 建立:同前"建庫建表"的操做,此處略。

  • 修改表字段

  • 修改字段類型及名稱

  • 修改表名

  • 刪除表


  • truncate和delete的對比



  • 刪除數據庫和表


=======================================================

數據控制語言DCL

概述

  • Data Control Language
  • DCL用來授予或回收訪問數據庫的某種特權。

受權 GRANT

  • 數據庫/數據表/數據列權限:

    • alter:修改已存在的數據表(例如增長/刪除列)和索引
    • create:創建新的數據庫或數據表
    • delete:刪除表的記錄
    • drop:刪除數據表或數據庫
    • index:創建或刪除索引
    • insert:增長表的記錄
    • select:顯示/搜索表的記錄
    • update:修改表中已存在的記錄
  • 語法

    • grant權限on數據庫對象to用戶

    • 示例1:grant select on learning.* to user@'%';

    • 示例2:grant insert on learning.* to user@'%';

    • %: 百分號表示全部的IP地址均可以使用這樣一種權限。

  • 特別的權限:

    • ALL:容許作任何事(和root同樣)

    • USAGE:只容許登陸,其餘什麼也不容許作(默認享有)

  • grant管理數據庫的權限



  • 具體操做

    • 新建用戶並賦予權限和密碼:CREATE USER john1@'%'IDENTIFIED BY '123';

      • 注:%表示用戶能夠從任意IP地址登陸,'123'表示登陸密碼。
      • 注:並非全部用戶都有權限再建用戶的
    • 首先,須要對用戶賦予權限

      • grand select,insert,update,delete on learning.* to john1@'%';
    • 查詢用戶的權限

      • show grand for john1;

回退 ROLLBACK

  • 做用:

    • 回滾命令使數據庫狀態回到上次最後提交的狀態
  • 語法:

    • ROLLBACK;

提交 COMMIT

  • 概述

    • 在數據庫的插入、刪除和修改操做時,只有當事務提交到數據庫時纔算完成。
    • 在事務提交前,只有操做數據庫的這我的纔有權看到所作的事情,別人只有在最後提交完成後才能夠看到。
  • 分類

    • 顯式提交:用commit命令直接完成的提交。

      • 格式:COMMIT;
    • 隱式提交:用SQL命令間接完成的提交。

      • 隱式提交命令包括:ALTER, AUDIT, COMMENT, CREATE, DISCONNECT, DROP, EXIT, GRANT, NOAUDIT, QUIT, REVOKE, RENAME;
    • 自動提交:autocommit爲on時,插入、刪除、修改語句執行後,系統將自動提交

      • 關閉自動提交後,操做以後須要手動commit以後,才能在其餘cmd窗口中同步修改。
      • 注:set命令自己是否自動提交?須要從新登陸。
      • 小結:前面對比delete和truncate的rollback時須要關閉自動提交,由於rollback回滾到的是最後一次commit的狀態。自動提交開啓時,刪除自動提交,所以回滾後還是刪除狀態,致使回滾失敗。

END

相關文章
相關標籤/搜索