數據庫基礎和三大範式以及基本的增刪改查命令

 所謂數據庫就是建庫 建表 建約束。
① 肯定實體 就是肯定有幾張表
② 肯定表的屬性
規範化的三個級別:數據庫設計的三大範式!!!!
第一範式(1NF):原子性:數據表中的每一列是不可拆分的最小單元,也就是確保每一列的原子性。
例如:userInfo:'山東省煙臺市 11233445667'
拆分紅: ‘山東省煙臺市’ 和‘'11233445667「:mysql


第二範式(2NF):知足1NF後,要求:表中的全部列都依賴於主鍵,而不能有任何一列與主鍵沒有關係。
也就是說每張表只能描述一件事情。
例如:訂單表只能描述訂單相關的信息,因此全部的字段都必須與訂單id相關;
產品表,只能描述產品相關的信息,因此全部的字段都必須與產品ID相關。sql


第三範式(3NF):知足2NF後要求是表中的全部字段只與主鍵相關(依賴於主鍵),而不依賴於其餘屬性,
確保每一列都只與主鍵直接相關,而不是間接相關。
例如:訂單表中,須要有客戶相關信息,在分離出客戶表以後。訂單表中值須要有一個用戶ID便可,
而不能有其餘的客戶信息。由於,其餘的用戶信息是直接關聯於用戶ID,而不是關聯於訂單ID,
【第二範式與第三範式的本質區別在於有沒有分出兩張表來】:第二範式是說一張表中包含了多種不一樣試題的屬性,那麼唏噓分紅多
張表,第三範式是在於已經分好了多張表的話,那麼,一張表中只能有另外一張表的ID(主鍵),而不能
有其餘的任何信息(其餘的信息,一概用主鍵在另外一表查詢)

數據庫

 

-- 建立表
-- IF NOT EXISTS 能夠省略 省略後重復建立時會包報錯。若是省略,則建立時會檢測表是否已存在,若是表存在則再也不執行建立語句。
-- 定義列:列名 數據類型 列定義關鍵字
-- 經常使用的列定義關鍵字:
-- UNSIGNED:設置列爲無符號列,只能設置類型爲數字類型列。
-- AUTO_INCREMENT:設置列爲自動增加列。自動增加列必須是主鍵。數據庫設計


-- PRIMARY KEY:設置主鍵約束。
-- 【主鍵】
-- 一、主鍵的注意事項?主鍵默認爲空!主鍵默認惟一性約束!
-- 只有主鍵才能設置自動增加(主鍵不必定自增,自增的一定是主鍵)。
-- 二、設置主鍵的方式?① 在列定義時設置:id INT PRIMARY KEY ② 在定義完成後設置:PRIMARY KEY(id);
-- UNIQUE:設置惟一性約束。該字段不能出現重複值。例如:age SMALLINT UNIQUE,
-- DEFAULT:設置默認值約束。height DOUBLE(3,2) DEFAULT 1.2 heighit 若是不輸入默認爲1.2
-- NOT NULL:設置非空約束,該字段不能爲空。設計

-- FOREIGN KEY:設置外鍵約束
-- 【外鍵】
-- 一、設置外鍵有哪些注意事項
-- ① 只有innodb的數據引擎支持外鍵
-- 修改my.ini文件設置default——storage_engine
-- ② 外鍵與參照列的數據類型必須相同,字符串要求類型相同,長度能夠不一樣。
-- 二、設置外鍵的語法
-- CONSTRAINT 外鍵名 FOREIGN KEY (外鍵字段) REFERENCES 參照表(參照字段)
-- ON DELETE SET NULL ON UPDATE CASCADE 設置參照完整性操做:
-- 三、外鍵約束的參照操做
-- 參照操做:當對參照表的參照字段進行刪除或者是更新時,外鍵表中的外鍵如何應對rest

-- 參照操做可選值:restrict 拒絕參照表刪除或者是更新參照字段。
-- NOACTION 與RESTRICT相同,但這個指令只在MySQL生效
-- CASCADE 刪除 或更新殘渣表的參照字段,外鍵表的記錄同步刪除更新
-- SET NULL 刪除或更新參照表的參照字段,外鍵表的外鍵設爲NULL
--
USE mydb;
-- 刪除表
DROP TABLE IF EXISTS tb1;索引

