前 言
mysql
# mysql語法--本篇學習都是透過使用Navicat Premium(資料庫管理工具),連接mysql資料.
本篇學習主要有兩個部分:
一、建立用戶,建立資料庫,給予使用者權限,刪除使用者權限。
二、MYSQL中常見的資料類型 三、表-建立表格、主鍵、外鍵 四、資料庫設計的三大範式 |
以下所有程式碼全部在新查詢表裡面使用mysql語法編輯。 ############ #########################1、建立用戶,建立資料庫,給予使用者權限,刪除使用者權限。 #########################
/* SQL 多行註解*/
-- SQL 單行註解
#建立使用者:CREATE USER '使用者名稱'@'主機名稱' IDENTIFIED BY '密碼';
# 主機名稱可以為空,為空預設為%權限,表示所有主機可連線。
給使用者指派權限: GRANT 權限名稱ON 資料庫名稱.表示TO 使用者名稱@主機名稱
#刪除使用者權限#: REVOKE 權限名稱ON 資料庫名稱.表示FROM 使用者名稱@主機名稱;
建立資料庫: CREATE DATABASE [IF NOT EXISTS] 資料庫名稱[CHARACTER SET[= ] 'UTF8'];
<<<如果省略[IF NOT EXISTS] 重複建立資料庫時,會報錯!
查詢本機中所有的資料庫:SHOW DATABASES
↓使用mydb這個資料庫↓,表示下面的查詢都會預設針對mydb資料庫
USE mydb;
查詢資料庫中所有資料表: SHOW TABLES [FROM 資料庫]
一、字元型:
① CHAR(N):固定N個字元長度的字串,如果長度不夠會自動空格補齊;
② VARCHAR(N):儲存可邊長度的字元節。常用的 0~255;
③ TEXT:儲存可變長度的字串。 (常用語發佈文章等大段內容)0~((2^16-1)*10^2);
④ TINYTEXT:0~((2^8-1)*10);
〠 MEDIUMTEXT:0~((2^24-1)*10^3);
⑥ LINGTEXT:0~((2^32-1)*10^4);
⑦ enum(" "女"):枚舉類型,欄位只能容納列舉的資料。
二、整形:
① TINYINT: 無符號0~2^8-1 有符號-2^7~22-1;##^7-1;## ② SMALLINT: 無符號0~2^16-1 有符號-2^15~2^15-1;
③ MEDIUMINT: 無符號0~2^24-1 有符號-2^23~2^23 -1;
④ INT: 無符號0~2^32-1 有符號-2^31~2^31-1 最常用!
⑤ BIGINT: 無符號0~2^64-1 有符號-2^63~2^63-1;
三、浮點型:
## ① FLOAT: 可以精確到小數點後7位有效數字;
② DOUBLE: 可以精確到小數點後15位到16位有效數字;
4、日期時間資料資料類型#
注意:由於時間儲存使用字串或時間戳存儲,所以資料庫中幾乎沒有日期類型。
① DATE:儲存日期與時間資料
② TIMESTAMP:比DATE更精確
##
######
【建立表格】:
CREATE TABLE [IF NOT EXISTS] 表單名稱(
IF NOT EXISTS 可以省略,省略後重複建立報錯.如果不省略,則建立時會偵測表是否已存在,如果表存在則不再執行建立語句
定義列:列名資料類型清單關鍵字
)
常用的列定義關鍵字:
① UNSIGNED: 設定清單為無符號列。只能設定類型為數字類型的欄位
② AUTO_INCREMENT PRIMARY KEY 設定列為自動成長列。自動增長列必須是主鍵。
③ NOT null:設定列為非空白限制
④ UNIQUE:設定唯一性限制。該欄位不能出現重複值。
⑤ DEFAULT: 設定預設值限制。
【主鍵】:# 1、主鍵的注意事項? 主鍵預設為空!主鍵預設唯一性約束!
2中使用中主鍵的方式?
① 在列定義是設定: age SMALLINT(3) PRIMARY KEY,
#【外鍵】
1、設定外鍵有哪些注意事項
①=innodb的資料庫引擎支援外鍵,修改mysql.ini ①=innodb的資料庫引擎支援外鍵,修改mysql.inidefault-storage-engine=innodb的資料庫引擎支援外鍵,修改mysql.ininote類型必須相同。 (數值型要求長度和無符號都相同,字串要求型別相同,長度可以不同。)
③ 設定外鍵的欄位必須要有索引。如果沒有索引,設定外鍵時會自動產生一個索引。 2、設定外鍵的語法?
[CONSTRAINT 外鍵名稱] FOREIGN KEY (外鍵欄位) REFERENCES 參考表(參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update CASCADE]-- 參照欄位) [ON DELETE SET NULL on update 3、外鍵約束的參照完整性操作?
參考作業:當參考表的參考欄位進行刪除或更新是,外鍵表中的外鍵如何應對。
參照作業選用值:restrict 拒絕參考表刪除或更新參考欄位;(預設)
NO ACTION 與restrict一樣,但這個指令只在mysql生效;
欄位時,外鍵表的記錄同步刪除或更新;(外鍵表與參考表同步)
外鍵設為null;
#
CREATE TABLE IF NOT EXISTS tb1(
-- IF NOT EXISTS 可以省略,省略后重复创建报错.如果不省略,则创建时会检测表是否已存在,如果表存在则不再执行创建语句id INT(3),
`name` VARCHAR(255) NOT null, -- name是系统关键字,所以使用反引号``包裹age SMALLINT(3) AUTO_INCREMENT PRIMARY KEY,
lalala INT UNIQUE,
height DOUBLE(3,2) DEFAULT 1.2 -- 设置默认值约束:默认值为1.2-- PRIMARY KEY(age));create table if not exists classes(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
classname VARCHAR(255) NOT NULL );CREATE table if not EXISTS `user`(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
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)-- auto_increment-- 显示表结构SHOW TABLES;-- 显示表内容结构SHOW COLUMNS FROM TB1;-- 现实表的建表语句show create TABLE tb1;-- 删除表DROP TABLE IF EXISTS TB1;DROP TABLE IF EXISTS classes;DROP TABLE IF EXISTS `user`;-- 修改表名 ALTER table tb1 rename tb2;-- 修改字段 列-- alter table 表名 change 旧列名 新列名 列定义 [first|after某一列]-- first 将这个字段调整为表格第一列; after某一列: 将这个字段放到某一列后面alter table tb1 change height width VARCHAR(200) not NULL FIRST;
-- 删除表中某一列alter table tb1 drop name;-- 新增一列:必选部分:alter table tb1 add haha DOUBLE(8,2)alter table tb1 add haha DOUBLE(8,2) DEFAULT 1.2 after age;-- 新增多列:不能调整列的位置,只能插在最后。alter table tb1 add (
ha1 DOUBLE(3,2) UNSIGNED,
ha2 VARCHAR(255)
);-- 同时修改多表明 rename table tb3 to tb1[,`USER`to user1];rename table tb2 to tb1,`USER`to user1;-- 增加主键约束alter table tb1 add PRIMARY KEY(id);-- 删除主键约束alter table tb1 drop PRIMARY KEY;-- 新增唯一性约束ALTER table tb1 add unique key(ha1);-- 删除唯一性约束:由于创建唯一性约束会默认创建索引,所以删除时,需删除索引ALTER table tb1 drop index ha1;
-- 设置默认值约束:前提必须设置default 属性ALTER table tb1 alter ha1 set default 20;-- 删除默认值约束ALTER table tb1 alter haha drop default;-- 设置外键约束 必选部分 alter table tb1 add foreign key (clsid)REFERENCES classes(id)alter table tb1 add constraint waijianming foreign key (clsid)REFERENCES classes(id) ON DELETE SET NULL on update CASCADE;-- 删除外键约束,由于常见外键时会生成索引,所以删除外键后,需要删索引。alter table tb1 drop foreign key waijianming;alter table tb1 drop INDEX waijianming;
SHOW COLUMNS FROM TB1;
登入後複製
rrreee
#
1、第一範式(1NF):資料表中的每一列(欄位),必須是不可分割的最小單元。也就是確保每一列的原子性。
例如:userInfo:'山東省煙臺市13181621008'
# 下台省下180187201867206767676767607207207072020年307370020年3700070年370007370年部分:# 2.第二範式(2NF):滿足1NF後,要求:表中的所有列,都必須依賴主鍵,而不能有任何一列與主鍵沒有關係。 也就是說,一個表只描述一件事情。
例如: 訂單表,只能描述與訂單相關的資訊,所以所有的欄位都必須與訂單ID相關;
與產品ID相關;
因此: 不能在同一張表中同事出現訂單資訊與產品資訊。
3、第三範式(3NF):表中的每一列都要與主鍵直接相關,而不是間接相關。 (表中的每一列,只能依賴主鍵)。
例如:訂單表中,需有顧客相關資訊,分理處顧客表之後。訂單表中,只需要有一個使用者ID即可。而不能有其他的客戶資料。因為,其他的使用者資訊是直接關聯於使用者ID,而不是關聯於訂單ID。
【第二範式與第三範式的本質差異】
在於沒有分出兩張表,第二範式是說一張表包含了多種不同實體的屬性,那麼必須要分成多張表。
第三範式是要求,已經分好了多張表的化,那麼,一張表中只能有另一張表中的ID(主鍵),而不能有其他的任何信息(其他的任何信息,一律用主鍵在另一表查詢)
#
學習時候的筆記,可能會有一些錯誤的地方,歡迎各位的批評指點。
反思,複盤,每天收穫一點---------------------期待更好的自己
#
以上是學習基礎mysql語法的詳細內容。更多資訊請關注PHP中文網其他相關文章!