MySQL

三大範式

什麼是三大範式:
第一範式無重複的列。當關系模式R的全部屬性都不能在分解爲更基本的數據單位時,稱R是知足第一範式的,簡記爲1NF。知足第一範式是關係模式規範化的最低要求,不然,將有不少基本操做在這樣的
關係模式中實現不了。

第二範式屬性徹底依賴於主鍵 [ 消除部分子函數依賴 ]。若是關係模式R知足第一範式,而且R得全部非主屬性都徹底依賴於R的每個候選關鍵屬性,稱R知足第二範式,簡記爲2NF。第二範式(2NF)是
在第一範式(1NF)的基礎上創建起來的,即知足第二範式(2NF)必須先知足第一範式(1NF)。第
二範式(2NF)要求數據庫表中的每一個實例或行必須能夠被惟一地區分。爲實現區分一般須要爲表加上
一個列,以存儲各個實例的惟一標識。這個惟一屬性列被稱爲主關鍵字或主鍵、主碼。

第三範式屬性不依賴於其它非主屬性 [ 消除傳遞依賴 ]。設R是一個知足第一範式條件的關係模式,X 是R的任意屬性集,若是X非傳遞依賴於R的任意一個候選關鍵字,稱R知足第三範式,簡記爲3NF. 知足第三範式(3NF)必須先知足第二範式(2NF)。第三範式(3NF)要求一個數據庫表中不包含已在其
它表中已包含的非主關鍵字信息。
sql

注:關係實質上是一張二維表,其中每一行是一個元組,每一列是一個屬性
第二範式(2NF)和第三範式(3NF)的概念很容易混淆,區分它們的關鍵點在於,2NF:非主鍵列是
否徹底依賴於主鍵,仍是依賴於主鍵的一部分;3NF:非主鍵列是直接依賴於主鍵,仍是直接依賴於非主鍵列數據庫

SQL語句分類

  • DDL(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等。
  • DML(Data Manipulation Language):數據操做語言,用來定義數據庫記錄(數據)增刪改。
  • DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別。
  • DQL(Data Query Language):數據查詢語言,用來查詢記錄(數據)查詢。

DDL操做數據庫

操做數據庫安全

  1. 建立數據庫
    create database learn charset utf8mb4;-- 建立數據庫並指定編碼
  2. 查看數據庫
    查看當前數據庫服務器中的全部數據庫
    show databases;
  3. 修改數據庫
    alter database learn charset utf8;
    4.刪除數據庫
    drop database learn;
    5.其它
    select database(); -- 查看當前使用的數據庫
    use learn; -- 切換數據庫: use 數據庫名

操做表
經常使用數據類型:服務器

int:整型
double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲
999.99;默認支持四捨五入
char:固定長度字符串類型; char(10) 'aaa ' 佔10位
varchar:可變長度字符串類型; varchar(10) 'aaa' 佔3位
text:字符串類型,好比小說信息;
blob:字節類型,保存文件信息(視頻,音頻,圖片);
date:日期類型,格式爲:yyyy-MM-dd;
time:時間類型,格式爲:hh:mm:ss
timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss 會自動賦值
datetime:日期時間類型 yyyy-MM-dd hh:mm:sside

建立表函數

CREATE TABLE user(
	name VARCHAR(20),
	age int,
	gender char(1)
);

drop table user -- 刪除表
SHOW TABLES; -- 顯示當前數據庫中的全部表
DESC USER; -- 查看錶的字段信息
ALTER TABLE user ADD id INT; -- 新增列
ALTER TABLE user CHANGE name username VARCHAR(20); -- 修改列
ALTER TABLE user MODIFY gender VARCHAR(20); -- 修改列
ALTER TABLE user DROP id; -- 刪除列, 一次只能刪一列。
ALTER TABLE user RENAME user_tb; -- 修改表名
SHOW CREATE TABLE user_tb; -- 查看錶格的建立細節
ALTER TABLE user_tb CHARSET utf8mb4; -- 修改表的編碼格式編碼


練習:
表名 card(會員卡表)
列名 數據類型
cardid int
cardnum varchar(20)
regDate date
需求:
(1)建立該表
(2)將card表名修改成CardInfo
(3)添加delDate(註銷時間) 列到表中
(4)將cardnum改成varchar(30)
(5)刪除regDate列
(6)刪除cardInfo表code

CREATE TABLE card(
   cardid INT,
   cardnum VARCHAR(20),
   regDate DATE
);

ALTER TABLE card RENAME cardinfo;
ALTER TABLE cardinfo ADD deldate DATE;
ALTER TABLE cardinfo MODIFY cardnum VARCHAR(30);
ALTER TABLE cardinfo DROP regDate;
DROP TABLE cardinfo;

DML操做

DML是對錶中的數據進行增、刪、改的操做。
主要包括:INSERT 、UPDATE、 DELETE
INSERT INTO user(name, age, gender) VALUES('張三', 21, '男');視頻

練習準備 :對象

create table emp( 
	id int primary key, 
	name varchar(100) not null, 
	gender varchar(10) not null, 
	birthday date, 
	salary float(10,2), 
	entry_date date, 
	resume text 
);

INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)VALUES(1,'zs','female','1990-5-10',10000,'2015-5-5-','goodgirl'); 
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(2,'wu','male','1995-5-10',10000,'2015-5-5','good boy'); 
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(3,'aaa','male','1995-5-10',10000,'2015-5-5','good boy');

