1. 程式人生 > 實用技巧 >Web移動端 自適應縮放介面

Web移動端 自適應縮放介面

MYSQL

一.基本的命令列操作

show databases;--檢視所有的資料庫
use school;--切換資料庫
show tables;--檢視資料庫中所有的表
describe student;--顯示資料庫中表的資訊;查看錶結構
create database test;--建立資料庫    
exit;--退出連線
--單行註釋
/*
多行註釋
*/

DDL定義 DML操作 DQL查詢 DCL控制

二.操作資料庫

操作資料庫->操作資料庫中的表->操作資料庫中的資料

操作資料庫

mysql關鍵字不區分大小寫

1).建立資料庫

create database [if not exists
] shool;

2).刪除資料庫

drop database [if exists] shool;

3).使用資料庫

use shool;

4).檢視資料庫

show databases;

資料庫的列型別

1)數值

  • tinyint 十分小的資料 1個位元組
  • smallint 較小的資料 2個位元組
  • mediumint 中等大小的書庫 3個位元組
  • int 標準的整數 4個位元組
  • bigint 較大的資料 8個位元組
  • float 浮點數 4個位元組
  • double 浮點數 8個位元組(精度問題)
  • decimal 字串形式的浮點數 金融計算一般使用decimal

2)字串

  • char 字串固定大小 0-255
  • varchar 可變字串 0-65535
  • tinyrext 微型文字 2^8-1
  • text 文字串 2^16-1

3)時間日期

  • date YYYY-MM-DD 日期格式
  • time HH:mm:ss 時間格式
  • datetime YYYY-MM-DD HH:mm:ss 最常用的時間格式
  • timestamp 時間戳 1970.1.1到現在的毫秒數
  • year 年份

4)null

  • 沒有值,未知

建立表

create table [if not exists] `teacher`(
   `id` int(4) not null auto_increment comment '學號',
   `name` 
varchar(30) not null default '匿名' comment '姓名',
primary key (`id`) )engine=innodb default charset=utf8

格式:

create table [if not exists] `表名`(
   `欄位名` 列型別 [屬性] [索引] [註釋],
   `欄位名` 列型別 [屬性] [索引] [註釋],
   `欄位名` 列型別 [屬性] [索引] [註釋]
)[表型別][字符集][註釋]
show create database school;--檢視建立資料庫的語句
show create table student;--檢視建立表的語句
desc student;--查看錶的結構

資料表的型別

資料庫引擎:

MYISAM INNODB(現在預設)
事務支援 不支援 支援
資料行鎖定 不支援 支援
外來鍵約束 不支援 支援
全文索引 支援 不支援
表空間大小 較小 較大,約為2倍
優點 節約空間,速度較快 安全性高,事務處理,多表多使用者操作

所有的資料庫檔案都存在data目錄下,本質還是檔案儲存

  • innodb:在資料庫表中只有一個*.frm檔案,以及上級目錄下的ibdata1檔案
  • myisam對應檔案:*.frm檔案:表結構定義檔案;*.MYD:資料檔案;*.MYI索引檔案

修改刪除表

1)修改表名

alter table student rename as student1;

2)增加欄位

alter table student add age int(10);

3)修改表字段

alter table student modify age varchar(10);--修改欄位約束,無法重新命名
alter table student change age age1 int(1);--重新命名欄位,無法修改約束

4)刪除表字段

alter table student drop age1;

5)刪除表

drop table if exists student;

所有的創建於刪除操作加上判斷;

三.資料管理

1)外來鍵

ALTER TABLE student ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

2)DML語言

資料操作語言

  • insert
    INSERT INTO teacher (id,NAME) VALUES(1,'dengwenxiong');--插入多個欄位
    INSERT INTO teacher(name) VALUES('hxd'),('gdx');--同一欄位插入多個值

    必須一一對應

  • update
    UPDATE teacher SET NAME="dyw" WHERE id=1;--更改一個屬性
    UPDATE teacher SET NAME="dyw",email='[email protected]' WHERE id=1;--更改多個屬性
  • delete
    delete from student where id=1;
  • truncate
    truncate student;--完全清空一個表

delete與truncate的區別:

  • 相同點:都能刪除資料,都不會刪除表結構
  • 不同點:truncate重新設定自增列,計數器歸零 ,而delete不會;truncate不會影響事務

使用delete刪除後,重啟資料庫,若使用innodb引擎,則自增列會從1開始(存在記憶體中的,斷電就沒了),而使用Myisam引擎,則會繼續從上一個自增量開始(存在檔案中的,不會丟失)

四.DQL查詢資料

資料查詢語言

SELECT * FROM student
-- 起別名
SELECT `studentno` AS 學號 FROM student
-- 函式 Concat(a,b)字串拼接
SELECT CONCAT('學號:',studentno) AS 新學號 FROM student
-- 去重
SELECT DISTINCT studentno FROM result
-- 查詢系統版本
SELECT VERSION()

