MySQL的sql語句分類彙總
阿新 • • 發佈:2018-11-23
第一類語句:與資料庫相關的語句
1.建立資料庫
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name 說明: IF NOT EXISTS:判斷當前系統中是否有要建立的這個資料庫,如果有的話,不再執行建立,而且不會報錯 CHARACTER SET:指定當前資料庫所採用字元型別(utf8) COLLATE:指定排序規則 例子: CREATE DATABASE IF NOT EXISTS jobs DEFAULT CHARACTER SET utf8
2.刪除資料庫
DROP DATABASE [IF EXISTS] db_name
IF EXISTS:判斷當前系統中是否有要刪除的這個資料庫,如果有執行刪除操作,如果沒有不再執行刪除操作,而且不會報錯
例子:DROP DATABASE IF EXISTS test;
3.修改資料庫
這裡往往僅僅是修改資料庫中的字符集型別和排序規則(不能修改修改資料庫名)
ALTER DATABASE [db_name] alter_specification ... alter_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name 例子:修改test1的字符集為utf8 ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;
修改資料庫名稱:
先對要修改名稱的資料庫做備份,然後新建一個數據庫,庫名就是新的名字,然後將備份的資料還原到這個新庫中
4.更新資料字典
ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME
第二類語句:與表相關的語句
1.新建表
方法一:直接建立一張新表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] TEMPORARY:該選項表示所建立的是一張臨時表,表是在記憶體中 create_definition: col_name column_definition | PRIMARY KEY (col_name1, col_name1...) | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ... | [CONSTRAINT UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ... | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ... | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition | CHECK (expr) table_option: AUTO_INCREMENT [=] value <<< 指定主鍵從幾開始自增 | ENGINE [=] engine_name <<< 指定表所使用的儲存引擎 | [DEFAULT] CHARACTER SET [=] charset_name <<< 指定當前表的字符集(不指定會繼承) | CHECKSUM [=] {0 | 1} <<< 指定是否對插入的資料做校驗(可以保證資料一致,但是會帶來額外的系統開銷) | [DEFAULT] COLLATE [=] collation_name <<< 指定當前表的排序規則(不指定會繼承) | COMMENT [=] 'string' <<< 指定當前表的描述說明資訊 | DELAY_KEY_WRITE [=] {0 | 1} <<< 延遲鍵寫入,推遲重建索引的間隔 | MAX_ROWS [=] value | MIN_ROWS [=] value | UNION [=] (tbl_name[,tbl_name]...) <<< 做表聯合 | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] <<< 定義表空間 | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} <<< 定義表格式 例子:建立一張表,id為主鍵、name長度為30,age為整型 CREATE TABLE tb1 (id int PRIMARY KEY, name char(30), age int(3)) CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id)) 例子:建立一張表,id和name構成聯合主鍵、name長度為30,age為整型 CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id,name))
方法二:根據現有表建立新表,而且新表中的資料也是來自於現有表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
[IGNORE | REPLACE]
[AS] query_expression
例子: CREATE TABLE new_tb AS SELECT * FROM old_tb;
注意:這種操作在系統看來是不安全的,如果要使用這種方法建立表需要修改配置檔案將
gtid-mode = on改為off
enforce-gtid-consistency= 1改為0
方法三:根據現有表建立新表,但是僅僅有表結構
CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name
例子:基於mysql.user表的表結構建立新表
CREATE TABLE tb01 LIKE mysql.user;
2.刪除表
刪除表簡單實用DROP命令即可,但要注意做好指定。
DROP TABLE [IF EXISTS] tbl_name [, tbl_name]... [CASCADE]
說明:
CASCADE:級聯刪除
3.修改表結構(欄位、屬性、限制、約束、索引、鍵…)
格式:
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
①修改欄位的定義
- 刪除欄位
DROP col_name
例子:刪除age欄位
ALTER TABLE tb1 DROP age;
- 新增欄位
ADD col_name column_definition [FIRST | AFTER col_name]
例子:
# 在age欄位後新增一個新的欄位school
ALTER TABLE tb1 ADD school CHAR(10) AFTER age;
# 在最前面插入欄位job
ALTER TABLE tb1 ADD job CHAR(20) NOT NULL FIRST;
# 在末尾新增一個新欄位phone
ALTER TABLE tb1 ADD phone int(10);
- 修改欄位名稱
CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]
例子: ALTER TABLE tb1 CHANGE job jobs char(30) not null;
- 修改欄位的約束和屬性,調整欄位位置
MODIFY col_name column_definition [FIRST | AFTER col_name]
例子:ALTER TABLE tb1 MODIFY name varchar(50) NOT NULL DEFAULT 'zx';
注意無法修改欄位名稱
ALTER TABLE tb1 MODIFY name varchar(50) AFTER age;
- 新增刪除索引
ADD index [索引型別] (欄位1,欄位2...) [options]
例子:將索引新增(刪除)到 name欄位上
ALTER TABLE tb1 ADD(DROP) INDEX (name);
查看錶中的索引
SHOW INDEXES FROM tb1;
注意:索引不是越多越好
①修改欄位約束
#主鍵約束
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,...) [index_option] ...
#唯一約束
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name]
[index_type] (index_col_name,...) [index_option] ...
#唯一約束要建立在索引上,也就是對某欄位設定唯一約束時,該欄位要是索引。
關於主鍵(刪除、禁用、啟用)
DROP PRIMARY KEY #刪除主鍵
{DISABLE|ENABLE} KEYS #禁用和啟用主鍵
4.修改表名
#方法1:
ALTER TABLE 表名 RENAME [TO|AS] 新表名
ALTER TABLE user10 RENAME TO user11;
方法2:
RENAME TABLE 表名 TO 新表名; 這裡面的TO不可以省略
RENAME TABLE user11 TO user10;
5.指定表中的內容按照哪個欄位進行排序
注意:如果表中有索引或者主鍵,那麼無法按照指定的欄位排序
ORDER BY col_name [, col_name] ...
6.修改表所使用的字符集型別
CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
7.向表中插入資料
INSERT INTO tb1(name,id,age) VALUES('dong',1,23);
修改表中的資料
將name為zx的年齡修改為25
UPDATE tb01 set age=25 WHERE name='zx';
第三類語句:簡單的查詢語句
簡單查詢格式
SELECT 欄位名... FROM 表名 [條件] [選項]
例子:查詢t09中的全部資料
> SELECT * FROM t09;
例子:查詢t09中的id
> SELECT id FROM t09;
例子:檢視所有id大於5的記錄
> SELECT * FROM t09 WHERE id>5
例子:檢視所有id大於5的記錄的中的name欄位
> SELECT name FROM t09 WHERE id>5
條件查詢、組合條件查詢
條件表達方式 | 釋義 |
---|---|
=、<、>、>= 、<= | 等於、小於、大於、大於等於、小於等於 |
!=、<> | 不等於 |
is null | 為空 |
is not null | 不為空 |
between…and… | 在…和…之間 |
like … | 結合萬用字元 |
RLIKE | 結合正則 |
組合條件查詢關鍵字:and、or、not
排序、限制輸出記錄的條數
order by 欄位 [desc|asc] 根據指定欄位進行降序或升序排列
limit num:僅僅顯示num條記錄
limit m,n:意思是跳過m個記錄向後取n條資料
示例
案例:將年齡在20-25的使用者名稱和使用者id顯示出來
mysql> select name,stuid,age from students where age>=20 and age<=25;
mysql> select name,stuid,age from students where age between 20 and 25;
案例:將年齡在小於20,或者大於25的使用者名稱和使用者id顯示出來
select stuid,name,age from students where age<20 or age>25;
案例:顯示使用者名稱是以S為開頭的使用者名稱和年齡
mysql> select name,age from students where name like 'S%';
案例:顯示使用者名稱是以Y為開頭,且年齡是19的使用者
mysql> select name,age from students where name like 'Y%' and age=19;
案例:顯示使用者名稱是以Y為開頭,且年齡小於20的使用者
mysql> select name,age from students where name like 'Y%' and age<20;
案例:顯示所有使用者的使用者名稱和年齡
mysql> select name,age from students;
案例:顯示所有使用者的使用者名稱和年齡,要求按照年齡排序(從大到小排)
mysql> select name,age from students order by age desc;
案例:顯示所有使用者的使用者名稱和年齡,要求僅僅顯示年齡最大的三個使用者
mysql> select name,age from students order by age desc limit 3;
案例:統計students表有多少行
mysql> select count(*) from students;
案例:顯示年齡最大的使用者的年齡
mysql> select max(age) from students;
大致彙總,如有不當之處歡迎指正。
------做運維之前很矯情的小年輕-----