mysql常用操作(一)

【數據庫設計的三大范式】
1、第一范式(1NF):數據表中的每一列,必須是不可拆分的最小單元。也就是確保每一列的原子性。
例如:userInfo:'山東省煙臺市 18865518189' 應拆分成 userAds='山東省煙臺市' userTel='18865518189'
2、第二范式(2NF):滿足1NF后,要求:表中的所有列都必須依賴于主鍵,而不能有任何一列與主鍵沒有關系,也就是說,一個表只描述一件事情;
例如:訂單表,只能描述訂單相關的信息,所以所有的字段都必須與訂單ID相關
產品表,只能描述產品相關的信息,所以所有的字段都必須與產品ID相關
因此,不能在一張表中同時出現訂單信息與產品信息
3、第三范式(1NF):滿足2NF后,要求:表中每一列都要與主鍵直接相關,而不是間接相關,(表中的每一列,
只能依賴于主鍵)
例如:訂單表中,需要有客戶相關信息,在分離出客戶表之后,訂單表中,只需要有一個客戶id即可。
而不能有其他的客戶信息。因為其他的用戶信息是直接關聯于用戶ID,而不是關聯于訂單ID

【第二范式與第三范式的本質區別】
在于有沒有分出兩張表,第二范式是說一張表中包含了多種不同實體的屬性,必須要分成多張表,
第三范式是要求已經分好了多張表的話,那么一張表中只能有另一張表的ID,而不能有其他的任何信息,(其他的任何信息,一律用主鍵在另一張表查詢)

創建表

CREATE TABLE IF NOT EXISTS tb1( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(255) NOT NULL, age SMALLINT UNIQUE,height DOUBLE(3,2) DEFAULT 1.2
-- PRIMARY KEY(id)
);

?

定義列:列名 數據類型 列定義關鍵字
name是系統關鍵字,所以使用反引號包裹
IF NOT EXISTS可以省略,省略后若表已存在,重復創建時會報錯
常見的列定義關鍵字:
UNSIGNED: 設置列 為 無符號列,只能設置類型為數字類型的列
PRIMARY KEY:設置主鍵約束
AUTO_INCREMENT:設置為自動增長列,自動增長列必須是主鍵

【主鍵】
1、主鍵的注意事項:主鍵默認非空!只有逐漸才能設置自動增長(逐漸不一定自增,自增一定是主鍵)
2、設置方式:① 在列定義是設置:id INT UNSIGNED PRIMARY KEY
② 在列定義完成后設置:PRIMARY KEY(id)
PRIMARY KEY:設置主鍵約束
NOT NULL:設置列為非空約束
UNIQUE:設置唯一性約束。該字段不能出現重復值
DEFAULT:設置默認值約束,height DOUBLE(3,2) DEFAULT 1.2 height如果不輸入,默認1.2
FOREIGN ?KEY:設置外鍵約束。

【外鍵】
1、設置外鍵有哪些注意事項?
① 只有INNODB的數據庫引擎支持外鍵,修改my.ini文件
② 外鍵與參照列的數據類型必須相同(數值型要求長度和無符號都相同,字符串要求類型相同,長度可不同)
③ 設置外鍵的字段必須要有索引,如果沒有索引,設置外鍵時會自動生成索引,刪除該外鍵時,需刪除索引
2、設置外鍵的語法
[CONSTRAINT 外鍵名] FOREIGN KEY(外鍵字段) REFERENCES 參照表(參照字段)[ON DELETE SET NULL ON UPDATE CASCADE]-- 設置參照完整性
3、外鍵約束的參照操作
參照操作:當對參照表的參照字段進行刪除或更新時,外檢表中的外鍵如何應對。
參照操作可選值:RESTRICT 拒絕參照表刪除或更新參照字段
NO ACTION 與 RESTRICT相同,但這個指令只在MySQL有效
CASCADE 刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除更新
SET NULL 刪除或更新參照表的參照字段時,外鍵表的外鍵設為NULL