sql中的運算符:
(1)算術運算符:+,-,*,/(除法),求餘(%)
示例:
5/2
5%2
2/5
2%5
(2)賦值運算符:=
注:賦值方向:從右往左賦值
示例: name='張三'
(3) 邏輯運算符:
and(而且),or(或者),not(取非)
做用:用於鏈接多個條件時使用
(4) 關係運算符:
>,<,>=,<=,!=(不等於),=(等於),<>(不等於)
補充:查詢全部數據:select * from 表名
(2)修改(更新)操做:UPDATE:
語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
練習:
將全部員工薪水修改成5000元。
將姓名爲’zs’的員工薪水修改成3000元。
將姓名爲’aaa’的員工薪水修改成4000元,resume改成ccc。
將wu的薪水在原有基礎上增長1000元。

UPDATE emp SET salary = 5000;
UPDATE emp SET salary = 3000 WHERE name = 'zs';
UPDATE emp SET salary = 4000 , resume = 'ccc' WHERE name = 'aaa';
UPDATE emp SET salary = salary + 1000 WHERE name  = 'wu';

select now(); -- 獲取當前系統時間


DCL

一、建立用戶:
create user 用戶名@指定ip identified by 密碼;
CREATE USER coder@localhost IDENTIFIED BY '000000'; -- 建立用戶
create user 用戶名@‘% ’ identified by 密碼 任意IP都可登錄
CREATE USER coder@'%' IDENTIFIED BY '000000'; -- 建立可遠程鏈接的用戶

二、用戶受權:
grant 權限1,權限2,........,權限n on
數據庫名.* to 用戶名@IP; 給指定用戶授予指定指定數據庫指定權限
grant select,insert,update,delete,create on db.* to 'coder'@'127.0.0.1';
grant all on . to 用戶名@IP 給指定用戶授予全部數據庫全部權限
grant all on *.* to 'test456'@'127.0.0.1'
三、用戶權限查詢:
show grants for 用戶名@IP;
show grants for 'root'@'%';
四、撤銷用戶權限:
revoke 權限1,權限2,........,權限n on 數據庫名.* from 用戶名@IP;
REVOKE SELECT ON *.* FROM 'root'@'%' ;
五、刪除用戶:
drop user 用戶名@IP;
drop user test123@localhost;


DQL數據查詢

簡單查詢
條件查詢
模糊查詢

語法: 列名 like '表達式' //表達式必須是字符串
通配符:
_(下劃線): 任意一個字符
%:任意0~n個字符,'張%'

字段控制查詢
DISTINCT --去重
SELECT *,sal+IFNULL(comm,0) FROM emp; -- 把NULL轉換成數值0

排序
語法: order by 列名 asc/desc

聚合函數

聚合函數是用來作縱向運算的函數:
COUNT(列名):統計指定列不爲NULL的記錄行數;
MAX(列名):計算指定列的最大值,若是指定列是字符串類型,那麼使用字符串排序運算;
MIN(列名):計算指定列的最小值,若是指定列是字符串類型,那麼使用字符串排序運算;
SUM(列名):計算指定列的數值和,若是指定列類型不是數值類型,那麼計算結果爲0;
AVG(列名):計算指定列的平均值,若是指定列類型不是數值類型,那麼計算結果爲0;

分組查詢
查詢每一個部門的部門編號和每一個部門的工資和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;

注:having與where的區別:
1.having是在分組後對數據進行過濾,where是在分組前對數據進行過濾
2.having後面可使用分組函數(統計函數)
where後面不可使用分組函數。
WHERE是對分組前記錄的條件,若是某行記錄沒有知足WHERE子句的條件,那麼這行記錄不會參加分
組;而HAVING是對分組後數據的約束。

分頁查詢 LIMIT用來限定查詢結果的起始行,以及總行數。 limit 開始下標,顯示條數;//開始下標從0開始 limit 顯示條數;//表示默認從0開始獲取數據

相關文章
相關標籤/搜索