MySQL 的函式詳解!
- 完整性約束
- 什麼是資料完整性
資料的準確性和可靠性。
- 分類
- 實體完整性
記錄準確的。(記錄不能重複)
- 主鍵約束: 不能重複,不能為空。 Primary key
欄位唯一的。
不能使用業務欄位。
無意義的不重複的資料。
#1. create table stu( sid int primary key, sname varchar(20), age int );
#2. create table stu( sid int, sname varchar(20), age int, primary key(sid) ); #3. 約束 主鍵約束的名稱 alter table student add CONSTRAINT PK_SID primary key(sid);
# 刪除主鍵約束 alter table sc drop primary key; 主鍵約束只能有一個。 但是允許有聯合主鍵(多個欄位整體作為主鍵)。 |
- 唯一約束:欄位值不重複 unique
#唯一約束 alter table student add CONSTRAINT UN_CARD unique(card); |
- 主鍵自增(1開始 增長1 ) auto_increment
#主鍵自增 create table stu( sid int primary key auto_increment, sname varchar(20) ); alter table student modify sid int auto_increment; |
- 域完整性
域:欄位的值準確。
- 型別約束
- 非空約束 not null
- 預設值 default
create table student( sid int primary key auto_increment, sname varchar(20) not null, age int, sex varchar(10) default '男' ) |
- 引用完整性: 外來鍵約束
外來鍵欄位所在表取值只能參考另一張表的主鍵的取值。
#外來鍵約束 alter table student add CONSTRAINT FK_CLID foreign key(clid) references classroom(cid); |
- 自定義完整性 check(oracle支援)
Alter table student add constraint CK_AGE check(age between 1 and 150);
- 運算子
- 算術運算子 + - * / %
- 比較運算子
- 邏輯運算子
- 位運算子
#運算子 #1.算術運算子 select 1+1; select 1-1; select 2*3; select 3/2; #1.5 select 3/0; #null select 3 div 2; #取整 select 3%2; #2.比較運算子 > < >= <= !=/<> true 1 / false 0 select 1>2; select 1<2; select 1=2; select 1!=2; select 1<>2; #3.邏輯運算子 select 1>2 and 2<3; select 1>2 or 2<3; select !(1<>2); #4.位運算(二進位制) select 2&3; #按位與 2 select 2|3; #按位或 3 select 2^3; #按位異或 1 |
- DML
- 新增(插入) insert
#insert # 3 ls 1 insert into student values(3,'ls',1); # 插入部分欄位 insert into student(clid,sname) values(1,'ww'); # 插入三條資料(批量插入) insert into student(sname,clid) values('zl',1),('fq',1),('cb',1); #複製表中的值 insert into stu select * from student; #向date型別資料插入資料(oracle不允許) insert into stu(sname,clid,birthday) values('zs',1,'1998-09-09'); |
- 修改 update
#update update tname set 欄位=新值 [where 條件] update stu set sname='bq' where sid = 2; |
- 刪除
delete from tname [where 條件] delete from stu where sid = 10;
# 逐行刪除 delete from stu; # 清空表 truncate table stu;
delete逐行刪除,truncate清空內部資料檔案。 Truncate效率高於delete。 Truncate自增重置,delete不會重置自增。 |
- 查詢
查詢的語法結構Select 子句 From tname(結果集) [where 條件 Group by 分組 Having 條件 Order by 排序 Limit 限制結果 ] #查詢 # 查詢emp表中所有的資料。 select * from emp; # 查詢emp表中所有的員工姓名和職位資訊。 select ename,job from emp; # 查詢emp表中工資超過2000的員工資訊。(單一條件) select * from emp where sal >= 2000; # 查詢emp表中工資大於2000並且不在20號部門的員工資訊。(組合條件) select * from emp where sal > 2000 and deptno <> 20; # 查詢emp表中工資大於2000和20號部門的員工資訊。 select * from emp where sal > 2000 or deptno = 20; # 查詢emp表中工資在1000到2000之間的員工資訊。(範圍查詢) select * from emp where sal BETWEEN 1000 and 2000; # 查詢emp表中職位是CLERK,MANAGER,SALESMAN的員工資訊。(集合查詢) select * from emp where job in ('CLERK','MANAGER','SALESMAN'); # 查詢emp表中所有的職位資訊。(去重) select distinct job from emp; # 起別名(欄位 表 結果集) [as] 別名 select 1+1 sum; select ename '姓名' from emp; select e.empno,e.ename from emp e; # 排序 order by 排序欄位 [ASC|DESC] select * from emp order by sal desc; # 工資降序排序,工資一樣的按照empno的降序排序。 select * from emp order by sal desc,empno desc; # 查詢沒有獎金的員工資訊。 is null / is not null select * from emp where comm is not null; # 查詢emp表中姓名S打頭的員工資訊。(模糊查詢) like %:0到多位字元 _:代表一位 select * from emp where ename like 's%'; select * from emp where ename like '%t'; select * from emp where ename like '%s%'; #包含 # 第二個字母是L的員工 select * from emp where ename like '_l%' # 限制結果查詢 limit index,length select * from emp limit 1,5; |
|
- 函式
- 單行函式
- 數學函式
- 字元函式
- 日期函式
#數學函式 select abs(-10); #絕對值 select ceil(-12.8); #向上取整(大最接近的整數) select floor(-12.3); #向下取整 select rand(); #[0,1)隨機數 select POW(2,3); #求冪運算 select SQRT(9); #開方 select ROUND(14.35,-1); #四捨五入 select MOD(5,2); #取餘 #字元函式 select LENGTH('this'); select length(ename) from emp; select UPPER('this'); select LOWER(ename) from emp; select CONCAT('this ','is'); #連線 select SUBSTR('abcdef',1,3); #字串擷取從1開始 select LPAD('aa',10,'*'); #左填充 select RPAD('aa',10,'*'); #右填充 select trim(' aa a '); #去空格 #日期函式 #獲取日期時間 select now(); select sysdate(); #獲取日期 select CURDATE(); select CURTIME(); select YEAR(now()); select MONTH('1998-09-09'); #select DAY(date); #日期計算 select DATE_ADD(NOW(),interval 1 MONTH); select LAST_DAY(now()); #獲取某個月最後一天 |
- 聚合函式
Max()
Min()
Avg()
Sum()
Count()
#聚合函式 select max(sal) from emp; select min(sal) from emp; select avg(sal) from emp; select sum(sal) from emp; select count(*) from emp; #統計記錄數 select count(1) from emp; #統計記錄數 select count(comm) from emp; #統計該欄位不為空的數目 |
- 分組函式
#分組函式 group by 分組欄位 / having 對分組的結果再次進行檢索,可以出現聚合函式
# 檢視每個部門的平均工資 select deptno,avg(sal) from emp group by deptno; # 查詢平均工資>2000的部門的編號和平均工資。 select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000; |
- 加密函式
#加密函式 select MD5('root'); select SHA('root'); select PASSWORD('root'); |