-- 修改表名 ALTER TABLE 舊表名 RENAME [TO] 新表名;
ALTER TABLE tb2 RENAME TO tb3;-- 同時修改多表 RENAME TABLE tb3 TO tb1[,`USER` to user1];
RENAME TABLE tb3 TO tb1,`USER` to user1;-- 修改字段 列
-- ALTER TABLE 表名 CHANGE 舊列名 新列名 列定義 [FIRST|AFTER 某一列];
-- FIRET:將這個字段調整為表格第一列  AFTER 某一列:將這個字段放到某一列后面
ALTER TABLE tb1 CHANGE `name` `username` VARCHAR(200) NOT NULL AFTER age;-- 只修改列定義,不能改名
ALTER TABLE tb1 MODIFY `username` VARCHAR(200) NOT NULL AFTER age;-- 刪除表中某一列
ALTER TABLE tb1 DROP height;-- 新增一列,default可選,往后可選
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) [ON DELETE SET NULL ON UPDATE CASCADE];ALTER TABLE tb1 ADD FOREIGN KEY(clsid) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE;-- 刪除外鍵約束,由于創建外鍵時會默認創建索引,所以刪除外鍵后,要刪除索引
ALTER TABLE tb1 DROP FOREIGN KEY user_fk_classes;
ALTER TABLE tb1 DROP INDEX user_fk_classes;

?

【SQL語句的組成】
DML 數據操作語言(插入、刪除和修改數據庫中的數據) INSERT UPDATE DELETE
DQL 數據查詢語言(用來查詢數據庫中的數據) SELECT
DCL 數據控制語言(用來控制存取許可、存取權限等) GRANT REVOKE
DDL 數據定義語言(用來建立數據庫、數據庫對象和定義表的列) CREATE DROP

