mysql创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句
【數據庫設計的三大范式】
1.第一范式(1NF First Normal Fromate):數據表中的每一列(字段),必須是不可拆分的最小單元。也就是確保每一列的原子性。
例如: userInfo: ‘山東省煙臺市 13181621008’
=> userAds:’山東省煙臺市’
tel:’13181621008′
2.第二范式(2NF):滿足1NF后,要求:表中所有的列,都必須功能依賴于主鍵,而不能有任何一列與主鍵沒有關系。(一張表值描述一件事情)
3.第三范式(3NF):滿足2NF后,要求:表中的每一列都要與主鍵直接相關,而不是間接相關。(表中的每一列,只能依賴于主鍵)
例如:訂單表中,需要有客戶相關信息,在分離出客戶表之后。訂單表中,只需要有一個用戶ID
即可。而不能有其他的客戶信息。因為,其他的用戶信息是直接關聯于用戶ID。而不是關聯于訂單ID。
【第二范式與第三范式的本質區別】
在于有沒有分出兩張表,第二范式是說一張表中包含了多種不同實體的屬性,那么必須要分成多張表。第三范式要求,已經分好了多張表的話,那么,一張表中只能有另一張表中的ID(主鍵),而不能有其他的信息(其他的信息,一律使用主鍵在另一種查詢)。
*/
USE mydb;
— 創建表:
定義列:列名 數據類型 列定義關鍵字
常用的列定義關鍵字:
UNSIGNED:設置列為無符號列。只能設置類型為數字類型的列
AUTO_INCREMENT :設置自動增長列。 自動增長列必須是主鍵。
【主鍵】
1.主鍵的注意事項? ① 主鍵默認非空! ② 只有主鍵才能設置自動增長(主鍵不一定自動增長,自動增長必須是主鍵)
2.設置主鍵的方式? ① 在列定義時設置:id INT PRIMARY KEY
② 在列定義完成后設置: PRIMARY KEY(id)
UNIQUE:設置唯一性約束。該字段不能出現重復值。
NOT NULL:設置非空約束。該字段不能為空。
DEFAULT:設置默認值約束。hight DOUBLE(3,2) DEFAULT(1.2) height如果不輸入默認1.2
FOREIGN KEY:設置外鍵約束。
【外鍵】
1、設置外鍵有哪些注意事項?
1、設置外鍵有哪些注意事項?
只有innoDB的數據庫引擎支持外鍵。
修改my.ini文件設置default-storage-engine=INNODB
②外鍵與參照列的數據類型必須相同
③設置外鍵的字段必須要有索引。如果沒有索引,設置外鍵時會自動生成一個索引
[數值型要求長度和無符號都相同,字符串要求類型相同,長度可以不同]
2、設置外鍵的語法?
[CONSTRAINT 外鍵名] FOREIGN KEY(外鍵字段)REFERENCES 參照表(參照字段)
[ON DELETE SET NULL ON UPDATE CASCADE] — 設置參照完整性
3、外鍵約束的參照操作。
參照操作:當對參照表的參照字段進行刪除或更新時,外鍵表中的外鍵如何應對。
參照操作可選值:DESTRTCT 拒絕參照表刪除或更新參照字段
NO ACTION 與 RESTRICT相同,但這個指令只在MySQL生效
CASCADE 刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除更新
SET NULL 刪除或更新參照表的參照字段時,外鍵表的外鍵設為NULL
*/
CREATE TABLE IF NOT EXISTS tb1(
-- IF NOT EXISTS 可以省略,省略后面重復創建報錯。如果不省略,則創建時表是否已存在,如果表存在則不再執行創建
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255), -- name 是系統關鍵字,所以使用反引號``包裹
age SMALLINT UNIQUE,
hight DOUBLE(3,2) DEFAULT(1.2)
-- PRIMARY KEY(id)
);
DROP TABLE IF EXISTS CLASSES;
CREATE TABLE IF NOT EXISTS CLASSES(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
CLASSNAME VARCHAR(255) NOT NULL
);
DROP TABLE IF EXISTS `USER`;
CREATE TABLE IF NOT EXISTS `USER`(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
CLSID INT UNSIGNED NOT NULL,
`NAME` VARCHAR(255) NOT NULL,
CONSTRAINT user_fk_classes FOREIGN KEY (clsid) REFERENCES classes(id)
);
SHOW COLUMNS FROM CLASSES;
SHOW TABLES;
— 顯示表結構
SHOW COLUMNS FROM tb1;
— 顯示表的建表語句
SHOW CREATE TABLES 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 `NAME` `USERNAME` VARCHAR(200) NOT NULL AFTER AGE;
— MODIFY 只修改定義,不能改名
ALTER TABLE TB1 MODIFY `USERNAME` 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(id);
— 刪除主鍵約束
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;
— 設置外鍵約束 必選部分:ALTER TABLE tb1 ADD FOREIGN KEY (CLSID) REFERENCES CLASSES(ID)
ALTER TABLE tb1 ADD FOREIGN KEY (CLSID) REFERENCES CLASSES(ID) ON DELETE SET NULL ON UPDATE CASCADE;
— 刪除外鍵約束。由于創建外鍵時會默認
ALTER TABLE tb1 DROP FOREIGN KEY TB1_FK_CLASSES;
SHOW COLUMNS FROM TB1;
SHOW TABLES;
總結
以上是生活随笔為你收集整理的mysql创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2台路由器用网线连接线和无线连接设置方法
- 下一篇: 西南大学位置在什么地方(西南大学有哪些王