详解数据库引擎与SQL语句增删改查(非常详细,带例)
數據庫系統(DBMS): 專門負責數據管理的工具。增加數據、創建索引、建立索引之間的關聯關系、更新索引。。。。。。
連接器:PHP要訪問MySQL,可以通過API訪問,也可以通過PHP的驅動,而那個驅動就是連接器。
數據的組織結構
? 層次型 :有上下級關系
? 網狀型 :
? 關系型 :
關系型數據庫管理系統(RDBMS) :以表的方式來展示,并且能幫我們去維護這些表和表之間關系的這么一個軟件!
???????????????????????????? 負責將數據從文件中抽取出來,并展示為表的格式
???????????????????????????? 管理數據本身完整性
DBA視圖:既能看到用戶視圖,又能看到物理視圖。還能看到中間的處理過程
?
SQL基本組件
1、用戶或者前端驅動。。。會發出SQL命令
2、SQL命令送給我們的DBMS以后,DBMS必須要接受下來,并且做處理
3、提供一個分析器,做詞法分析,語法分析。。。。
4、分析的結果要生成執行計劃----計劃執行器(我們到底有多少種路徑可以完成相應任務)
5、對每一條計劃進行篩選,選出代價最小,性能最好的---優化器(先不執行,選擇一條最優的執行方式)
6、這一切分析結束以后,語句執行要操作數據,文件的存取
7、文件讀進來之后先緩存在內存中,---緩存器(先把數據讀取到緩存器里面才能進行操作的)
8、緩存器中所提供的任何內容最終還要回存到硬盤中去---磁盤空間管理器(實現對磁盤空間中的某個數據文件中的數據到底該怎么存儲進行管理)
9、故障恢復管理器---服務器崩潰,再次啟動之后,把存儲數據,正在存儲數據恢復為正常狀態
10、事務管理器
11、鎖管理器
?
?
mysql簡單應用
特性:mysql名:mysql安裝到Windows上不需要命令大小寫,安裝在Linux上區分大小寫
mysql基于tcp連接的
若服務器端和客戶端在同一臺主機上時;服務器端與客戶端連接方式為:
???? Linux:socket (這種連接實現的是本機進程與進程之間的通信,不需要網絡驅動來連接,速度非常快!)
? windows:memory (共享內存)
socket:套接字文件,這個文件在/var/lib/mysql/mysql.sock
命令(選項和參數之間可以不用加空格)
mysql?
?????? -u :指定用戶,指名以哪個用戶的身份去連接(后面不跟用戶名,默認為root)
?????? -p :給這個用戶提供密碼(后面沒有密碼,默認為空密碼)
?????? -h :指定主機,你的服務器是誰?(后面沒跟服務器地址,默認為localhost)
例:mysql? -uroot? -p? -h? 127.0.0.1 (第一次登陸)
?
MySQL數據庫管理
???? 數據庫對象:
???? 庫、表、索引、視圖、約束、存儲過程、、存儲函數、觸發器(主動數據庫)、游標、用戶、權限、事務
???? 關系型數據庫最核心的組件就是表(行(row)、列(field/column)組成)
???? 一個表稱為實體
???? 字段名稱:定義一個字段時,這個字段中存儲的是數據還是數值做一下說明(數據類型)。
數據類型:
字符(字符型默認情況下不區分大小寫):
?? CHAR(字符長度)? --->你最多存儲多少個字符,最多存儲256個字符
?? VARCHAR(字符長度)???? --->你最多存儲多少個字符,最多存儲65536個字符 (兩個字節)(可變化空間)
?? BINARY(字符長度)??????? --->以二進制格式進行存儲(區分大小寫的字符)(固定空間)
?? VARCHAR(字符長度)?????? --->以二進制格式進行存儲(區分大小寫的字符)(可變化空間)
?? TEXT(文本長度)????? --->文本大對象,(不區分大小寫)
?? BLOB(文本長度)????? --->二進制格式的文本大對象(區分大小寫)
??
數值:
??? 精確數值(整型),有6種變化,分別使用不同長度的字節來存儲整數
???????? TINYINT?? --->小整形,范圍:一個字節,最多表示范圍-128到127,或者0-255
???????? SMALLINT??? --->微整形,范圍:兩個字節,最多表示范圍-128到127,或者0-255
???????? MEDIUMINT?? ??--->中等整形,范圍:三個字節
???????? INT???????????? --->范圍:四個字節
???????? BIGINT????? --->大整形,范圍:八個字節
???????? DECIMAL??? --->十進制
???????? 修飾符:UNSIGNED,無符號,
???????????????? NOT NULL ,不允許為空
??? 近似數值(浮點型)
??????? FLOAT
??????? DOUBLE
日期時間:
DATE?? --->日期
TIME?? --->時間
DETETIME?? --->日期時間
STAMP?? --->時間戳
布爾(邏輯):
?
?
內置(枚舉):
??
?
表頭(header):每一列的名稱
列(row):具有相同數據類型的數據的集合
行(col):每一行用來描述某個人/物的具體信息
值(value):行的集體信息
鍵(key):表中用來識別某個特定的人/物的方法,鍵的值在當前列中具有唯一性
?
?
數據庫命令分類及其常用命令(命令不區分大小寫)
姓名(name)? 年齡(age) 學號(id) 性別(sex) 電話(tel)
?
DDL:數據定義語言
create:創建數據庫、表
????? create? database;? 數據庫名稱; --->創建數據庫
????? create? database? if? not? exists ??數據庫名稱;?? --->如果數據庫不存在我們就創建
????? create? table? 指定庫. 表名? (屬性1,屬性2,...);???? --->創建表
?????
alter :修改數據庫、表
????????? alter? table?? 表名
???????????????????????? modify :修改某個字段(改字段屬性)
???????????????????????? change :改變某個字段(不改屬性,改內容)
????????????????????????? add? :添加一個字段
????????????????????????? drop :刪除一個字段
drop :刪除數據庫、表
?????? drop? table?? 表名??? --->刪除表
?????? drop? table? ?if?? exists? 表名??? --->表存在才刪除表
?????? drop? database?? 數據庫名;? --->刪除數據庫
DML:數據操作語言(表)
insert:插入
????? insert? into? 表名 (字段名稱1,字段名稱2...)value("字符串",數值);? --->數值不用加引號,不加字段名稱代表每個字段都寫
replace:替換
????? replace? into
update:修改
????? update?? 表名????? set?? 字段='替換內容'? where? name='名字'
delete:刪除
?????? delete??? from?? 表名?? where? 符合條件的行
DCL:數據控制語言
grant:給用戶授權????????????????????????????????????????????????????????????????????????????????????? 也可以修改密碼
?????? grant?? 權限1,權限2,...?? on? 庫名.表名? to? '用戶名'@'主機名'? identified? by? '密碼';--->給用戶授權,用戶不存在自動創建用戶
revoke:取回權限
???????? revoke??? 權限1,權限2...? on? 庫名.表名? from? '用戶名'@'主機名;
select?? 查詢
select格式:? select?? 指定字段?? from?? 表名?? 條件?
create? user :創建用戶?? 格式:?? create? user? '用戶名'@'主機名'? identified? by '密碼';
drop??? user :刪除用戶? 格式:? drop?? user?? '用戶名'@'主機名';
?
select * from 表名; ???--->查看表中的內容
show databases;? ??--->查看庫
show? tables? from? 指定庫;--->查看庫中的表
desc 表名;?? --->查看表中的結構
show? grants? for? '用戶名'@'主機名'; ??--->查看用戶的授權
select? user();?? --->當前登錄的用戶
use?? 數據庫名;? --->設置默認數據庫
where?? 指定搜索條件;?? --->做邏輯比較
flush? privileges; ????--->刷新授權表
set? password? for?? '用戶名'@'主機名'? =password('密碼');?--->為用戶創建密碼
選擇和投影
?????? 選擇:指定以某字段作為搜索碼,做邏輯比較 ,篩選符合條件的行
?????? 投影:選擇列為搜索碼
?
?
?
數據庫命令使用格式詳解
創建表及修改字段
create??table? xueyuan?? (name? char(20) not null,??? age ????tinyint? unsigned,??? gender? char(1)? not null);
添加表??????? 表名?????? 姓名?? 屬性?? 不能為空, 年齡??? 屬性? 不能為負數,? 性別??? 屬性? 不能為空
alter? ????table? xueyuan? add ????kecheng? varchar(100);
一個字段???? 表名???? 添加?? 字段名?? 屬性
alter? table? xueyuan? change? kecheng? Kecheng? ?????varchar(100) ??after? name;
一個字段???? 表名???? 修改??? 字段名? 修改后字段名???? 屬性????? 放在字段name下面
給表插入數據
insert? into? xueyuan? (name,gender)? value ??('linghuchong',?? 'm')?,?? ('xiaolongnv','f');
? 插入?????? 表名???? 字段,字段?? 關鍵字?? (name字段,gender字段),(name字段,gender字段);
insert? into? xueyuan? value ??('xiao'????? ,?'hama'??? ,??? 57?,????? 'm');
?插入??????? 表名??? 關鍵字?? name字段, course字段,age字段,性別字段
給表修改數據
update??xueyuan ????set ???Kecheng='shuxue' ???where? name?=?'xiao'
修改屬性?? 表名??? 關鍵字?? 字段? 修改的內容?? 條件?? 字段? 修改哪一行
?
在表中篩選數據
select ??name,Kecheng??from?? xueyuan? where? Kecheng='shuxue';
查詢???? 字段? 字段??? 關鍵字? 表名???? 選擇??? Kecheng字段中有shuxue 的行
在表中刪除數據
delete? from? ?????xueyuan? where? Kecheng='xiaoniu';
刪除???? 關鍵字??? 表名???? 條件?? 在Kecheng字段中有xiaoniu的行
創建、刪除用戶
create? user? 'sun'?@?'%'? ????????identified? by? 'sun';
?創建?? 用戶? 用戶名? 所有主機???? identified? by:會將純文本密碼加密作為散列值存儲
?
?
?
?
?
?
?
?
mysql?
?????? -u :指定用戶,指名以哪個用戶的身份去連接(后面不跟用戶名,默認為root)
?????? -p :給這個用戶提供密碼(后面沒有密碼,默認為空密碼)
?????? -h :指定主機,你的服務器是誰?(后面沒跟服務器地址,默認為localhost)
?--protocol :{tcp|socket|pipe|memory}? 指定使用的協議
??? --port :指定端口
? -D 庫名 :在登錄以后,直接把某個數據庫設為默認數據庫
show? databases? :顯示有幾個數據庫
數據類型:
字符(字符型默認情況下不區分大小寫):
?? CHAR(字符長度)? --->你最多存儲多少個字符,最多存儲256個字符
?? VARCHAR(字符長度)???? --->你最多存儲多少個字符,最多存儲65536個字符 (兩個字節)(可變化空間)
?? BINARY(字符長度)??????? --->以二進制格式進行存儲(區分大小寫的字符)(固定空間)
?? VARCHAR(字符長度)?????? --->以二進制格式進行存儲(區分大小寫的字符)(可變化空間)
?? TEXT(文本長度)????? --->文本大對象,(不區分大小寫)
?? BLOB(文本長度)????? --->二進制格式的文本大對象(區分大小寫)
?? auto_increment??? --->自動增長
數值:
??? 精確數值(整型),有6種變化,分別使用不同長度的字節來存儲整數
???????? TINYINT?? --->小整形,范圍:一個字節,最多表示范圍-128到127,或者0-255
???????? SMALLINT??? --->微整形,范圍:兩個字節,最多表示范圍-128到127,或者0-255
???????? MEDIUMINT?? ??--->中等整形,范圍:三個字節
???????? INT???????????? --->范圍:四個字節
???????? BIGINT????? --->大整形,范圍:八個字節
???????? DECIMAL??? --->十進制
???????? 修飾符:UNSIGNED,無符號,
???????????????? NOT NULL ,不允許為空
??? 近似數值(浮點型)
??????? FLOAT
??????? DOUBLE
?
DDL:數據定義語言
create:創建數據庫、表
????? create? database;? 數據庫名稱; --->創建數據庫
????? create? database? if? not? exists ??數據庫名稱;?? --->如果數據庫不存在我們就創建
????? create? table? 指定庫. 表名? (屬性1,屬性2,...);???? --->創建表
?????
alter :修改數據庫、表
????????? alter? table?? 表名
???????????????????????? modify :修改某個字段(改字段屬性)
???????????????????????? change :改變某個字段(不改屬性,改內容,改名)
????????????????????????? add? :添加一個字段
????????????????????????? drop :刪除一個字段
drop :刪除數據庫、表
?????? drop? table?? 表名??? --->刪除表
?????? drop? table? ?if?? exists? 表名??? --->表存在才刪除表
?????? drop? database?? 數據庫名;? --->刪除數據庫
DML:數據操作語言(表)
insert:插入
????? insert? into? 表名 (字段名稱1,字段名稱2...)value("字符串",數值);? --->數值不用加引號,不加字段名稱代表每個字段都寫
replace:替換
????? replace? into
update:修改
????? update?? 表名????? set?? 字段='替換內容'? where? name='名字'
delete:刪除
?????? delete??? from?? 表名?? where? 符合條件的行
DCL:數據控制語言
grant:給用戶授權????????????????????????????????????????????????????????????????????????????????????? 也可以修改密碼
?????? grant?? 權限1,權限2,...?? on? 庫名.表名? to? '用戶名'@'主機名'? identified? by? '密碼';--->給用戶授權,用戶不存在自動創建用戶
revoke:取回權限
???????? revoke??? 權限1,權限2...? on? 庫名.表名? from? '用戶名'@'主機名;
創建與刪除索引
創建索引: create ??index ?索引名稱? ??on? 表名 ?(字段) ;
刪除索引:drop? index? 索引名 ??on? 表名;
select?? 查詢
select格式:? select?? 指定字段?? from?? 表名?? 條件?
create? user :創建用戶?? 格式:?? create? user? '用戶名'@'主機名'? identified? by '密碼';
drop??? user :刪除用戶? 格式:? drop?? user?? '用戶名'@'主機名';
truncate ?表名;?--->清空表,并且重置計數器(類似于ID..)
show table status like '表名'\g ;? --->查看一個表的屬性信息
show? engines; ??--->可以顯示當前數據庫 所支持的所有存儲引擎
select * from 表名; ???--->查看表中的內容
show databases;? ??--->查看庫
show? tables? from? 指定庫;--->查看庫中的表
desc 表名;?? --->查看表中的結構
show? grants? for? '用戶名'@'主機名'; ??--->查看用戶的授權
select? user();?? --->當前登錄的用戶
use?? 數據庫名;? --->設置默認數據庫
select database();? --->查看當前默認的數據庫
where?? 指定搜索條件;?? --->做邏輯比較
flush? privileges; ????--->刷新授權表
select? USER,Host,Password FROM user;?--->查看用戶列表
set? password? for?? '用戶名'@'主機名'? =password('密碼');?--->為用戶創建密碼
show? variables? like? "%變量名%"?--->查看變量
show? indexes?? from ?表名 ;??? --->查看指定表的索引
show? master? status; --->查看當前正在使用的二進制日志文件
show? binary? logs;? 查看當前mysql上所可以使用的二進制文件的列表
show? binlog? events? in "file" ; 查看某一個二進制日志文件中的相關內容
?
選擇和投影
?????? 選擇:指定以某字段作為搜索碼,做邏輯比較 ,篩選符合條件的行
?????? 投影:選擇列為搜索碼
?
?
?
?
數據庫命令使用格式詳解
創建表及修改字段
create??table? xueyuan?? (name? char(20) not null,??? age ????tinyint? unsigned,??? gender? char(1)? not null);
添加表??????? 表名?????? 姓名?? 屬性?? 不能為空, 年齡??? 屬性? 不能為負數,? 性別??? 屬性? 不能為空
alter? ????table? xueyuan? add ????kecheng? varchar(100);
一個字段???? 表名???? 添加?? 字段名?? 屬性
alter? table? xueyuan? change? kecheng? Kecheng? ?????varchar(100) ??after? name;
一個字段???? 表名???? 修改??? 字段名? 修改后字段名???? 屬性????? 放在字段name下面
給表插入數據
insert? into? xueyuan? (name,gender)? value ??('linghuchong',?? 'm')?,?? ('xiaolongnv','f');
? 插入?????? 表名???? 字段,字段?? 關鍵字?? (name字段,gender字段),(name字段,gender字段);
insert? into? xueyuan? value ??('xiao'????? ,?'hama'??? ,??? 57?,????? 'm');
?插入??????? 表名??? 關鍵字?? name字段, course字段,age字段,性別字段
給表修改數據
update??xueyuan ????set ???Kecheng='shuxue' ???where? name?=?'xiao'
修改屬性?? 表名??? 關鍵字?? 字段? 修改的內容?? 條件?? 字段? 修改哪一行
?
在表中篩選數據
select ??name,Kecheng??from?? xueyuan? where? Kecheng='shuxue';
查詢???? 字段? 字段??? 關鍵字? 表名???? 選擇??? Kecheng字段中有shuxue 的行
在表中刪除數據
delete? from? ?????xueyuan? where? Kecheng='xiaoniu';
刪除???? 關鍵字??? 表名???? 條件?? 在Kecheng字段中有xiaoniu的行
創建、刪除用戶
create? user? 'sun'?@?'%'? ????????identified? by? 'sun';
?創建?? 用戶? 用戶名? 所有主機???? identified? by:會將純文本密碼加密作為散列值存儲
?
客戶端交互式命令
?? 批處理模型/腳本模式?? (\?)
?????? source? (\.)? :去載入你文件系統上的某一個腳本
???????? clear? (\c) :語句結束符
?????? connect? (\r) :重新連接服務器
??????????? go? (\g):無論語句結束符是什么,直接將此語句送至服務器
????????? ego?? (\G):無論語句結束符是什么,直接將此語句送至服務器,而且結果以豎排方式顯示。
?????????? quit? (\q) :退出
????????? system (\! ) :執行shell命令
??????????????? ?\#? :對于新建的對象,支持補全功能
???????????????? -A? :禁用命令補全
??? 在外部使用輸入重定向的方式定義
????? mysql? -r? -u? -h? < sun.sql
???
服務器端命令(mysqladmin)
? 可以通過客戶端執行服務器端命令的
mysqladmin? [-u|-p|-h]??? 子命令? 選項??
?
? mysqladmin?? -uroot? -p??? password??? '密碼'? --->修改密碼
?mysqladmin?? -uroot?? -p? -hlocalhost? create? 庫名?? --->添加庫
?mysqladmin?? -uroot?? -p? -hlocalhost? drop?? 庫名?? --->刪除庫
?mysqladmin?? -uroot?? -p? -hlocalhost?? ping??? --->測試數據庫服務器是否在線
?mysqladmin?? -uroot?? -p? -hlocalhost?? processlist?? --->顯示正在執行的線程列表
?mysqladmin?? -uroot?? -p? -hlocalhost?? status?? --->顯示服務器當前狀態:啟動時間、運行的線程數、已經完成的查詢數、man查詢次數、??????????????????
????????????????????????????????????????????????????? 打開的表數、刷新的表數(flush)、打開的文件數、平均下來每秒鐘的查詢數
?mysqladmin?? -uroot?? -p? -hlocalhost?? status --sleep 2 --->每兩秒鐘顯示一次服務器狀態
?mysqladmin?? -uroot?? -p? -hlocalhost?? status --sleep 2 --count 2?--->每兩秒鐘顯示一次,一共顯示兩次
?mysqladmin?? -uroot?? -p? -hlocalhost?? extended-status?? --->顯示狀態變量及其值(統計數據)
??mysqladmin?? -uroot?? -p? -hlocalhost?? variables?? --->顯示服務器變量(定義工作屬性)
??? 省略???????? flush-privileges??? --->讓mysql重讀授權表(等同于reload)
??? 省略???????? flush-tables????? --->關閉所有已經打開的表
??? 省略???????? flush-status? --->重置大多數服務器狀態變量(讓統計數據清零)
??? 省略???????? flush-tables? --->關閉所有已打開的表
??? 省略???????? flush-threads? --->重置線程緩存(銷毀空閑線程)
??? 省略???????? flush-logs? --->做二進制和中繼日志滾動
??? 省略???????? flush-hosts? --->清除主機內部信息(由于太多的連接錯誤,而導致的用戶拒接登錄)
????????????????? kill? --->殺死進程
??? 省略???????? refresh? --->等同于執行flush-logs和flush-hosts
??? 省略???????? shutdown? --->關閉mysql 服務器
??? 省略???????? version?? --->顯示musql版本信息和狀態信息
??? 省略???????? start-slave?? --->啟動復制,啟動從服務器的復制線程
???????????????????????? SQL thread? --->啟動的線程名字
???????????????????????? IO thread??? --->啟動的線程名字
??? 省略???????? stop-slave?? --->關閉復制功能
?
show? engines;?? --->可以顯示當前數據庫 所支持的所有存儲引擎
?? 名稱???????????? 是否支持?? 簡要描述???????????????????????????????????????????????????? 是否支持事務?? 是否支持分布式事務?? 是否支持保存點
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine???????????? | Support | Comment??????????????????????????????????????????????????????? | Transactions | XA? ???????????????| Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB???????????? | DEFAULT | Supports transactions, row-level locking, and foreign keys??? ??????????????| YES????? | YES ????????????????| YES???? ????|
?????????????????????? (默認)
show table status like '表名' \G --->查看一個表的屬性信息
創建表:
1、直接定義一張空表
?? create?? table?? [if not extsts]? 表名 (表屬性) ,(表選項:字段名稱,字段屬性,約束/索引)
2、從其他表中查詢出數據并以之創建新表
3、以其他表為模板,創建一個新表
? 設置主鍵方法:
?? create table sun1 (id int not? null auto_increment primary key ,name char(20)not null ,age tinyint? not null );
?? create table sun2 (id int not? null auto_increment ,name char(20)not null ,age tinyint? not null,primary key(id,name));? :id和name聯合起來成為主鍵?
? 設置唯一鍵(名稱字段中不允許出現重復)
???? create table sun2 (id int not? null auto_increment ,name char(20)not null ,age tinyint? not null,primary key(id,name)? ,unique key (name));? :name這個字段中的數據不允許出現重復
???? create table sun2 (id int not? null auto_increment ,name char(20)not null ,age tinyint? not null,primary key(id,name)? ,unique key (name), index(age)); :設置age 為索引
?設置表的存儲引擎
???? create? table? 表名? (一系列屬性 )engine = 存儲引擎名
?設置最多存儲多少行
???? create? table? 表名? (一系列屬性 ) max-rows=多少行
當使用AUTOINCREMENT列創建序列時,在INSERT語句中不使用字段名將導致MySQL自動產生序列的下一個序號。這個序號作為表的主鍵。
???? insert into?? kk? ???(ke)? values ??('huama'),('pixie'),('kuihua');
??????? 關鍵字?? 表??? 字段? 關鍵字??? 添加內容
?
? 增加主鍵
???? insert into?? kk? ???(ke)? values ??('huama'),('pixie'),('kuihua');
??????? 關鍵字?? 表??? 字段? 關鍵字??? 添加內容
2、從其他表中查詢出數據并以之創建新表
仿照一張表創建一張新表(有數據)
create? table? xinwen? select? *? from? kk? ???where? name >= 2;
??? 創建表???? 表名????? 查看 舊表?? 表名??? 關鍵字? 條件
3、以其他表為模板,創建一個新表
仿照一張表創建一張新表(空表)
create? table? 新建表名? like? 仿照表明;
給表中一個字段添加一個唯一鍵(前提是表中沒有重復的數據)
alter? table ?表名? add? unique? key ??(字段名);
或者:rename? table? 舊名字 to ?新名字;
刪除一個表中的字段
alter? table 表名? drop ?字段;
alter? table?
???? 添加、修改、刪除字段??? 修改表屬性
???? 添加、刪除、修改索引??? 改表名
給表中一個字段添加一個唯一鍵(前提是表中沒有重復的數據)
alter? table ?表名? add? unique? key ??(字段名);
給庫中的表改名字
alter? table? 舊名字 ?rename? to ?新名字;
或者:rename? table? 舊名字 to ?新名字;
給表中的字段改名字
alter table表名 change ??舊字段??新字段?新字段屬性;
直接修改表引擎
alter?? table?? 表名?? engine=存儲引擎名(MyISAM|lnnoDB)
多表查詢(將兩張表聯合起來查詢相同的結果):
?
select? name?? ,??? keming ??from? xuehao,kehao? where? xuehao.cid=kehao.cid;
查詢??? 表A字段 表B字段???????? 表名?? 表名? 條件??? 兩張表的cid相同的數據
?
注意:外鍵約束只能夠用在支持事務的存儲引擎上!
?
?
?
單表查詢
在一個表中,某個字段中相同的數值只顯示一次!
select? distinct? 字段名?? from? 表名;
?
from子句 :表,多個表,其他查詢語句(select)
where子句:布爾關系表達式,操作符(<,>,>=,<=,=)
?
組合條件查詢
符號:?? %:任意長度任意字符
???????? _:任意單個字符
?rlike/regexp:使用正則表達式
???????? in :離散取值
order? by? 字段 (asc升序/desc降序):給查詢出來的數據排序,(默認為升序)
and :和
or :或
not :非
between。。。and。。。:。。。與。。。。之間
?
select?? cid? from? xuehao? where? ????not ??cid >2;
????????????????????????? 關鍵字????? 非??? 條件
select?? cid? from? xuehao? where ????not ???cid >2 ?????and???id=1;
????????????????????????? 關鍵字???? 非??? 條件?????? 和??? 條件
select?? cid? from? xuehao? where? ??cid >2? ??or ???id=1;
????????????????????????? 關鍵字??? 條件?? 或者?? 條件
select?? cid? from? xuehao? where???? not ??cid > 2 ??and?? not?? ?id =1;
????????????????????????? 關鍵字???? 非??? 條件??? 和??? 非??? 條件
select?? cid? from? xuehao? where ????not??(cid > 2? or? id =1);
????????????????????????? 關鍵字???? 非???? 條件1或條件2
select?? cid? from? xuehao? where ????cid? ??between? 2? and? 6;
????????????????????????? 關鍵字???? cid在2與6之間(between:。。。與。。。之間)
select keming from?? ?kehao? where? ??keming ??like??????? ??'y%'
??????????????????????????? 關鍵字? 字段名?? 關鍵字 ???以y開頭的字符
select keming from?? ?kehao? where? ???keming ??like??????? ?'k_ _ _';
??????????????????????????????????????????????????????? ?以K開頭后面有3個字符
select keming from?? ?kehao?? where ???keming??? like ????????'%k%';
???????????????????????????????????????????????????????? 字符中包含了k的字符串
select keming from?? ?kehao?? where? ???keming?? rlike??????????? '^[ky].*$' ;
????????????????????????????????????????? ?使用正則表達式???? 開頭是k或y
select?? cid?? from??? kehao? where? ????cid?????? in??????? ?(1,2,5);
??????????????????????????????????? 篩選出一個表中id的值為1,2,5
select ???* ???from ???xuehao ????order?? by??cid
????????????????????????????????? 排序?? 根據cid
別名:select??a.Name?,?b.Cname ?????from ??students? as? a,courses? as? b??where? a.CID1=b.CID;
???????? 字段別名為a?? 字段別名為b?????????? 表別名為a????? 表別名是b?? 條件?? 表a的CID1=表b的CID
多表查詢
連接方式
? ?交叉連接:笛卡爾乘積
? ?自然連接:將兩張表上相同字段當中的的那個值逐一作比較,只將等值關系將它保留下來
????外連接:
?????????? 左外連接:左表? left? join? 右表? on? 條件
?????????? 右外連接:左表? right? join 右表? on? 條件
select s.Name,c.Cname? from? students?? as? ??s? lef t join? courses? as ????c? on ????s.CID1=c.CID;
???????????????????????????? 左表? 別名?? s? ?左外連接 右表? 別名??? c? 連接條件?
select s.Name,c.Cname? from? students ??as ???s ??right join ?courses? as? c? on ?s.CID1=c.CID;
???????????????????????????? 左表? 別名?? s?? 右外連接?? 右表? 別名 c 連接條件
?? ??子連接:
????????? 比較操作中使用子查詢,子查詢只能返回單個值
????????? in ():使用子查詢
聯合查詢
union
??
(select Name,Age from? students) union? (select Tname,Age from? tutors);
?
insert? into?
insert? into? 表名? (字段,字段)? value ?('字符串',數字),('字符串',數字);
insert? into? 表名? set ?字段=數值(字符串加引號),字段=數值,字段=數值;
select? *? from ?kebiao? order? by??? id? ???desc ???limit? 1;
???????????????? 表名?? 排序????? ?字段?? 倒敘?? 只顯示1個
當我們在表中刪除一個數據(id 10),當我們再創建這個數據時,id不會再是10,用一條命令查看自動生成的id,(select? last_insert_id();)mysql會接著這里面的數字繼續排下去,除非把這里面的數值清零。
?
在表中篩選出的數據插入到另一張表中(兩種表的字段必須相同)
insert? into? kebiao? (name)?select? name? from? xuesheng?? where?? id>2;
?? 插入到???? 表名?? 字段????? 在? 字段??????? 表名??????? 篩選?? 條件
在表中篩選出的數據插入到另一張表中,若這張表中數據重復則替換
replace? into? kebiao? (name)?select? name? from? xuesheng?? where?? id>2;
?
delete
mysql內置選項:當你使用delete語句或者update語句時,沒有使用where條件(字句),它不會讓你執行!
注意:當你清空整張表時,在插入數據,數據的id號也會接著最后一個被清空數據的id號繼續往下排
????? 所以,想要從零開始,必須清空(select? last_insert_id();)中的數值
truncate ?表名;?--->清空表,并且重置計數器(select? last_insert_id();)類似于id。。。
?
加鎖:lock?? tables??? 表名?? 鎖類型{read|write}
解鎖:unlock?? tables??? :表示解除所有表的鎖
mysql默認隔離級別為REPATABLE? READ可重讀
查看隔離級別:show global variables like '%iso%';
修改隔離級別:set? {session|global} 變量名='對應值'; |set tx_isolation='read-committed';
?
創建用戶
create? 權限?? 用戶名@主機名?? identified?? by? "密碼"
flush? privileges; ?重讀授權表,讀取用戶信息
show? grants? for? 用戶名@'主機名';?查看用戶賬戶信息
修改管理員密碼
退出并關閉mysql :service? mysql?? stop
手動修改啟動文件:/etc/init.d/mysql? 修改第283行
添加:
--skip-grant-tables :跳過授權表
--skip-networking :跳過網絡
?
啟動mysql服務:service mysql? start?
use? mysql? ?:指定數據庫
select? User,Host,Password? from? user;??? :查看用戶表
update? user?? set?? Password=PASSWORD('密碼')? where? User='root';? :手動修改密碼
退出數據庫,關閉服務!
修改/etc/init.d/mysql,把添加的那兩行刪除
再重新啟動服務,就可以登陸了
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/linux-s/p/11290029.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的详解数据库引擎与SQL语句增删改查(非常详细,带例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 水晶报表,解决——提示“您请求的报表需要
- 下一篇: 学习旧岛小程序 (4) 电影组件的实现