Mysql數據庫2
- 什麼是SQL?
- SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是專爲數據庫而建立的操作命令集,是一種功能齊全的數據庫語言。在使用它時,只需要發出“做什麼”的命令,“怎麼做”是不用使用者考慮的。
- DML(Data Manipulation Language數據操作語言)
- 查詢、插入、刪除和修改數據庫中的數據;
- SELECT、INSERT、 UPDATE 、DELETE等;
- DCL(Data Control Language數據控制語言)
- 用來控制存取許可、存取權限等;
- GRANT、REVOKE 等;
- DDL(Data Definition Language數據定義語言)
- 用來建立數據庫、數據庫對象和定義其列
- CREATE TABLE 、DROP TABLE、ALTER TABLE 等
- 功能函數
- 日期函數、數學函數、字符函數、系統函數等
- CHAR(size)
- 保存固定長度的字符串(可包含字母、數字以及特殊字符)。
- 在括號中指定字符串的長度。最多 255 個字符。
- VARCHAR(size)
- 保存可變長度的字符串(可包含字母、數字以及特殊字符)。
- 在括號中指定字符串的最大長度。最多 255 個字符。
- 註釋:如果值的長度大於 255,則被轉換爲 TEXT 類型。
- TINYTEXT
- 存放最大長度爲 255 個字符的字符串。
- TEXT
- 存放最大長度爲 65,535 個字符的字符串。
- BLOB
- 用於 BLOBs (Binary Large OBjects)。
- 存放最多 65,535 字節的數據。
- MEDIUMTEXT
- 存放最大長度爲 16,777,215 個字符的字符串。
- MEDIUMBLOB
- 用於 BLOBs (Binary Large OBjects)。
- 存放最多 16,777,215 字節的數據。
- LONGTEXT
- 存放最大長度爲 4,294,967,295 個字符的字符串。
- LONGBLOB
- 用於 BLOBs (Binary Large OBjects)。
- 存放最多 4,294,967,295 字節的數據。
- ENUM(x,y,z,etc.)
- Number 類型:數據類型 描述
- TINYINT(size)
- -128 到 127 常規。
- 0 到 255 無符號*。在括號中規定最大位數。
- SMALLINT(size)
- -32768 到 32767 常規。
- 0 到 65535 無符號*。在括號中規定最大位數。
- MEDIUMINT(size)
- -8388608 到 8388607 普通。
- 0 to 16777215 無符號*。在括號中規定最大位數。
- INT(size)
- -2147483648 到 2147483647 常規。
- 0 到 4294967295 無符號*。
- 在括號中規定最大位數。
- BIGINT(size)
- -9223372036854775808 到 9223372036854775807 常規。
- 0 到 18446744073709551615 無符號*。在括號中規定最大位數。
- FLOAT(size,d)
- 帶有浮動小數點的小數字。
- 在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
- DOUBLE(size,d)
- 帶有浮動小數點的大數字。
- 在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
- DECIMAL(size,d)
- 作爲字符串存儲的 DOUBLE 類型,允許固定的小數點。
- 這些整數類型擁有額外的選項 UNSIGNED。通常,整數可以是負數或正數。如果添加 UNSIGNED 屬性,那麼範圍將從 0 開始,而不是某個負數。
- Date 類型:數據類型 描述
- DATE()
- 日期。格式:YYYY-MM-DD 註釋:支持的範圍是從 '1000-01-01' 到 '9999-12-31'
- DATETIME()
- 日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS
- 註釋:支持的範圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
- TIMESTAMP()
- 時間戳。TIMESTAMP 值使用 Unix 紀元('1970-01-01 00:00:00' UTC) 至今的描述來存儲。格式:YYYY-MM-DD HH:MM:SS
- 註釋:支持的範圍是從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
- TIME()
- 時間。格式:HH:MM:SS 註釋:支持的範圍是從 '-838:59:59' 到 '838:59:59'
- YEAR()
- 2 位或 4 位格式的年。
- 註釋:4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。
- 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它們的工作方式很不同。在 Insert 或 Update 查詢中,TIMESTAMP 自動把自身設置爲當前的日期和時間。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
- Decimal
- 用於財務數據,定點數。
- SQL常用語法:
- 創建數據庫:
- Create database ‘數據庫名’ character set utf8;
- 刪除數據庫
- Drop database ‘數據庫名’;
- 建立一個表USER,其由四列組成,第一列屬性爲非空,並做爲主鍵,並自增
-
CREATE TABLE USER ( ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY, NAME VARCHAR (20), PASSWORD VARCHAR (50), SEX VARCHAR (2) ) ;
- 刪除一個表:
- Drop table user;
- PRIMARY KEY
- 主碼約束(主鍵)
- UNIQUE
- 唯一性約束
- NOT NULL
- 非空值約束
- AUTO_INCREMENT
- 用於整數列默認自增1
- UNSIGNED
- 無符號整數
- DEFAULT default_value
- 默認值約束
- DEFAULT cur_timestamp
- 創建新記錄時默認保存當前時間(僅適用timestamp數據列)
- ON UPDATE cur_timestamp
- 修改記錄時默認保存當前時間(僅適用timestamp數據列)
- CHARACTER SET name
- 指定字符集(僅適用字符串)
- 主鍵與外鍵
- 數據表之間的關聯/引用關係是依靠具體的主鍵(primary key)和外鍵(foreign key)建立起來的。
- 主鍵:幫助MySQL以最快的速度把一條特點的數據記錄的位置確定下來。
- 主鍵必須是唯一的
- 主鍵應該是緊湊的,因此整數類型比較適合
- 外鍵:引用另外一個數據表的某條記錄。
- 外鍵列類型儘可能與主鍵列類型保持一致
- 外鍵列應該加上NOT NULL
- 主表和從表
-
-- 創建一個學生表 create table student( sid int not null auto_increment, name varchar(20) not null, primary key(sid) ); -- 分數表 create table score( cid int not null auto_increment primary key, score int, sid int, foreign key(sid) references student(sid) );
-
- 主表和從表明細
- 當主表中沒有對應的記錄時,不能將記錄添加到子表
- 成績表中不能出現在學員信息表中不存在的學號;
- 不能更改主表中的值而導致子表中的記錄孤立
- 把學員信息表中的學號改變了,學員成績表中的學號也應當隨之改變;
- 子表存在與主表對應的記錄,不能從主表中刪除該行
- 不能把有成績的學員刪除了
- 刪除主表前,先刪子表
- 先刪學員成績表、後刪除學員信息表
- 當主表中沒有對應的記錄時,不能將記錄添加到子表
- 最少性
- 儘量選擇單個鍵作爲主鍵
- 穩定性
- 儘量選擇數值更新少的列作爲主鍵