CREATE TABLE IF NOT EXISTS tb1(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255),-- name是關鍵字,因此使用反引號``包裹
age SMALLINT,
height DOUBLE(3,2) DEFAULT 1.2
-- PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS CLASSES(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
classname VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS `USER`(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
clsid INT UNSIGNED,
`name` VARCHAR(255) NOT null ,
CONSTRAINT user_fk_classes FOREIGN KEY (clsid) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE
)字符串

/*SQY 多行註釋 */
-- SQL單行註釋
-- 建立用戶:CREATE USER ‘用戶名’[@'主機名'] IDENTIFIED BY ‘密碼’
-- 主機名能夠爲空,爲空默認爲%權限,表示全部主機可連
CREATE USER 'jredu'@'localhost' IDENTIFIED BY 'jredu';同步


-- GRANT 給用戶分配權限:GRANT 權限名 ON 數據庫名.表名 TO '用戶'@'主機';
-- ALL表示全部權限 *.*表示全部用戶中的全部表
GRANT ALL ON *.* TO 'jredu'@'localhost';產品

GRANT SELECT ON mysql.'user' TO 'jredu'@'localhost';

-- REVOKE FROM 刪除用戶權限
REVOKE ALL ON *.* FROM 'jredu'@'localhost';

-- 建立數據庫,CREATE DATABASE[IF NOT EXISTS] 數據庫名 [CHARACTER SET [=]'UTF8'] []表明可寫可省
-- 若是省略IF NOT EXISTS在重複建立數據庫時,會報錯
CREATE DATABASE IF NOT EXISTS myDB3 CHARACTER SET 'UTF8';

-- 刪除數據庫 DROP DATABASE [IF EXISTS] 數據庫名
DROP DATABASE IF EXISTS mydb2;

-- 查詢本機中全部的數據庫
SHOW DATABASES;

-- 使用mydb這個數據庫 表示下面的查詢都將默認針對mydb數據庫。
USE mydb;


-- 顯示數據庫中的全部數據表格SHOW TABLES[FROM 數據庫]
SHOW TABLES FROM mysql;


/*
mysql中常見的數據類型:

1、字符型:
① CHAR(N):表示的是固定長度的字符串,若是長度不夠會自動空格補齊。N的範圍是0-255
② VARCHAR():存儲可變長度的字符串。最爲經常使用。大約是->0-(2^16-1)*10;
③ TEXT: 存儲可變長度的字符串(經常使用與發佈文章的等大段內容)。0-65535*10^2;
④ TINYTEXT:0 ~(2^8-1)*10 ;
⑤ MEDIUMTEXT: 2~(2^24-1) * 10^3;
⑥ LONGTEXT: 0~(2^32-1) * 10^4;
⑦ enum("男","女"):枚舉類型,字段只能容納枚舉出的數據。

2、整形
① TINYINT:無符號 0-2^8-1; 有符號 -2^7 ~ 2^7-1;
② SMALLINT:無符號 0~2^16-1 有符號 -2^15 ~ 2^15-1;
③ MEDIUMINT:無符號 0~2^24-1 有符號 -2^23 ~ 2^23-1;
④ INT:無符號 -2^32-1 有符號 -2^31 ~ 2^31-1;
⑤ BIGINT:無符號 0~2^64-1 有符號-2^63 ~ 2^63-1;
3、浮點型
①FLOAT 能夠精確到小數點後七位有效數字
②DOUBLE 能夠精確到小數點後十五位到十六位數字
4、日期和時間數據類型
注意:因爲時間存儲使用字符串或者是時間戳存儲,因此數據庫中幾乎不用日期類型。
①DATE:存儲日期和時間數據
②TIMESTAMP:比DATE更精準。


*/

 

  

SHOW COLUMN FROM classes;

SHOW TABLES;
-- 顯示數據表結構
SHOW COLUMNS FROM tb1;
-- 顯示錶
SHOW CREATE TABLE tb1;
-- 刪除表
DROP TABLE IF EXISTS tb1;

-- 修改表名 ALTER TABLE 舊錶名 RENAME [TO]新表名;
ALTER TABLE tb1 RENAME tb2;
-- 同時修改多表名 RENAME TABLE tb3 TO tb1[,`user`TO user1...];
RENAME TABLE tb3 TO tb1,`user`TO user1;

--
-- 修改字段 列
-- ALTER TABLE 表名 CHANGE 舊列名 新列名 列定義 [FIRST|AFTER 某一列]
-- FIRST:將這個字段調整爲表格第一列 AFTER 某一列:將這個字段放到某一列後面。
ALTER TABLE tb1 CHANGE `uername` `uername`VARCHAR(200) NOT NULL AFTER age;
-- MODIFY 只修改列定義,不能更名
ALTER TABLE tb1 MODIFY `uername` VARCHAR(200) NOT NULL AFTER age;
-- 刪除表中某一列
ALTER TABLE tb1 DROP height;
-- 新增一列 必選部分:ALTER TABLE tb1 ADD height DOUBLE(8,2)
ALTER TABLE tb1 ADD height DOUBLE(8,2)DEFAULT 1.2 AFTER age;
-- 新增多列 不能調整列的位置,只能插在最後。
ALTER TABLE tb1 ADD(
weight DOUBLE(3,2) UNSIGNED,
school VARCHAR(255)

);


-- 增長主鍵約束
ALTER TABLE tb1 ADD PRIMARY KEY(age);

-- 刪除主鍵約束 刪去自增
ALTER TABLE tb1 DROP PRIMARY KEY;
-- 新增惟一性約束
ALTER TABLE tb1 ADD UNIQUE KEY(username);
-- 刪除惟一性約束:因爲建立惟一性約束會建立索引,因此刪除時,須要刪除索引
ALTER TABLE tb1 DROP INDEX username;

-- 設置默認值約束ALTER TABLE tb1 ALTER age SET DEFAULT 20;-- 刪除默認值約束 ALTER TABLE tb1 ALTER age DROP DEFAULT;SHOW COLUMN FROM tb1;SHOW TABLES;

相關文章
相關標籤/搜索