資料庫部分(MySql)_1
SQL規範
以 “ ; ” 結尾;關鍵字之間要有空格(可以由多個空格);SQL語句中可以一個或多個換行;關鍵字不區分大小寫。
資料庫相關SQL
查詢所有數庫庫:
show databases;
建立資料庫:
create database 資料庫名稱;
檢視單個數據庫詳情
show create database 資料庫名稱;
刪除資料庫
drop database 資料庫名稱;
建立資料庫時制定字符集
create database 資料庫名稱 character set gbk/utf8;
使用資料庫
use 資料庫名稱;
表相關SQL
什麼是表:在關係型資料中儲存資料庫的單元,類似於Excel中表,建立表的時候需要指定表的欄位資訊。
建立表
create table 表名 (欄位名 欄位型別,欄位名 欄位型別...);
檢視所有表
show tables;
檢視單個表資訊
show create table 表名;
刪除表
drop table 表名;
建立表指定字符集和引擎
charset engine create table 表名 (欄位名 欄位型別,欄位名 欄位型別) engine=myisam/InnoDB charset=gbk/utf8;(InnoDB:支援資料庫的感激操作,如事務、外來鍵等;MyIsam:只支援資料基礎的增刪改查)
查看錶欄位資訊
desc 表名;
修改表相關SQL
修改表名
rename table 原名 to 新名;
修改表的引擎和字符集
alter table 表名 engine=innodb/myisam charset=utf8/gbk;
新增表字段(在表的最後位置新增)
alter table 表名 add chinese int;
在表的最前面新增
alter table 表名 add chinese int first;
在某個欄位的後面新增
alter table 表名 add 新欄位名 新欄位表名 after 老欄位名;
刪除表字段
alter table 表名 drop 欄位名;
修改表字段的名稱和型別
alter table 表名 change 老欄位表明 新欄位表名 欄位型別;
修改欄位型別和欄位的位置
alter table 表名 modity 欄位名 新型別 first/after XXX;
表的增刪改查
全表插入格式
insert into 表名 values (資料1,資料2,資料3);
指定欄位插入
insert into 表名 (欄位名1,欄位名2...) values (資料1,資料2);
批量插入資料格式
insert into 表名 values (資料1,資料2,資料3),(資料1,資料2,資料3);
指定欄位批量格式
insert into 表名 (欄位名1,欄位名2) values ((資料1,資料2),(資料1,資料2);
所有欄位查詢
select * from 表名;
指定欄位查詢
select 欄位名,欄位名 from 表名;
條件查詢格式
select * from 表名 where 條件;
修改資料
update 表名 set 欄位名=新的資料 where id=位置;
刪除資料
delete from 表名 (表內所有的資料) where 條件;
去重(distinct)
select distinct XX from 表名;
編碼問題
在連線資料庫後執行set names gbk;把資料庫的解碼字符集修改成gbk。
主鍵約束
主鍵:表示表中資料唯一性的欄位稱為主鍵。
約束:約束就是建立表的時候給表中欄位新增的限制條件。
主鍵約束:添加了主鍵約束的欄位,儲存的數值必須唯一而且非空
create table 表名 (欄位名 型別 primary key,欄位名 型別);
主鍵自增約束
create table 表名 (欄位名 型別 primary key auto_increment,欄位名 型別);
自增的特點
值為null時會自動賦值;以表中曾出現的最大值基礎上+1;刪除資料自增數值不減少;delete清空表,自增數值不變。
如何讓自增數值清零
使用truncate關鍵字,相當於drop+create。
truncate table 表名;
註釋
建立表的時候可以通過 comment 關鍵字對欄位進行描述
create table 表名 (欄位名 型別 primary key auto_increment comment'這個欄位是主鍵',name varcher(20) comment '姓名');
` 和 ' 的區別
`的作用是用來修飾表名和欄位名(可以省略);
create table `表名` (id int ,name varchar(20));
' '是作用是用來修飾字符串。
資料冗餘
由於表設計不夠合理,出現大量的重複資料,成為冗餘資料;可以通過拆分表的形式,把可能重複的資料儲存到一張新的表中,在原表中只需要通過一個id建立關係即可,這種建立關係的欄位稱之為外來鍵;
create table T1(id int primary key auto_increment,name varchar(20));
create table T2(id int primary key auto_increment,name varchar(20),T1_id int (上級分類));
事務
事務是資料庫中執行SQL語句的最小工作單位,把多條SQL語句放在事務中可以保證多條SQL要麼全部成功,要麼全部失敗。
檢視資料庫的提交狀態
show variables like '%autocommit%';
關閉/開啟自動提交
set autocommit = 0/1;
事務回滾
rollback;此關鍵字會把資料庫記憶體中的資料回滾到上一次commit的點;
savepoint 設定回滾點
savepoint 標識(隨便起);
指定的回滾到某個回滾點
rollback to 標識;
事務的應用場景
當執行某一件事需要多行SQL語句時,並且要求多行SQL要麼全部成功,要麼全部失敗,此時必須使用事務,不然就會出現多行SQL部分成功部分失敗的情況。
SQL分類
DDL: (Deta Definition Language)資料定義語言,包括create、drop、alter、truncate;不支援事務。
DML: (Deta Manipulation Language)資料操作語言,包括insert、delete、update、select(DQL);支援事務。
DQL: (Data Query Language)資料查詢語言,只包括select;不支援事務。
TCL: (transaction Control Language)事務控制語言,包括commit、rollback、savepoint、rollback to等。
DCL: (Data Control Language)資料控制語言;分配使用者許可權相關的SQL。
資料型別
整數:
int(m):四個位元組,和JAVA中的int一致;
bigint(m):八個位元組,和JAVA中的long一致;
m代表顯示長度,但是必須和zerofill關鍵字結合使用 create table 表名(num int(10) zerofill);
浮點數型別
double(m,d):m代表總長度,d代表小數點後面的長度;
decimal(m,d):超高精度小數,需要涉及高精度運算時使用;
字串型別
char(m):長度不可變,執行效率高,最大長度255;
varchar(m):長度可變,節省空間,最大長度65535(超255建議使用text);
text:長度可變,通常儲存長度大於255的文字資料,最大值65535;
日期型別
date:只儲存年月日;
time:只儲存時分秒;
datetime:年月日時分秒,預設值為null,最大值9999-12-31;
timestamp(時間戳):年月日時分秒,預設為當前時間,最大值為2038-01-19。
別名
查詢表中所有的欄位名 並把原欄位名改成XXX 以下有三種方法:
select 原欄位名 as '別名' from 表名
select 原欄位名 '別名' from 表名
select 原欄位名 別名 from 表名
and or in
and 和 java中的&&效果一樣
or 和 java中的||效果一樣
select * from 表名 where sal=1500 and deptno=10;
select * from 表名 where sal=1500 or sal=3000 or sal=5000;
select * from 表名 where sal in (5000,1500,3000);
between X and Y 查詢X和Y之間的資訊 (包括X和Y)
select * from 表名 where job between X and Y;
查詢
用於模糊查詢
_:代表單個未知字元 包含字元a: _a%
%:代表0個或多個位置字元 以a開頭: a%;以a結尾: %a
不包含XXX
select * from 表名 where 欄位名 not like '%啪啪%';
包含XXX
select * from 表名 where 欄位名 like '%啪啪%';
排序
order by 寫在 where 的後面;沒有 where && limit 寫在後面;
order by 後面寫排序的欄位名,可以寫一個或多個,預設排序規則為升序,也可以指定規則:升序(asc) 降序(desc)。
分頁查詢(limit)
limit X,Y :x代表跳過的條數;y代表查詢的條數(每頁的條數)。
案例:查詢第n頁沒頁m條資料 limit (n-1)*m,m;
日期及相關函式
select 'Hello World';
now() 獲取當前日期+時間 select now();
獲取當前日期 select curdate();
獲取當前時間 select curtime();
從年月日時分秒提取年月日 和提取時分秒 select date(now()); select time(now());
從年月日時分秒中提取年,月,日,時,分,秒
select extract(year from now());
select extract(month from now());
select extract(day from now());
select extract(hour from now());
select extract(minute from now());
select extract(second from now());
日期的格式化 格式:date_format(日期,格式);
%Y 代表四位年 %y 兩位年
%m 兩位月 %c 一位月
%d 日
%H 24小時 %h 12小時
%i 分 %s 秒
改變格式
select date_format(now(),'%Y年%m月%d日 %H點%i分%s秒');
把非標準格式的時間轉成標準格式
str_to_date(非標準格式的時間,格式);
轉成標準格式
select str_to_date ('15.08.2016 08:00:00','%d.%m.%Y %H:%i:%s');
ifnull函式
age=ifnull(x,y) 如果x的值為null 則 age=y, x不為null則age=x
update emp set comm=ifnull(comm,0);
聚合函式
對多條資料進行統計查詢
求平均值 avg(欄位名) select avg(欄位名) from 表名;
最大值 max(欄位名) select max(欄位名) from 表名;
最小值 min(欄位名) select min(欄位名) from 表名;
總和 sum(欄位名) select sum(欄位名) from 表名;
查詢符合條件的條數 select count(*) from 表名 where 欄位名=XX;
字串相關函式
字串拼接 concat(s1,s2) 結果為 s1s2
select 欄位名,concat(欄位名,拼接資料) from 表名;
獲取字串的長度 char_length(欄位名)
select 欄位名,char_length(欄位名) from 表名;
獲取字串在另一個字串中出現的位置
格式一:instr(str,substr); select instr('asdfg','d'); //3
格式二:locate(substr,str); select locate('d','asdfg'); //3
轉換大小寫
select upper('abc');select lower('NBA');
去兩端空白
字串中間的空白不能去 select trim(' ab c ');
擷取字串
從左邊擷取: select left('abcdefg',2);
從右邊擷取: select right('abcdefg',3);
從某個位置擷取: select substring('abcdefg',2,3);//從第二個資料開始擷取三個資料
重複
select repeat('ab',3);
反轉
select reverse('abc');
替換
select replace('abcdefg','c','m');
插入
select insert('abcdefg',3,2,'m');//把從第三個位置開始的兩個資料替換成‘m’。