-- 數據插入語句 INSERT
-- INSERT [INTO] 表名 [列名] VALUES (列值)[,(列值),……]
-- 注意:如果省略列名,則后面的列值必須為所有的列賦值,包括自增列和默認列;如果不省略列名,則后面的列值需要與前面的列名一一對應;并且需要給所有非NULL列賦值
INSERT INTO tb1 (username,age,sex) VALUES ("張三",12,"女");
INSERT tb1 VALUES (7,"張三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("張三",12,"女"),("張三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("張張",12,"女");

?

-- 數據更新語句
-- UPDATE 表名 SET 列名=列值[,列名=列值,……] [WHILE 條件]
-- WHERE條件可以省略,但是表示修改表中所有的行
UPDATE tb1 SET sex="男"
UPDATE tb1 SET username="李二狗",age=18,sex="女" WHERE id=8

【常見where條件判斷】
1、關系運算符:> < <> = != >= <=
2、邏輯運算:NOT AND OR
3、ISNULL(字段) 檢測是否為空
SELECT * FROM tb1 WHERE ISNULL(age); --所有年齡為空的用戶
4、BETWEEN …… AND ……介于兩個值之間
SELECT * FROM tb1 WHERE age BETWEEN 10 AND 13;
5、IN 在某些值之間的數據
SELECT * FROM tb1 WHERE id in(1,3,5,7,9);
6、LIKE :相似匹配
① 相似匹配時,使用%表示任意字符個數(0到多個)
SELECT * FROM tb1 WHERE username LIKE "張%"; 用張開頭
SELECT * FROM tb1 WHERE username LIKE "%張%"; (任意位置包含張)
SELECT * FROM tb1 WHERE username LIKE "%張"; 用張結尾
② 相似匹配時,使用_表示一個字符的個數
SELECT * FROM tb1 WHERE username LIKE "_張%"; 第二個字是張
7、EXISTS(子查詢語句):如果子查詢語句返回數據>=1行,EXISTS返回true,否則返回false
SELECT * FROM tb1 WHERE EXISTS(SELECT * FROM tb2);--如果tb2返回至少1行數據,則條件成立,返回tb1
8、ALL(子查詢):子查詢返回的數據,需要全部滿足,才能成立
SELECT * FROM tb1 WHERE username !=ALL(SELECT username FROM tb1 WHERE id>7);--用戶名 不能等于 子查詢返回用戶名列表中的任意一個
9、ALL(子查詢):子查詢返回的數據,滿足其中一個,即可成立
SELECT * FROM tb1 WHERE username =ANY(SELECT username FROM tb1 WHERE id>7);--用戶名 等于 子查詢返回用戶名列表中的任意一個


刪除表中數據
DELETE [FROM] tb1 WHERE username LIKE "_張%";

數據查詢語句
SELECT 列名,[列名,……] FROM 表名 ORDER BY id 排序的列名 ASC/DESC;
SELECT * 表示查詢所有字段
ORDER BY表示對查出的數據進行排序,必須在where后面

-- 列表達式
-- 根據已有的列,查詢出來的結果,我們使用case結構虛擬出來的列,稱為列表達式-- AS關鍵字
-- 用于給列名起別名,AS關鍵字還可以省略
SELECT username AS '名字',sex AS '性別',age,( -- 給username列起別名“名字” , sex列起別名“性別”CASE -- case表示判斷的開始WHEN sex="男" THEN 1 -- 如果查詢出sex是男,則虛擬的列表達式的值就是1WHEN sex="女" THEN 2ELSE 3 -- 上面所有都不成立時,列表達式值為3END -- END表示判斷的結束
) AS sexno FROM tb1; -- 給虛擬出的這一列,起別名叫sexno-- DISTINCT 對查詢后的結果去重(消除重復列)

?

轉載于:https://www.cnblogs.com/pandapang/p/7078304.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392305.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pmp 成本估算準確高_如何更準確地估算JavaScript中文章的閱讀時間

pmp 成本估算準確高by Pritish Vaidya通過Pritish Vaidya 準確估算JavaScript中篇文章的閱讀時間 (Accurate estimation of read time for Medium articles in JavaScript) 介紹 (Introduction) Read Time Estimate is the estimation of the time taken by the reader to rea…

Android數據適配-ExpandableListView

Android中ListView的用法基本上學的時候都會使用&#xff0c;其中可以使用ArrayAdapter&#xff0c;SimpleAdapter&#xff0c;BaseAdapter去實現&#xff0c;這次主要使用的ExpandableListView展示一種兩層的效果&#xff0c;ExpandableListView是android中可以實現下拉list的…

JavaWeb 命名規則

命名規范命名規范命名規范命名規范 本規范主要針對java開發制定的規范項目命名項目命名項目命名項目命名 項目創建&#xff0c;名稱所有字母均小寫&#xff0c;組合方式為&#xff1a;com.company.projectName.component.hiberarchy。1. projectName&#xff1a;項目名稱2. com…

多元概率密度_利用多元論把握事件概率

多元概率密度Humans have plenty of cognitive strengths, but one area that most of us struggle with is estimating, explaining and preparing for improbable events. This theme underpins two of Nassim Taleb’s major works: Fooled by Randomness and The Black Swa…

nginx php訪問日志配置,nginx php-fpm 輸出php錯誤日志的配置方法

由于nginx僅是一個web服務器&#xff0c;因此nginx的access日志只有對訪問頁面的記錄&#xff0c;不會有php 的 error log信息。nginx把對php的請求發給php-fpm fastcgi進程來處理&#xff0c;默認的php-fpm只會輸出php-fpm的錯誤信息&#xff0c;在php-fpm的errors log里也看不…

阿里的技術愿景_技術技能的另一面:領域知識和長期愿景

阿里的技術愿景by Sihui Huang黃思慧 技術技能的另一面&#xff1a;領域知識和長期愿景 (The other side of technical skill: domain knowledge and long-term vision) When we first start our careers as software engineers, we tend to focus on improving our coding sk…

leetcode 721. 賬戶合并(并查集)

給定一個列表 accounts&#xff0c;每個元素 accounts[i] 是一個字符串列表&#xff0c;其中第一個元素 accounts[i][0] 是 名稱 (name)&#xff0c;其余元素是 emails 表示該賬戶的郵箱地址。 現在&#xff0c;我們想合并這些賬戶。如果兩個賬戶都有一些共同的郵箱地址&#…

es6重點筆記:數值,函數和數組

本篇全是重點&#xff0c;撿常用的懟&#xff0c;數值的擴展比較少&#xff0c;所以和函數放一起&#xff1a; 一&#xff0c;數值 1&#xff0c;Number.EPSILON&#xff1a;用來檢測浮點數的計算&#xff0c;如果誤差小于這個&#xff0c;就無誤 2&#xff0c;Math.trunc()&am…

SMSSMS垃圾郵件檢測器的專業攻擊

Note: The methodology behind the approach discussed in this post stems from a collaborative publication between myself and Irene Anthi.注意&#xff1a; 本文討論的方法背后的方法來自 我本人和 Irene Anthi 之間 的 合作出版物 。 介紹 (INTRODUCTION) Spam SMS te…

php pdo 緩沖,PDO支持數據緩存_PHP教程

/*** 作者&#xff1a;初十* QQ&#xff1a;345610000*/class myPDO extends PDO{public $cache_Dir null; //緩存目錄public $cache_expireTime 7200; //緩存時間&#xff0c;默認兩小時//帶緩存的查詢public function cquery($sql){//緩存存放總目錄if ($this->cache_Di…

mooc課程下載_如何使用十大商學院的免費課程制作MOOC“ MBA”

mooc課程下載by Laurie Pickard通過勞里皮卡德(Laurie Pickard) 如何使用十大商學院的免費課程制作MOOC“ MBA” (How to make a MOOC “MBA” using free courses from Top 10 business schools) Back when massive open online courses (MOOCs) were new, I started a proje…

leetcode 1584. 連接所有點的最小費用(并查集)

給你一個points 數組&#xff0c;表示 2D 平面上的一些點&#xff0c;其中 points[i] [xi, yi] 。 連接點 [xi, yi] 和點 [xj, yj] 的費用為它們之間的 曼哈頓距離 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的絕對值。 請你返回將所有點連接的最小…

Nagios學習實踐系列

其實上篇Nagios學習實踐系列——基本安裝篇只是安裝了Nagios基本組件&#xff0c;雖然能夠打開主頁&#xff0c;但是如果不配置相關配置文件文件&#xff0c;那么左邊菜單很多頁面都打不開&#xff0c;相當于只是一個空殼子。接下來&#xff0c;我們來學習研究一下Nagios的配置…

在Salesforce中處理Email的發送

在Salesforce中可以用自帶的 Messaging 的 sendEmail 方法去處理Email的發送 請看如下一段簡單代碼&#xff1a; public boolean TextFormat {get;set;} public string EmailTo {get;set;} public string EmailCC {get;set;} public string EmailBCC {get;set;} public string …

kvm vnc的使用,鼠標漂移等

1.宿主機的vnc&#xff08;virtual Network Computing&#xff09;配置 安裝rpm包 yum install tigervnc-server -y 為了防止干擾直接關閉防火墻和selinux /etc/init.d/iptables stop setenforce 0 配置vnc密碼和啟動vncserver服務 vncpasswd vncserver 2.客戶機的vnc 在qemu…

php深淺拷貝,JavaScript 中的深淺拷貝

工作中經常會遇到需要復制 JavaScript 數據的時候&#xff0c;遇到 bug 時實在令人頭疼&#xff1b;面試中也經常會被問到如何實現一個數據的深淺拷貝&#xff0c;但是你對其中的原理清晰嗎&#xff1f;一起來看一下吧&#xff01;一、為什么會有深淺拷貝想要更加透徹的理解為什…

使用Python進行地理編碼和反向地理編碼

Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location. To put it simply, Geocoding is converting physical address to latitude and longitude.地理編碼是獲取輸入文本(例如地址或地點…

java開發簡歷編寫_如何通過幾個簡單的步驟編寫出色的初級開發人員簡歷

java開發簡歷編寫So you’ve seen your dream junior developer role advertised, and are thinking about applying. It’s time to write that Resume! Nothing better than sitting down to a blank piece of paper and not knowing how to start, right?因此&#xff0c;您…

leetcode 628. 三個數的最大乘積(排序)

給定一個整型數組&#xff0c;在數組中找出由三個數組成的最大乘積&#xff0c;并輸出這個乘積。 示例 1: 輸入: [1,2,3] 輸出: 6 解題思路 最大的乘積可能有兩種情況 1.兩個最小負數和一個最大正數 2.三個最大正數 代碼 class Solution {public int maximumProduct(int[…

[Object-C語言隨筆之三] 類的創建和實例化以及函數的添加和調用!

上一小節的隨筆寫了常用的打印以及很基礎的數據類型的定義方式&#xff0c;今天就來一起學習下如何創建類與函數的一些隨筆&#xff1b; 首先類的創建&#xff1a;在Xcode下&#xff0c;菜單File&#xff0d;New File&#xff0c;然后出現選擇class模板&#xff0c;如下圖&…