1. 程式人生 > 其它 >mysql基本操作筆記

mysql基本操作筆記

以下是本人在學習過程中接觸過的mysql基本命令,僅做參考

-- 刪除表,然後再建立一個一模一樣的表。比delete命令效率更高
TRUNCATE TABLE stu; -- 建立聯絡的資料庫
CREATE TABLE student1 (
 id INT, -- 編號
 NAME VARCHAR(20), -- 姓名
 age INT, -- 年齡
 sex VARCHAR(5), -- 性別
 address VARCHAR(100), -- 地址
 math INT, -- 數學
 english INT -- 英語
);
INSERT INTO 
    student1(id,NAME,age,sex,address,math,english) 
VALUES (1,'馬雲',55,'','杭州',66,78), (2,'馬化騰',45,'','深圳',98,87), (3,'馬景濤',55,'','香港',56,77), (4,'柳巖',20,'','湖南',76,65), (5,'柳青',20,'','湖南',86,NULL), (6,'劉德華',57,'','香港',99,99), (7,'馬德',22,'','香港',99,99), (8,'德瑪西亞',18,'','南京',56,65); DROP TABLE student1; SELECT * FROM
student1; -- 查詢姓名和年齡 SELECT `name`, -- 姓名 age -- 年齡 FROM student1;-- 學生表 -- 去除重複結果集 SELECT DISTINCT address FROM student1; -- 去重要求查詢的結果集完全一致 SELECT DISTINCT `name`,address FROM student1; -- 計算math和english的分數之和 -- 有null參與計算,結果都為null SELECT `name`,math,english,math+english FROM student1;
-- 解決方案IFNULL(表示式1,表示式2) 如果表示式1為null則顯示錶達式2,反之顯示錶達式1 SELECT `name`,math,english,math+IFNULL(english,0) FROM student1; -- 起別名,可省略AS關鍵字 SELECT `name`,math,english,math+IFNULL(english,0) AS 總分 FROM student1; SELECT `name` 姓名,math 數學,english 英語,math+IFNULL(english,0) 總分 FROM student1; -- 查詢年齡大於20 SELECT * FROM student1 WHERE age >=20; -- 查詢年齡不等於20 SELECT * FROM student1 WHERE age !=20; SELECT * FROM student1 WHERE age <>20; -- 查詢年齡大於等於20 小於等於30 SELECT * FROM student1 WHERE age >=20 && age<=30; SELECT * FROM student1 WHERE age >=20 AND age<=30; SELECT * FROM student1 WHERE age BETWEEN 20 AND 30; -- 查詢年齡為22,18,25歲的資訊 SELECT * FROM student1 WHERE age = 22 || age=18 || age=25; SELECT * FROM student1 WHERE age = 22 OR age=18 OR age=25; SELECT * FROM student1 WHERE age IN (22,18,25); -- 查詢沒有英語成績的資訊 SELECT * FROM student1 WHERE english = NULL; -- 不正確的語句,不能使用等號判斷null SELECT * FROM student1 WHERE english IS NULL; -- 查詢有英語成績的資訊 SELECT * FROM student1 WHERE english IS NOT NULL; -- 查詢姓馬的 SELECT * FROM student1 WHERE `name` LIKE "馬%"; -- 查詢第二字是化的人 SELECT * FROM student1 WHERE `name` LIKE "_化%"; -- 查詢姓名是三個字的人 SELECT * FROM student1 WHERE `name` LIKE "___"; -- 三個_ -- 查詢姓名中包含德的人 SELECT * FROM student1 WHERE `name` LIKE "%%"; -- 排序 SELECT * FROM student1 ORDER BY math; -- 預設升序 SELECT * FROM student1 ORDER BY math DESC; -- 降序 SELECT * FROM student1 ORDER BY math ASC; -- 升序 SELECT * FROM student1 ORDER BY math ASC , english ASC; -- 第二排序條件,只有當第一條件相同是第二條件才生效 -- 所有聚合函式的計算都排除了null值 SELECT COUNT(`name`) 人數 FROM student1; -- 結果為8 SELECT COUNT(english) 人數 FROM student1; -- 結果為7 SELECT COUNT(IFNULL(english,0)) 人數 FROM student1; -- 結果為8 SELECT MAX(math) FROM student1; SELECT MIN(math) FROM student1; SELECT SUM(math) FROM student1; SELECT SUM(english) FROM student1; SELECT AVG(math) FROM student1; SELECT AVG(english) FROM student1; -- 按照性別分別查詢男、女同學的平均分 SELECT sex 性別,AVG(math+english) 總分 FROM student1 GROUP BY sex; SELECT sex 性別,AVG(math) 平均分,COUNT(id) 人數 FROM student1 GROUP BY sex; -- 按照性別分別查詢男、女同學的平均分但不計算分數低於70的 SELECT sex 性別,AVG(math) 平均分,COUNT(id) 人數 FROM student1 WHERE math> 70 GROUP BY sex; -- 按照性別分別查詢男、女同學的平均分但不計算分數低於70的並且不顯示人數小於等於2人的 SELECT sex 性別,AVG(math) 平均分,COUNT(id) 人數 FROM student1 WHERE math> 70 GROUP BY sex HAVING COUNT(id) > 2; -- 分頁公式:開始的索引=(當前的頁碼-1)*每頁顯示的條數 SELECT * FROM student1 LIMIT 0,3; SELECT * FROM student1 LIMIT 3,6; SELECT * FROM student1 LIMIT 6,9; -- 不滿一頁按一頁計 -- limit是mysql的方言,其他資料庫不一定通用 -- 約束 -- 非空約束 -- 建立表示新增約束 CREATE TABLE stu( id INT, `name` VARCHAR(20) NOT NULL -- name非空 ); ALTER TABLE stu MODIFY `name` VARCHAR(20); -- 建立完成後,新增非空約束 ALTER TABLE stu MODIFY `name` VARCHAR(20) NOT NULL; SELECT * FROM stu; DROP TABLE stu; -- 唯一約束 CREATE TABLE stu( id INT , phone_number VARCHAR(20) UNIQUE -- 添加了唯一約束 ); -- 注意:mysql中唯一約束限定的列的值可以有多個null SELECT * FROM stu; -- 刪除唯一約束 -- alter table stu modify phone_number varchar(20);此命令不能刪除唯一約束 ALTER TABLE stu DROP INDEX phone_number; -- 建立表後新增唯一約束 ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE; DROP TABLE stu; -- 主鍵約束 CREATE TABLE stu( id INT PRIMARY KEY, -- 給id新增主鍵約束 `name` VARCHAR(20) ); SELECT * FROM stu; -- 刪除主鍵 -- alter table stu modify id int; 此命令不能清除主鍵約束 ALTER TABLE stu DROP PRIMARY KEY; -- 建立完成後,新增非空約束 ALTER TABLE stu MODIFY id INT PRIMARY KEY; DROP TABLE stu; -- 主鍵自增 CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, -- 給id新增主鍵約束並令其自增 `name` VARCHAR(20) ); SELECT * FROM stu; INSERT INTO stu VALUES(NULL,'ccc'); -- 刪除自動增長 ALTER TABLE stu MODIFY id INT; -- 新增自動增長 ALTER TABLE stu MODIFY id INT AUTO_INCREMENT; -- 注意:自動增長可以不和主鍵一起使用 -- 外來鍵約束 -- 建立表 CREATE TABLE emp ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(30), age INT, dep_name VARCHAR(30), dep_location VARCHAR(30) ); -- 新增資料 INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('張三', 20, '研發部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研發部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研發部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '銷售部', '深圳'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '銷售部', '深圳'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '銷售部', '深圳'); SELECT * FROM emp; -- 資料有冗餘 -- 進行表的拆分 -- 解決方案:分成 2 張表 -- 建立部門表(id,dep_name,dep_location) -- 一方,主表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(20), dep_location VARCHAR(20) ); -- 建立員工表(id,name,age,dep_id) -- 多方,從表 CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT, dep_id INT ,-- 外來鍵對應主表的主鍵 CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) ); -- 新增 2 個部門 INSERT INTO department VALUES(NULL, '研發部','廣州'),(NULL, '銷售部', '深圳'); SELECT * FROM department; -- 新增員工,dep_id 表示員工所在的部門 INSERT INTO employee (NAME, age, dep_id) VALUES ('張三', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2); SELECT * FROM employee; DROP TABLE emp; DROP TABLE department; DROP TABLE employee; -- 刪除外來鍵 ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk; -- 在表建立之後新增外來鍵 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id); -- 級聯操作 -- 級聯更新 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) ON UPDATE CASCADE; -- 級聯刪除 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) ON DELETE CASCADE;