【UnityShader】凹凸對映(世界空間下)
1、環境需要
mysql資料庫的環境 mysql-installer-community-5.7.28.0.msi
資料庫的視覺化操作工具SQLyog-11.2.5-0.x64.exe
安裝完以後找到安裝路徑下bin目錄 在此目錄下開啟cmd 輸入mysql -uroot -p #### ,檢查是否安裝成功,這裡的###表示登入資料庫的密碼
成功登入會顯示
開啟視覺化工具,輸入對應埠號和賬號密碼,即可開啟對應資料庫視覺化介面
2、資料庫概述
資料庫的操作包括SQL語句,約束,分頁
3、SQL語句
Structural query language-----SQL分為以下三種類型
DML:Data Manipulation Language 資料操作語言
DDL:Data Definition Language 資料定義語言
DCL:Data Control Language 資料控制語言
3.1 DML
查詢操作
#查詢表中所有內容
select *
from 表名 ;
#查詢表中指定內容
select 欄位名1,欄位名2,........
from 表名;
#查詢滿足判斷條件的內容
select * #注意這裡的判斷條件 大於>,小於<,等於=,大於等於>=,小於等於<=,不等於<>,也可以加邏輯運算子 與and,或or,^非 from 表名 #模糊查詢也可以作為判斷條件 用法:select * from 表 where name like '_\_%'; where 判斷條件; #
%表示任意個數任意字元, _表示任意一個字元 ,\_轉義字元,
#查詢條件的轉移字元也可以用關鍵字escape宣告
WHERE first_name LIKE '_$_%' ESCAPE '$'; # escape:指定轉義字元
#特殊運算子
in(等於列表中的任意一個) any( 和子查詢=中某一個值比較) all(和子查詢中所有的值進行比較)
#排序
# 查詢所有部門的名字,location_id,員工數量和工資平均值 SELECT employees.`department_id`,departments.`department_name`,departments.`location_id`,AVG(salary),COUNT(1) FROM employees JOIN departments ON employees.`department_id` = departments.`department_id` GROUP BY employees.`department_id`,departments.`department_name`; ORDER BY employees.`department_id` asc #ORDER BY是負責排序的,此地方結果按department_id排序,預設增序, 有(desc/asc)倆個選項
#表的連線
/*
#表本身自己連線 vs 不同的表連線
自連線 vs 非自連線
#連線的表以表中某個值相等的連線 vs 笛卡爾積(全集)或外連線
等值連線 vs 非等值連線
#以下詳細說明
內連線 vs 外連線
*/
/* 內連線: 合併具有同一列的兩個以上的表的行, 結果集中不包含一個表與另一個表不匹配的行 外連線: 兩個表在連線過程中除了返回滿足連線條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連線稱為左(或右) 外連線。沒有匹配的行時, 結果表中相應的列為空(NULL). */ #內連線 :獲取所有員工的姓名和部門名稱 select e.first_name,d.department_name from employees e join departments d on e.department_id = d.department_id; #左外連線 :獲取所有的員工及部門名稱 select e.first_name,d.department_name from employees e left join departments d on e.department_id = d.department_id; #右外連線 :獲取所有的部門及員工 select e.first_name,d.department_name from employees e right join departments d on e.department_id = d.department_id; #將右外連線變成左外連線 select e.first_name,d.department_name from departments d left join employees e on e.department_id = d.department_id;
#總結:外連線包括內連線裡面不滿足條件且是某一個表的全集。
#sql自帶的函式
#單行函式
/* LOWER('SQL Course') : 將內容全部轉為小寫 UPPER('SQL Course') :將內容全部轉為大寫 CONCAT('Hello', 'World') : 將兩個字元進行拼接 SUBSTR('HelloWorld',1,5) : 將字串從1的位置開始擷取子串長度為5。(索引從1開始) LENGTH('HelloWorld') : 字串長度 INSTR('HelloWorld', 'W') :w在當前字串中首次出現的位置 LPAD(salary,10,'*') :向右對齊 RPAD(salary, 10, '*') :向左對齊 TRIM('H' FROM 'HelloWorld') : 去除字串兩端指定的字元H REPLACE('abcd','b','m') : 將當前字串中的b替換成m ROUND: 四捨五入 ROUND(45.926, 2) 45.93 TRUNCATE: 截斷 TRUNCATE(45.926) 45 MOD: 求餘 MOD(1600, 300) 100 now() : 當前日期和時間 #注意組函式,只能出現在分組裡面(having)或查詢語句(select)上
/* 組函式 AVG() :求平均數 SUM(): 求和 MAX():求最大值 MIN() :求最小值 COUNT() : 求數量 #avg()和sum() : 注意只能運算數值型別的資料 #處理的資料不包括null #max()和min() :注意只能運算數值,日期,字串 count(欄位名) : 統計的時候不包括null count(*) : 統計表中所有的資料的條數(個別欄位為null不受影響)。 count(數值) : 統計表中所有的資料的條數。 每條資料都會"存放"該數值然後統計該數值的個數。 效率比count(*)高 */
/*
#通用函式
IFNULL(commission_pct,0) : 如果commission_pct中的內容為null那麼就用0替換 ----------------------等值------------------------ case 欄位名 when 值1 then 相應的操作1 when 值1 then 相應的操作2 .... else 相應的操作 end ----------------------非等值---------------- case when 條件1 then 相應的操作1 when 條件2 then 相應的操作2 .... else 相應的操作 end */
#if表示式
#if(條件表示式,值1,值2) :如果條件表示式的值為true結果為值1,否則為值2
#去重函式
#distinct 欄位名: 去除重複的資料
#分組和過濾
#分組group by #過濾having /* select 欄位名1,欄位名299 from 表名 group by 欄位名1,欄位名2...... */ /* having 過濾條件 having和where的不同點? 1.having後面可以現出組函式,where後面不能出現組函式 2.過濾條件如果可以出現在where或having後面,那麼優先放在where後面(不影響結果) */
#插入和刪除(對錶裡的資料操作)
#插入單行資料 insert into 表名(欄位名1,欄位名2...) values(value1,value2......) #插入多行資料 insert into 表名(欄位名1,欄位名2...) values(value1,value2......),(value1,value2......)..... #如果插入資料時是全欄位插入,那麼表名後面的欄位可以省略 insert into 表名 values(value1,value2......) #基於現有的表中的資料插入到當前表中 #注意:資料型別必須保持一致 insert into 表名(欄位名1,欄位名2....) select 欄位名1,欄位名2..... from 表名 #刪除表資料 delete from 表名; #刪除表中所有內容 delete from 表名 where 過濾條件; #修改表中所有的指定欄位的值 update 表名 set 欄位名1=value1,欄位名2=value2... update 表名 set 欄位名1=value1,欄位名2=value2... where 過濾條件 #刪除的區別 1.truncate刪除的內容不能回滾,delete刪除的內容可以回滾(前提是要開啟事務) 2.如果刪除的資料不用回滾那麼優先truncate因為效率高一些
3.2DDL建立和管理表
#一般操作
#建立庫 create database 庫名; #刪除庫 drop database 庫名; #選庫 use 庫名; #檢視庫中所有的表 show tables; #刪除表 drop table 表名; #查看錶和庫的資訊 show create database/table 庫名/表名; #指定庫的編碼集 create database 庫名 character set '編碼集'; #指定表的編碼集 create table 表名( 欄位名 型別 ....... )character set ‘編碼集’
#建立表
注意常見的資料型別
INT |
從-2^31到2^31-1的整型資料。儲存大小為 4個位元組 |
CHAR(size) |
定長字元資料。若未指定,預設為1個字元,最大長度255 |
VARCHAR(size) |
可變長字元資料,根據字串實際長度儲存,必須指定長度 |
FLOAT(M,D) |
單精度,M=整數位+小數位,D=小數位。 D<=M<=255,0<=D<=30,預設M+D<=6 |
DOUBLE(M,D) |
雙精度。D<=M<=255,0<=D<=30,預設M+D<=15 |
DATE |
日期型資料,格式’YYYY-MM-DD’ |
BLOB |
二進位制形式的長文字資料,最大可達4G |
TEXT |
長文字資料,最大可達4G |
1、白手起家法
create table 表名( id int, name varchar(20), ........ )
2、根據查詢表的結果建立表(沒有原表的約束條件)
create table 表名 select 欄位名1....... from 表名;
#對錶進行操作(增減列和行)
對錶名修改: alter table 原表名 rename to 新表名;
格式: alter table 表名 add/drop/modify/change column .....
#新增列 ALTER TABLE person ADD COLUMN sex CHAR; #修改列的名稱 ALTER TABLE person CHANGE COLUMN age2 age3 CHAR; #修改列的型別 ALTER TABLE person MODIFY COLUMN sex INT; #刪除列 ALTER TABLE person DROP COLUMN birthday;
#清空表
TRUNCATE TABLE emp;
3.3DCL資料庫事務
講事務就要談案例
例子:小A到銀行取錢給小B轉賬1000元
處理過程: 小A賬戶-1000元 ------------ 小B賬戶+1000元
事務完成
但是,當小A賬戶錢扣掉後,銀行停電或出現意外時,事務終止,此時就會出現錯誤,小A的錢扣掉了,但是小B的錢沒加
問題的解決:引入事務概念
當任務開始進行時,開啟事務
任務順利完成時,結束事務,也可以說時提交事務
當出現錯誤時,資料開始回滾到開啟事務的狀態,然小A和小B賬號的資料回到沒有轉賬的狀態
mysql中的事務操作
開啟事務 :set autocommit=false; 提交事務 :commit; 回滾事務 : rollback;
java中事務的處理
try{ 1.開啟事務 : set autocommit=false; 2.AA-100 : 900 ---------發生異常了-------- 3.BB+100 : 執行不了 commit; }catch(Exception e){ 回滾資料; }finally{ set autocommit=true; }
4、約束
#約束的種類
/* NOT NULL 非空約束,規定某個欄位不能為空 UNIQUE 唯一約束,規定某個欄位在整個表中是唯一的 PRIMARY KEY 主鍵(非空且唯一) FOREIGN KEY 外來鍵 DEFAULT 預設值 CHECK 檢查約束(mysql不支援) */
/*
約束: 列級約束 vs 表級約束
列級約束 :只能約束一列。
表級約束 :可以同時約束多列。
注意 :not null和default只有列級約束。
*/
#約束的建立
1、建立表時增加約束
#新增列級約束 CREATE TABLE stu( id INT PRIMARY KEY,#主鍵約束(非空且唯一,只要是表一定有主鍵約束) age INT DEFAULT 18,#如果沒有給該欄位插入資料那麼預設插入18 NAME VARCHAR(20) NOT NULL, sid INT UNIQUE #唯一維束內容不能相同 ); #新增表級約束 CREATE TABLE stu2( id INT, age INT, NAME VARCHAR(20), passwd VARCHAR(20), sid INT, #新增表級約束--可以同時約束多個列 CONSTRAINT stu_id PRIMARY KEY(id), CONSTRAINT stu_name_pwd UNIQUE(NAME,passwd) );
2、表建立成功之後新增約束
/* primary key 新增約束 : alter table 表名 add primary key (欄位名) 修改約束 : alter table 表名 modify 欄位名 型別 primary key 刪除約束 : alter table 表名 drop primary key unique: 新增約束 : alter table 表名 add unique(欄位名) 新增約束 : alter table 表名 add constraint 索引名 unique(欄位名) 修改約束 :alter table 表名 modify 欄位名 型別 unique 刪除約束 :alter table 表名 **drop** index 索引名 */ #表建立成功以後新增約束 CREATE TABLE s( id INT, NAME VARCHAR(20), age INT ) #新增約束 ALTER TABLE s ADD PRIMARY KEY(id); INSERT INTO s(id,NAME,age) VALUES(1,"aa",20); DROP TABLE s; ALTER TABLE s MODIFY id INT PRIMARY KEY; #刪除約束 -- 仍然保留不能為null ALTER TABLE s DROP PRIMARY KEY; DESC s; /* not null 新增約束:alter table 表名 modify 欄位名 欄位型別 not null 刪除約束 :alter table 表名 modify 欄位名 欄位型別 null default: 設定預設約束 : alter table tb_name alter 欄位名 set default value; 刪除預設約束 : alter table tb_name alter 欄位名 **drop** default; foreign key: 新增約束 : ALTER TABLE 表名 ADD [CONSTRAINT emp_dept_id_fk] FOREIGN KEY(dept_id) REFERENCES dept(dept_id); 刪除約束 :alter table 表名 **drop** foreign key 索引名 */
3、外來鍵
#格式 CONSTRAINT 索引名 FOREIGN KEY(欄位名) REFERENCES 主表名(欄位名) #注意事項 建立表:應該先建立主表再建立從表 新增內容:先新增主表再新增從表 刪除內容:先刪除從表再刪除主表 注:有外來鍵約束的主表和從表,刪除主表後,從表也會被刪除 #當建立表後新增外來鍵約束 #刪除索引 ALTER TABLE emp DROP FOREIGN KEY 索引名; #新增約束 ALTER TABLE emp ADD [CONSTRAINT 索引名] FOREIGN KEY(dept_id) REFERENCES dept(dept_id);
5、limit分頁
limit 索引值,資料的條數 #公式: #(當前頁數-1)*每頁條數,每頁條數 注意:索引值是從0開始的 用來分批獲取表中的資料(分頁)