模糊查詢

運算子

betweeen a between b and c

a在b,c之間結果為真

like a like b 如果a匹配b,結果為真
in a in(a1,a2,..) a為其中一個值,結果為真
-- 查詢姓鄧的
-- %代表0到任意個字元,_代表一個字元
SELECT studentnum FROM student WHERE studentnum LIKE '鄧%'
SELECT studentnum FROM student WHERE studentnum LIKE '鄧_'
-- 查詢學號為110,111,112的學生姓名,in跟著的是具體的值
SELECT studentnum FROM student WHERE studentno IN(110,111,112)

聯表查詢

七種連線

-- 內聯inner join;左聯left join;右聯right join
SELECT s.studentno,studentnum,subjectno,subjectresult FROM student AS s INNER JOIN result AS r ON s.studentnum=r.studentnum

自連線

把一張表拆為兩張一樣表

SELECT a.categroyname AS '',b.categoryname AS '' FROM category AS a,category AS b WHERE a.categoryid=b.category.pid

分頁limit和排序order by

升序asc,降序desc

limit 起始值,頁面大小 ;limit 0,5 顯示1-5條資料,第n頁:limit (n-1)*pagesize,pagesize ;n為當前頁,pagesize為頁面大小

子查詢

在where查詢條件裡巢狀使用select(先查裡面的查詢,再查詢外面的查詢)

五.常用函式

-- 數學運算
SELECT ABS(-9) -- 絕對值
SELECT CEILING(9.6) -- 向上取整
SELECT FLOOR(9.6) -- 向下取整
SELECT RAND() -- 返回一個0-1的隨機數
SELECT SIGN(-10) -- 判斷一個數的符號,0返回0,負數返回-1,正數返回1
-- 字串函式
SELECT CHAR_LENGTH('abcd') -- 字串長度
SELECT CONCAT('w','b','d') -- 拼接字串
SELECT INSERT('abcd',1,3,'789') -- 替換字串
SELECT LOWER() -- 小寫
SELECT UPPER() -- 大寫
SELECT REPLACE('abcd','b','e') -- 替換指定的字串
SELECT SUBSTR('abcdef',3,2) -- 擷取字串
SELECT REVERSE('abcdf') -- 反轉字串
-- 時間日期函式
SELECT NOW() -- 當前時間
SELECT LOCALTIME()-- 本地時間

六.聚合函式

count() 計數
sum() 求和
avg() 平均值
max() 最大值
min() 最小值
SELECT COUNT(studentname) FROM student -- 會忽略null值
SELECT COUNT(*) FROM student -- 不會忽略null值
SELECT COUNT(1) FROM student -- 不會忽略null值

group by 分組 having 分組的條件

加密MD5('密碼')

七.事務

要麼都成功要麼都失敗

事務四個要素:acid

  • Atomicity原子性:要麼都成功要麼都失敗
  • Consistency一致性:事務前後資料儲存一致性
  • Durability永續性:事務一旦提交不可逆,會持久化到資料庫中
  • Isolation隔離性:資料庫為每個使用者開啟事務不能被其他事務干擾
set autocommit=0 -- 關閉事務自動提交
set sutocommit=1 -- 開啟事務自動提交(預設)
-- 事務開啟
start transaction -- 標記一個事務的開始,這之後的sql都在一個事務中
-- 提交:持久化
commit
-- 回滾:回到原來的樣子
rollback
-- 事務結束
set autocommit=1 -- 開啟自動提交
-- 設定儲存點
savepoint 儲存點
-- 回滾到儲存點
rollback to savepoint 儲存點名 
-- 撤銷儲存點
release savepoint 儲存點名

八.索引

索引是幫助Mysql高效獲取資料的資料結構

索引分類

  • 主鍵索引(primary key):唯一的標識,主鍵不可重複,只能有一個列作為主鍵
  • 唯一索引(unique key):避免出現重複的列,唯一索引可以重複,多個列都可以標識
  • 常規索引(key/index):磨人的
  • 全文索引(fulltext):特定的資料庫引擎才有,myisam,快速定位資料

建立索引的方式

Btree是innodb的預設資料結構

九.許可權管理

-- 建立使用者
create user hhh identified by '12345'
-- 修改密碼(當前使用者)
set password =password('24536')
-- 修改指定使用者密碼
set password for hhh =password('1273')
-- 重新命名
rename user hhh to xxx 
-- 授權(庫.表)
grant all privileges on *.* to hhh
-- 查詢許可權
show grants for hhh
-- 撤銷許可權
revoke all privileges on *.* from hhh

十.三大正規化

第一正規化(1NF):

原子性:保證每一列不可再分

第二正規化(2NF):

前提:滿足第一正規化

每張表描述一個事情

第三正規化(3NF):

前提:滿足第一正規化和第二正規化

確保資料表中的沒列資料都和主鍵直接相關,而不能間接相關