1. 程式人生 > 實用技巧 >Mysql高階05-SQL語句

Mysql高階05-SQL語句

SQL

庫結構操作SQL

1、檢視所有資料庫

show databases;

2、切換使用資料庫

use 資料庫名;

3、建立資料庫

create database 資料庫名;
create database 資料庫名 charset 'utf8';

4、刪除資料庫

drop database 資料庫名;

表結構操作SQL

1、在某資料庫中檢視所有表格

show tables; 

2、查看錶結構

desc 表名稱;

3、刪除表結構

drop table 表名稱;

4、修改表名稱

rename table 舊名稱 to 新名稱;

5、修改表字段

(1)增加一個欄位

alter table 表名稱 add  欄位名稱  資料型別; #預設在最後
alter table 表名稱 add  欄位名稱  資料型別 after 另一個欄位名; 
alter table 表名稱 add  欄位名稱  資料型別 first;

(2)刪除一個欄位

alter table 表名稱 drop  欄位名稱;

(3)修改欄位的名稱

alter table 表名稱 change  舊欄位名稱  新欄位名稱 資料型別;

(4)修改欄位的資料型別

alter table 表名稱 modify  欄位名稱  資料型別;

(5)修改欄位的位置

alter table 表名稱 modify  欄位名稱  資料型別 after 另一個欄位名; #指定特定位置
alter table 表名稱 modify 欄位名稱 資料型別 first;

6、建立表格

create table 表名稱(
   欄位名 資料型別 primary key auto_increment,   #(自增)必須是整數列、必須是鍵列、只能有一列
   欄位名 資料型別 unique key not null,          #(非空)值是非空、可以有多列
 欄位名 資料型別
default 預設值,          #(預設值)設定預設值、可以有多列 primary key(欄位名...),               #(主鍵)必須唯一、非空、只能有一個  
unique key(欄位名...),     #(唯一鍵)值唯一、不要求必須非空、可以有多個 foreign key(參考列名) references 主表名(被參考列名) 【on update xxx on delete yyy】 #從表上   #(外來鍵)限定兩個表的兩個欄位之間的值或一個表的兩個欄位之間的值的約束關係              );

7、建表後修改表約束

(1)修改主鍵

alter table 表名稱 add primary key (欄位名...);

(2)刪除主鍵

alter table 表名稱 drop primary key;

(3)修改唯一鍵

alter table 表名稱 add unique key(欄位列表);

(4)刪除唯一鍵,是通過刪除對應的索引來刪除的

alter table 表名稱 drop index 索引名;

(5)修改表非空

alter table 表名稱 modify 欄位名 資料型別 not null;

(6)取消非空約束

alter table 表名稱 modify 欄位名 資料型別 【default 預設值】;

(7)修改預設值

alter table 表名稱 modify 欄位名 資料型別 default 預設值;

(8)取消預設值

alter table 表名稱 modify 欄位名 資料型別 【not null】;

注意:當通過修改語句,增加或取消預設值或非空,如果要保留預設值或非空約束,還得寫上。

(9)修改自增

alter table 表名稱 modify 欄位名 資料型別 auto_increment;

(10)刪除自增

alter table 表名稱 modify 欄位名 資料型別;

(11)修改外來鍵

alter table 主表名稱  add foreign key (主表列) references 被引用表名(被引用列名) 【on update xx on delete yy】;

(12)刪除外來鍵

alter table 主表名稱 drop foreign key 外來鍵約束名;    約束英文名為(CONSTRAINT_NAME)

資料操作

1、為所有欄位賦值,一次新增多行或一行

insert into 表名稱 values(值1,值2...);  
insert into 表名稱 values(值1,值2...),(值1,值2...),...;

2、為指定欄位賦值,一次新增多行或一行

insert into 表名稱(欄位1,欄位2...) values(值1,值2...);
insert into 表名稱(欄位1,欄位2...) values(值1,值2...),(值1,值2...),...;

#要求值的數量、順序與表結構的數量、順序一一對應

#預設值的位置可以寫default,自增的位置寫null

1、刪除整張表的資料

delete from 表名稱;
truncate 表名稱;

2、刪除滿足條件的行

delete from 表名稱 where 條件; 

#delete是一條一條刪除。truncate是把整張表drop掉,重新建一張。
#delete如果在事務中,可以回滾。truncate是無法回滾。

1、修改所有行的部分欄位

update 表名稱 set 欄位名 = 欄位值, 欄位名 = 欄位值...; 

2、修改滿足條件的行

update 表名稱 set 欄位名 = 欄位值, 欄位名 = 欄位值... where 條件;

select * from 表名稱;

運算子

is null
is not null

與:&& and
或:|| or

between .. and ..
in(....)

not between .. and ..
not in(....)

like 配合 '%或_'
_代表一個字
%代表任意個字

條件查詢

只返回不同的值

select distinct name from users;

返回按照第1列的升序排序,desc降序,如果想在多個列上進行降序排序,必須對每一列指定DESC關鍵字。

select *  from  users order by 1desc】;

返回從第1行起的5行資料,第一個被檢索的行是第0行

select * from users limit 0,5;

返回 “xiaoming-小明” 拼接字樣的一列資料

select concat (username,'-',NAME) from users;

檢視某個表的索引

show index from 表名稱;

檢視某個表的所有約束

select * from information_schema.table_constraints where table_name = '表名稱';

完整語句

select distinct
    <select_list>
from
    <left_table> <join_type>
join <right_table> on <join_condition>
where
    <where_condition>
group by
    <group_by_list>
having
    <having_condition>
order by
    <order_by_condition>
limit <limit_number>

1、外來鍵約束的等級
(1)Restrict方式:嚴格模式,預設的模式
(2)No action方式:在mysql和Restrict方式一樣
(3)Set null方式:置空
(4)Cascade方式:級聯

可以分別設定on update xxx on delete yyy。
修改和刪除的約束等級可以相同也可以不同。

2、外來鍵約束的操作
(1)建表的順序:先建立主表,再建立從表
(2)新增和修改從表的記錄時,參考列的值必須在被參考列的值的範圍內選擇
例如:新增和修改員工表記錄時,員工所在的部門的選擇,要在部門表的編號範圍內
(3)修改和刪除主表的記錄時,要看約束等級,
如果是Restrict方式,那麼只要被參考列的某個值被引用了,就不能隨意刪或改。
如果是Set null方式方式,那麼主表對應的值被修改和刪除了,從表對應的記錄就設定為null
如果是Cascade方式,那麼主表對應的值被修改或刪除了,從表對應的記錄跟著修改或刪除。
(4)刪除表順序:先刪從表,再刪主表