SQL概念
SQL全稱(Structured Query Language):結構化查詢語句,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢和管理關系型數據庫。
其實就是定義了所有關系型數據庫的規則。但是每一種數據庫的sql語句操作方式存在不一樣的地方,也把這種不一樣的地方稱為該數據庫的'方言'
SQL通用語句
- SQL語句可以單行或多行書寫,以分號結尾
- 可以使用空格和縮進來增強語句的可讀性
- MySQL數據庫的SQL 語句不區分大小寫, 關鍵字建議大寫
- 注釋
- 單行注釋: -- 注釋內容 (--后要加空格) 或 # 注釋內容(mysql特有)
- 多行注釋: /* 注釋內容 */
SQL語句分類
- DDL(Data Definition Language): 數據定義語言
- 用來定義數據庫對象:數據庫,表,列等。 關鍵字:create,drop, alter等。
- DML(Data Manipulation Language): 數據操作語言
- 用來對數據庫中的表進行增刪改操作。 關鍵字:insert,delete,update等。
- DQL(Data Query Language): 數據查詢語言
- 用來查詢數據庫中表的記錄(數據)。 關鍵字:select, where等
- DCL(Data Control Language): 數據控制語言
- 用來定義數據庫的訪問控制權限和安全級別,及創建用戶。關鍵字: grant, revoke等
DDL: 操作數據庫、表
-
操作數據庫:CRUD(增刪改查)
-
C(Create): 創建
- 創建數據庫: CREATE DATABASE 數據庫名稱;
- 創建數據庫,判斷是否存在,不存在則創建:CREATE DATABASE IF NOT EXISTS 數據庫名稱;
- 創建數據庫並指定其字符集: CREATE DATABASE 數據庫名稱 CHARACTER SET 字符集;
示例:
CREATE DATABASE IF NOT EXISTS dbName CHARACTER SET gbk;
-
R(Retrieve): 查詢
- 查詢所有數據庫的名稱:
SHOW DATABASES;
示例:
- 查詢某個數據庫的創建語句:
SHOW CREATE DATABASE 數據庫名稱;
示例:
從上圖可以看出,在查詢數據庫創建語句時,也可以看到數據庫的字符集,所以通過該語句也可以看出數據庫的字符集
- 查詢所有數據庫的名稱:
-
U(Update): 修改
- 修改數據庫的字符集:
ALTER DATABASE dbName CHARACTER SET 字符集名稱;
示例:
- 修改數據庫的字符集:
-
D(Delete): 刪除
- 刪除數據庫:
DROP DATABASE 數據庫名稱;
- 判斷數據庫存在,存在則刪除:
DROP DATABASE IF EXISTS 數據庫名稱;
- 刪除數據庫:
-
使用數據庫
只有使用了數據庫,才能對數據庫里面的表等進行操作。若沒有使用某一個數據庫,而直接對其表進行操作,這樣會發生錯誤,SQL語句並不會執行。
- 查詢當前正在使用的數據庫名稱: select database();
示例:
NULL代表了當前沒有使用任何數據庫,
- 使用數據庫: USE 數據庫名稱;
- 查詢當前正在使用的數據庫名稱: select database();
-
-
操作表
- C(Create): 創建
- 語法:
CREATE TABLE tableName( 列名1 數據類型1, 列名2 數據類型2, .... 列名n 數據類型n, [添加約束...] );
- 注意:最后一行不用加逗號(,);加了就會報錯
- 數據庫中常用的數據類型:
- 整數類型: int, bigint 等
- 浮點數: float,double,decimal 浮點數可以指定精度 如decimal(11,2) 代表了該浮點數的長度為11位,小數位只保留2位
- 日期類型:
- date: 只包含年月日 yyyy-MM-dd;
- datetime: 包含年月日時分秒 yyyy-MM-dd HH:mm:ss;
- timestamp: 時間戳類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss; 如果在插入數據時,不給時間戳類型賦值,或賦值為null,則默認使用當前的系統時間,來自動賦值。並且只要對該類型所在的行進行CUD(增刪改)操作,這個類型的字段會自動更新成當前系統時間
- 字符串類型: varchar 如: password varchar(16) 指定該字段的最大字符
- 創建表示例:
CREATE TABLE student( stu_id INT(32), stu_name VARCHAR(20), stu_age INT, stu_score DECIMAL(4,1), stu_birthday DATE, insert_time TIMESTAMP );
- 復制表: CREATE TABLE 表名 like 被復制的表名;
- R(Retrieve): 查詢
- 查詢某個數據庫中所有表名稱:
SHOW TABLES;
- 查詢表的結構:
DESC 表名;
- 查詢某個數據庫中所有表名稱:
- U(Update): 修改
- 修改表名:
ALTER TABLE 表名 RENAME TO 新表名;
- 修改表的字符集:
ALTER TABLE 表名 CHARACTER SET 字符集名稱;
- 添加一列:
ALTER TABLE 表名 ADD 列名 數據類型
- 修改列名 類型:
ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
只修改數據類型
ALTER TALBE 表名 MODIFY 列名 新數據類型;
- 刪除列:
ALTER TABLE 表名 DROP 列名;
- 修改表名:
- D(Delete):刪除
DROP TABLE 表名;
或者DROP TABLE IF EXISTS 表名;
- C(Create): 創建