數據庫
概念
數據的集合
目前流行的數據庫存儲形式爲:關係型數據庫
流行數據庫軟件有MySql,SqlServer,Oracle,DB2
注意
現如今大部分數據庫都屬於關係數據庫,其關係架構理論是1970年由IBM研究員提出,他將數據以大家所熟知的表格方式進行存儲與呈現,在以數學的集合論爲基礎,將表格與表格之間建立關係,以處理複雜的數據關係。
MySQL概述
Mysql基礎
MySQL由瑞典MySQL AB公司開發,目前輸入Oracle公司。
MySQL是一個開源的關係型數據庫管理系統。
MySQL分爲社區版和企業版。
MySQL支持各種平臺,例如:windows,linux,MacOS,HP-UX,IBMAIX等。
MySQL目錄結構
bin目錄,存儲可執行文件
data目錄,存儲數據文件
include目錄,存儲包含的頭文件
lib目錄,存儲庫文件
share目錄,錯誤消息和字符集文件
啓動MySQL服務
運行cmd
輸入命令:net start mysql
停止MySQL服務:net stop mysql
登錄MySQL
命令:“mysql -v”
輸出版本信息
從控制檯進入mysql
Mysql –uroot -p
MySQL常用命令
顯示當前服務器版本
SELECT VERSION();
顯示當前用戶
SELECT USER();
MySQL語句的規範
關鍵字與函數名稱全部大寫。
數據庫名稱,表名稱,字段名稱全部小寫
SQL語句必須以分號結尾
數據庫相關操作
創建
創建數據庫
Create database db01;
查看所有數據庫
Show databases;
查看已創建的數據庫
Show create database db01;
修改
修改數據庫編碼方式
ALTER DATABASE db01 CHARACTER SET gbk/utf8 ;
刪除
刪除數據庫
DROP DATABASE db01;
數據類型和數據表
數據類型是指列,存儲過程參數表達式和局部變量的數據特徵,它決定了數據的存儲格式,代表了不同的信息類型。
數據表
數據表是數據庫中最重要的組成部分之一,是其他對象的基礎。
USE
打開數據庫 USE 數據庫名稱。
創建數據表
CREATE TABLE table_name(
….
…
)
例如:
CREATE TABLE t01(
username VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) );
SHOW TABLES
查看數據中的表
SHOW COLUMNS FROM t01
查看t01的表結構
記錄的插入與查找
插入記錄
INSERT [INTO] tbl_name [(col_name, ...)] VALUES (val,...);
例如:
完整寫法
INSERT t01 (username, age, salary)VALUES('Jack', 28, 7110.12);
簡寫
INSERT t01 VALUES ('Tom', 25, 7321.65);
注意:
如果採用簡寫,所有的字段必須賦值。
記錄查找
SELECT expr,...FROMtbl_name
查找所有記錄
SELECT * FROM t01;
後面講解複雜的查找方式
空值與非空
NULL,字段值可以爲空
NOT NULL,字段值不能爲空
例如:
CREATE TABLE t02(
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED NULL
);
插入記錄時,字段username不能爲空,而字段age可以爲空。
AUTO_INCREMENT
自動編號,且必須與主鍵組合使用
默認情況下,起始值爲1,每次的增加量爲1
這樣做,可以保證記錄的唯一性
例如:
CREATE TABLE t03(
id SMALLINT UNSIGNED AUTO_INCREMENT,
username VARCHAR(20) NOT NULL
);
創建失敗,需要聲明主鍵
PRIMARY KEY
主鍵約束
每張數據表只能存在一個主鍵
主鍵保證記錄的唯一性
主鍵自動爲NOT NULL
例如:
CREATE TABLE t03(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL
);
注意:
AUTO_INCREMENT 字段不一定定義爲主鍵,但是主鍵一定要和AUTO_INCREMENT一起使用。
主鍵允許賦值,但是不允許賦相同的值。
UNIQUE KEY
唯一約束
唯一約束可以保證記錄的唯一性
唯一約束的字段可以爲空值(NULL)
每張數據表可以存在多個唯一約束
例如:
CREATE TABLE t04( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARYKEY,
username VARCHAR(20) NOT NULL UNIQUE KEY
age TINYINT UNSIGNED
);
測試:
插入兩條名字一樣的記錄會報錯
DEFAULT
默認值
當插入記錄時,如果沒有明確爲字段賦值,則自動賦予默認值。
例如:
CREATE TABLE t05( id SMALLINTAUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
sex ENUM('1', '2', '3') DEFAULT '3'
);
如果在插入記錄時,不填寫sex字段的值,那麼系統自動賦默認值'3'
約束
保證數據的完整性和一致性
約束分爲表級約束和列級約束
如果針對一個字段進行約束,稱爲列級約束
如果針對兩個或兩個以上的字段進行約束,稱爲表級約束
約束包含主鍵約束,唯一約束,默認約束,非空約束,外鍵約束
PRIMARY KEY UNIQUE KEY DEFAULT NOT NULL FOREIGN KEY
· 外鍵約束
保持數據一致性,完整性。
實現一對一或一對多關係。
外鍵約束的要求
父表和子表必須使用相同的存儲引擎。
數據表的存儲引擎只能爲InnoDB。
外鍵列和參照列必須具有相似的數據類型,其中數字的長度或是否有符號位必須相同;而字符的長度則可以不同。
外鍵列和參考列必須創建索引。如果外鍵列不存在索引的話,MySQL將自動創建索引。
FOREIGN KEY (pid) REFERENCES province (id) );
修改數據表
添加列
ALTER TABLE user ADD age TINYINT UNSIGNED;
ALTER TABLE user ADD password VARCHAR(20) AFTERname;
刪除列
ALTER TABLE user DROP password;
添加主鍵約束
ALTER TABLE tbl_name ADD
PRIMARY KEY (index_col_name,...)
例如:
先創建一張表user02
CREATE TABLE user02( id TINYINT UNSIGNED,
name VARCHAR(20) NOT NULL);
然後指定id爲主鍵
ALTER TABLE user02 ADD PRIMARY KEY (id);
添加外鍵約束
ALTER TABLE tbl_name ADD FOREIGN KEY (index_col_name)
reference_definition
例如:
ALTER TABLE user02 ADD FOREIGN KEY (pid) REFERENCES
province (id);
刪除主鍵約束
ALTER TABLE tbl_name DROP PRIMARY KEY
修改字段數據類型
ALTER TABLE tbl_name MODIFY COLUMN name TEXT
記錄操作(增刪改查)
插入記錄
INSERT[INTO] tbl_name [(col_name,...)] {VALUES|VALUE}
({expr | DEFAULT},...),(...),...
例如:
創建一張表格
CREATETABLE student (
id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
age TINYINT );
插入一條記錄
INSERTstudent (name, score)VALUES('Jack', 100);
INSERT student VALUES(NULL, 'Rico', 90);
更新記錄
所有記錄的分數更新爲60
UPDATE student SET score = 60;
--
將id=1的字段更新爲90
UPDATE student SET score = 90 WHERE id = 1;
刪除記錄(單表刪除)
DELETE FROM student WHERE id = 2;