日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

又学MySQL

發布時間:2025/3/12 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 又学MySQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

又學MySQL

一、數據庫的基本操作

1.1、啟動

net start mysql -- 啟動

1.2、斷開

net stop mysql -- 斷開

1.3、連接

mysql -uroot -p -- 連接數據庫 Enter password:******

1.4、退出

exit -- 退出

1.5、創建數據庫

create database 數據庫名;-- 例如,創建一個叫db1的數據庫 show create database db1;

1.6、刪除數據庫

drop datebase 數據庫名-- 例如,刪除db1數據庫 drop database db1;

1.7、切換數據庫

use 數據庫名-- 例如,使用db1數據庫 use db1;

1.8、查詢出MySQL中所有的數據庫

show databases;

1.9、查看當前使用的數據庫

select database();

二、數據表的基本操作

2.1、創建數據表

create table 表名(字段1 字段類型,字段2 字段類型,…字段n 字段類型 );-- 例如,創建一個student表create table student(id int,name varchar(20),gender varchar(10),birthday date);

2.2、查看數據表

show tables; -- 查看當前數據庫中所有表 show create table student; -- 查student表的基本信息 desc student; -- 查看student表的字段信息 -- PS:此處desc是describe的縮寫,用法: desc 表名/查詢語句

2.3、修改數據表

alter table student rename to stu; -- 修改student表名為stu alter table stu change name sname varchar(10); -- 修改stu表name字段名為sname alter table stu modify sname int; -- 修改sname字段數據類型為int -- PS:此處modify意為修改、調整的意思。 alter table stu add address varchar(50); -- 增加address字段 alter table stu drop address; -- 刪除stu表中address字段

2.4、刪除數據表

drop table 表名;-- 例如,刪除stu數據表 drop table stu;

三、數據表的約束

約束條件說明
PRIMARY KEY主鍵約束用于唯一標識對應的記錄
FOREIGN KEY外鍵約束
NOT NULL非空約束
UNIQUE唯一性約束
DEFAULT默認值約束,用于設置字段的默認值

以上五種約束條件針對表中字段進行限制從而保證數據表中數據的正確性和唯一性。換句話說,表的約束實際上就是表中數據的限制條件。

3.1、主鍵約束

主鍵約束即primary key用于唯一的標識表中的每一行。被標識為主鍵的數據在表中是唯一的且其值不能為空。這點類似于我們每個人都有一個身份證號,并且這個身份證號是唯一的。

-- 主鍵約束基本語法: 字段名 數據類型 primary key;-- 設置主鍵約束(primary key)的第一種方式 create table student(id int primary key,name varchar(20) );-- 設置主鍵約束(primary key)的第二種方式 create table student01(id int,name varchar(20),primary key(id) );

3.2、非空約束

非空約束即 NOT NULL指的是字段的值不能為空

-- 基本的語法格式 字段名 數據類型 NOT NULL;-- 例如,給name字段加上非空約束 create table student02(id int,name varchar(20) not null );

3.3、默認值約束

默認值約束即DEFAULT用于給數據表中的字段指定默認值,即當在表中插入一條新記錄時若未給該字段賦值,那么,數據庫系統會自動為這個字段插人默認值

-- 基本的語法格式 字段名 數據類型 DEFAULT 默認值;-- 例如,給字段gender添加默認值約束 create table student03(id int,name varchar(20),gender varchar(10) default 'male' );

3.4、唯一性約束

唯一性約束即UNIQUE用于保證數據表中字段的唯一性,即表中字段的值不能重復出現

-- 基本的語法格式 字段名 數據類型 UNIQUE;-- 例如,給字段name添加唯一性約束 create table student04(id int,name varchar(20) unique );

3.5、外鍵約束

外鍵約束即FOREIGN KEY常用于多張表之間的約束

-- 在創建數據表時語法如下: CONSTRAINT 外鍵名 FOREIGN KEY (從表外鍵字段) REFERENCES 主表 (主鍵字段) -- 將創建數據表創號后語法如下: ALTER TABLE 從表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (從表外鍵字段) REFERENCES 主表 (主鍵字段); -- PS:constraint意為限制-- 例如: -- 創建一個學生表 create table student05(id int primary key,name varchar(20) ); -- 創建一個班級表 create table class(classid int primary key,studentid int ); -- 學生表作為主表,班級表作為副表設置外鍵 alter table class add constraint fk_class_studentid foreign key(studentid) references student05(id);

建立外鍵是為了保證數據的完整和統一性。但是,如果主表中的數據被刪除或修改從表中對應的數據,從表中對應的數據也應該被刪除,否則數據庫中會存在很多無意義的垃圾數據

-- 刪除外鍵 alter table 從表名 drop foreign key 外鍵名;-- 例如,刪除班級表外鍵 alter table class drop foreign key fk_class_studentid;

關于外鍵約束需要注意的細節

1、從表里的外鍵通常為主表的主鍵
2、從表里外鍵的數據類型必須與主表中主鍵的數據類型一致
3、主表發生變化時應注意主表與從表的數據一致性問題

四、數據表插入數據

在MySQL通過INSERT語句向數據表中插入數據

create table student(id int,name varchar(30),age int,gender varchar(30));

4.1、為表中所有字段插入數據

每個字段與其值是嚴格一一對應的。也就是說:每個值、值的順序、值的類型必須與對應的字段相匹配。但是,各字段也無須與其在表中定義的順序一致,它們只要與 VALUES中值的順序一致即可

-- 基本的語法格式 INSERT INTO 表名(字段名1,字段名2,...) VALUES (1,2,...);-- 例如,向學生表中插入一條學生信息 insert into student (id,name,age,gender) values (1,'bob',16,'male');

4.2、為表中指定字段插入數據

插入數據的方法基本和為表中所有字段插入數據,一樣,只是需要插入的字段由你自己指定

-- 基本的語法格式 INSERT INTO 表名(字段名1,字段名2,...) VALUES (1,2,...);-- 例如,向學生表中插入一條學生信息 insert into student (id,name) values (2,'lak');

4.3、同時插入多條記錄

在該方式中:(字段名1,字段名2,…)是可選的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的記錄,該記錄可有多條并且每條記錄之間用逗號隔開

-- 基本的語法格式 INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (1,2,),(1,2,),...;-- 例如,向學生表中插入多條學生信息 insert into student (id,name,age,gender) values (3,'lucy',17,'female'),(4,'jack',19,'male'),(5,'tom',18,'male');

五、更新數據

在MySQL通過UPDATE語句向數據表中更新數據

create table student(id int,name varchar(30),age int,gender varchar(30));-- 基本的語法格式-- 在該語法中:字段名1、字段名2…用于指定要更新的字段名稱;值1、值 2…用于表示字段的新數據;WHERE 條件表達式 是可選的,它用于指定更新數據需要滿足的條件 UPDATE 表名 SET 字段名1=1[,字段名2 =2,] [WHERE 條件表達式];-- 1、UPDATE更新部分數據 -- 將name為tom的記錄的age設置為20并將其gender設置為female update student set age=20,gender='female' where name='tom';-- 2、UPDATE更新全部數據 -- 將所有記錄的age設置為18 update student set age=18;

六、刪除數據

在MySQL通過DELETE語句刪除數據表中的數據

TRUNCATE 刪除數據 truncate table student; -- 創建學生表create table student(id int,name varchar(30),age int,gender varchar(30));-- 插入數據 insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male') ,(7,'sad',13,'female'),(8,'sam',14,'male');-- 基本的語法格式-- 在該語法中:表名用于指定要執行刪除操作的表;[WHERE 條件表達式]為可選參數用于指定刪除的條件。 DELETE FROM 表名 [WHERE 條件表達式];-- 1、DELETE刪除部分數據 -- 刪除age等于14的所有記錄 delete from student where age=14;-- 2、DELETE刪除全部數據 -- 刪除student表中的所有記錄 delete from student;-- 3、TRUNCATE刪除數據 truncate table student;

TRUNCATE和DETELE的區別
TRUNCATE和DETELE都能實現刪除表中的所有數據的功能,但兩者也是有區別的:
1、DELETE語句后可跟WHERE子句,可通過指定WHERE子句中的條件表達式只刪除滿足條件的部分記錄;但是,TRUNCATE語句只能用于刪除表中的所有記錄。
2、使用TRUNCATE語句刪除表中的數據后,再次向表中添加記錄時自動增加字段的默認初始值重新由1開始;使用DELETE語句刪除表中所有記錄后,再次向表中添加記錄時自動增加字段的值為刪除時該字段的最大值加1
3、DELETE語句是DML語句,TRUNCATE語句通常被認為是DDL語句

七、MySQL數據表查詢語句

-- 創建數據庫 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb;-- 創建student表 CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT 'male' );-- 向student表插入數據 INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

7.1、簡單查詢

不含where的select語句

-- 1、查詢所有字段 select * from student;-- 2、查詢指定字段(sid、sname) select sid,sname from student;-- 3、常數的查詢日期標記 select sid,sname,'2021-03-02' from student;-- 4、從查詢結果中過濾重復數據(DISTINCT) -- 注:在SELECT查詢語句中DISTINCT關鍵字只能用在第一個所查列名之前(distinct必須放在開頭)。 select distinct gender from student;-- 5、在SELECT查詢語句中使用加減乘除運算符,例如,查詢學生10年后的年齡select sname,age+10 from student;

7.2、條件查詢

關系運算符說明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
-- 1、使用關系運算符查詢 -- 查詢年齡等于或大于17的學生的信息 select * from student where age>=17;-- 2、使用IN關鍵字查詢 -- IN關鍵字用于判斷某個字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,則將字段所在的記錄將査詢出來 -- 例如,查詢sid為S_1002和S_1003的學生信息 select * from student where sid in ('S_1002','S_1003'); -- 查詢sid為S_1001以外的學生的信息 select * from student where sid not in ('S_1001');-- 3、使用BETWEEN AND關鍵字查詢 -- BETWEEN AND用于判斷某個字段的值是否在指定的范圍之內。如果字段的值在指定范圍內,則將所在的記錄將查詢出來 -- 例如,查詢15到18歲的學生信息 select * from student where age between 15 and 18; -- 查詢不是15到18歲的學生信息 select * from student where age not between 15 and 18;-- 4、使用空值查詢 -- 在MySQL中,使用 IS NULL關鍵字判斷字段的值是否為空值。請注意:空值NULL不同于0,也不同于空字符串 -- 例如,查詢sname不為空值的學生信息 select * from student where sname is not null;-- 5、使用AND關鍵字查詢 -- 在MySQL中可使用AND關鍵字可以連接兩個或者多個查詢條件。 -- 例如,查詢年紀大于15且性別為male的學生信息 select * from student where age>15 and gender='male';-- 6、使用OR關鍵字查詢 -- 在使用SELECT語句查詢數據時可使用OR關鍵字連接多個査詢條件。在使用OR關鍵字時,只要記錄滿足其中任意一個條件就會被查詢出來 -- 例如,查詢年紀大于15或者性別為male的學生信息 select * from student where age>15 or gender='male';-- 7、使用LIKE關鍵字查詢進行模糊查詢(%、_) -- MySQL中可使用LIKE關鍵字可以判斷兩個字符串是否相匹配 -- 例如,查詢sname中與wang匹配的學生信息 select * from student where sname like 'wang';-- 查詢學生姓名以li開始的記錄,使用%(%用于匹配任意長度的字符串。例如,字符串“a%”匹配以字符a開始任意長度的字符串) select * from student where sname like 'li%'; -- 查詢學生姓名以g結尾的記錄 select * from student where sname like '%g'; -- 查詢學生姓名包含s的記錄 select * from student where sname like '%s%';-- 查詢學生姓名以zx開頭且長度為4的記錄,使用_(下劃線通配符只匹配單個字符,如果要匹配多個字符,需要連續使用多個下劃線通配符。例如,字符串“ab_”匹配以字符串“ab”開始長度為3的字符串,如abc、abp等等) select * from student where sname like 'zx__';-- 8、使用LIMIT限制查詢結果的數量 -- 當執行查詢數據時可能會返回很多條記錄,而用戶需要的數據可能只是其中的一條或者幾條 -- 例如,查詢學生表中前三行同學,從第0行開始,查詢3行數據 select * from student limit 3; -- limit 3 等價于limit 0,3 -- 查詢學生表從索引從6取10行數據的同 select * from student limit 5,10;-- 9、使用GROUP BY進行分組查詢 -- GROUP BY 子句可像切蛋糕一樣將表中的數據進行分組,再進行查詢等操作。換言之,可通俗地理解為:通過GROUP BY將原來的表拆分成了幾張小表 -- 創建數據庫 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb;-- 創建員工表 CREATE TABLE employee (id int,name varchar(50),salary int,departmentnumber int );-- 向員工表中插入數據 INSERT INTO employee values(1,'tome',2000,1001); INSERT INTO employee values(2,'lucy',9000,1002); INSERT INTO employee values(3,'joke',5000,1003); INSERT INTO employee values(4,'wang',3000,1004); INSERT INTO employee values(5,'chen',3000,1001); INSERT INTO employee values(6,'yukt',7000,1002); INSERT INTO employee values(7,'rett',6000,1003); INSERT INTO employee values(8,'mujk',4000,1004); INSERT INTO employee values(9,'poik',3000,1001);-- GROUP BY和聚合函數一起使用 -- 例如,統計各部門員工個數 select count(*), departmentnumber from employee group by departmentnumber; -- 例如,統計部門編號大于1001的各部門員工個數 select count(*), departmentnumber from employee where departmentnumber>1001 group by departmentnumber;-- GROUP BY和聚合函數以及HAVING一起使用 -- 例如,統計工資總和大于8000的部門 select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;-- 10、使用ORDER BY對查詢結果排序 -- 從表中査詢出來的數據可能是無序的或者其排列順序不是我們期望的。為此,我們可以使用ORDER BY對查詢結果進行排序 -- 基本的語法格式,在該語法中:字段名1、字段名2是查詢結果排序的依據;參數 ASC表示按照升序排序,DESC表示按照降序排序;默認情況下,按照ASC方式排序。通常情況下,ORDER BY子句位于整個SELECT語句的末尾 SELECT 字段名1,字段名2,FROM 表名 ORDER BY 字段名1 [ASCDESC],字段名2 [ASC | DESC];-- 例如,查詢所有學生并按照年紀大小升序排列 select * from employee order by salary asc; -- 例如,查詢所有學生并按照年紀大小降序排列 select * from employee order by salary desc;

7.3、多表連接查詢

-- 1、交叉連接查詢 -- 交叉連接返回的結果是被連接的兩個表中所有數據行的笛卡兒積;比如:集合A={a,b},集合B={0,1,2},則集合A和B的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,交叉連接也被稱為笛卡爾連接-- 基本的語法格式,在該語法中:CROSS JOIN用于連接兩個要查詢的表,通過該語句可以查詢兩個表中所有的數據組合。 SELECT * FROM1 CROSS JOIN2;-- 2、內連接查詢 -- 內連接(Inner Join)又稱簡單連接或自然連接,是一種非常常見的連接查詢。內連接使用比較運算符對兩個表中的數據進行比較并列出與連接條件匹配的數據行,組合成新的 記錄。也就是說在內連接查詢中只有滿足條件的記錄才能出現在查詢結果中 -- 基本的語法格式,在該語法中:INNER JOIN用于連接兩個表,ON來指定連接條件;其中INNER可以省略。 SELECT 查詢字段1,查詢字段2, ... FROM1 [INNER] JOIN2 ON1.關系字段=2.關系字段-- 若存在數據庫mydb則刪除 DROP DATABASE IF EXISTS mydb; -- 創建數據庫mydb CREATE DATABASE mydb; -- 選擇數據庫mydb USE mydb;-- 創建部門表 CREATE TABLE department(did int (4) NOT NULL PRIMARY KEY, dname varchar(20) );-- 創建員工表 CREATE TABLE employee (eid int (4) NOT NULL PRIMARY KEY, ename varchar (20), eage int (2), departmentid int (4) NOT NULL );-- 向部門表插入數據 INSERT INTO department VALUES(1001,'財務部'); INSERT INTO department VALUES(1002,'技術部'); INSERT INTO department VALUES(1003,'行政部'); INSERT INTO department VALUES(1004,'生活部'); -- 向員工表插入數據 INSERT INTO employee VALUES(1,'張三',19,1003); INSERT INTO employee VALUES(2,'李四',18,1002); INSERT INTO employee VALUES(3,'王五',20,1001); INSERT INTO employee VALUES(4,'趙六',20,1004);-- 例如,查詢員工姓名及其所屬部門名稱 select ename,dname from department inner join employee on did=departmentid; -- 也可以這么寫,都可以 select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid;-- 3、外連接查詢 -- 在使用內連接查詢時我們發現:返回的結果只包含符合查詢條件和連接條件的數據。但是,有時還需要在返回查詢結果中不僅包含符合條件的數據,而且還包括左表、右表或兩個表中的所有數據,此時我們就需要使用外連接查詢。外連接又分為左(外)連接和右(外)連接-- 基本的語法格式,由此可見,外連接的語法格式和內連接非常相似,只不過使用的是LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN關鍵字。其中,關鍵字左邊的表被稱為左表,關鍵字右邊的表被稱為右表;OUTER可以省略。 -- 在使用左(外)連接和右(外)連接查詢時,查詢結果是不一致的,具體如下: -- (1)LEFT [OUTER] JOIN 左(外)連接:返回包括左表中的所有記錄和右表中符合連接條件的記錄。 -- (2)RIGHT [OUTER] JOIN 右(外)連接:返回包括右表中的所有記錄和左表中符合連接條件的記錄 SELECT 查詢字段1,查詢字段2, ... FROM1 LEFT | RIGHT [OUTER] JOIN2 ON1.關系字段=2.關系字段 WHERE 條件-- 若存在數據庫mydb則刪除 DROP DATABASE IF EXISTS mydb; -- 創建數據庫mydb CREATE DATABASE mydb; -- 選擇數據庫mydb USE mydb;-- 創建班級表 CREATE TABLE class(cid int (4) NOT NULL PRIMARY KEY, cname varchar(20) );-- 創建學生表 CREATE TABLE student (sid int (4) NOT NULL PRIMARY KEY, sname varchar (20), sage int (2), classid int (4) NOT NULL ); -- 向班級表插入數據 INSERT INTO class VALUES(1001,'Java'); INSERT INTO class VALUES(1002,'C++'); INSERT INTO class VALUES(1003,'Python'); INSERT INTO class VALUES(1004,'PHP');-- 向學生表插入數據 INSERT INTO student VALUES(1,'張三',20,1001); INSERT INTO student VALUES(2,'李四',21,1002); INSERT INTO student VALUES(3,'王五',24,1002); INSERT INTO student VALUES(4,'趙六',23,1003); INSERT INTO student VALUES(5,'Jack',22,1009);-- 準備這組數據有一定的特點,為的是讓大家直觀的看出左連接與右連接的不同之處 -- (1)班級編號為1004的PHP班級沒有學生 -- (2)學號為5的學生王躍躍班級編號為1009,該班級編號并不在班級表中-- 3.1、左(外)連接查詢 -- 左(外)連接的結果包括LEFT JOIN子句中指定的左表的所有記錄,以及所有滿足連接條件的記錄。如果左表的某條記錄在右表中不存在則在右表中顯示為空-- 例如,查詢每個班的班級ID、班級名稱及該班的所有學生的名字 select class.cid,class.cname,student.sname from class left join student on class.cid=student.classid;-- 展示結果分析: -- (1)分別找出Java班、C++班、Python班的學生 -- (2)右表的王躍躍不滿足查詢條件故其沒有出現在查詢結果中 -- (3)雖然左表的PHP班沒有學生,但是任然顯示了PHP的信息;但是,它對應的學生名字為NULL-- 3.2、右(外)連接查詢 -- 右(外)連接的結果包括RIGHT JOIN子句中指定的右表的所有記錄,以及所有滿足連接條件的記錄。如果右表的某條記錄在左表中沒有匹配,則左表將返回空值-- 例如,查詢每個班的班級ID、班級名稱及該班的所有學生的名字 select class.cid,class.cname,student.sname from class right join student on class.cid=student.classid;-- 展示結果分析: -- (1)分別找出Java班、C++班、Python班的學生 -- (2)左表的PHP班不滿足查詢條件故其沒有出現在查詢結果中 -- (3)雖然右表的jack沒有對應班級,但是任然顯示王躍躍的信息;但是,它對應的班級以及班級編號均為NULL

7.4、子查詢

子查詢是指一個查詢語句嵌套在另一個查詢語句內部的查詢;該查詢語句可以嵌套在一個 SELECT、SELECT…INTO、INSERT…INTO等語句中。在執行查詢時,首先會執行子查詢中的語句,再將返回的結果作為外層查詢的過濾條件。在子査詢中通??梢允褂帽容^運算符和IN、EXISTS、ANY、ALL等關鍵字

DROP TABLE IF EXISTS student; DROP TABLE IF EXISTS class;-- 創建班級表 CREATE TABLE class(cid int (4) NOT NULL PRIMARY KEY, cname varchar(20) );-- 創建學生表 CREATE TABLE student (sid int (4) NOT NULL PRIMARY KEY, sname varchar (20), sage int (2), classid int (4) NOT NULL );-- 向班級表插入數據 INSERT INTO class VALUES(1001,'Java'); INSERT INTO class VALUES(1002,'C++'); INSERT INTO class VALUES(1003,'Python'); INSERT INTO class VALUES(1004,'PHP'); INSERT INTO class VALUES(1005,'Android');-- 向學生表插入數據 INSERT INTO student VALUES(1,'張三',20,1001); INSERT INTO student VALUES(2,'李四',21,1002); INSERT INTO student VALUES(3,'王五',24,1003); INSERT INTO student VALUES(4,'趙六',23,1004); INSERT INTO student VALUES(5,'小明',21,1001); INSERT INTO student VALUES(6,'小紅',26,1001); INSERT INTO student VALUES(7,'小亮',27,1002); -- 1、帶比較運算符的子查詢 -- 比較運算符前面我們提到過得,就是>、<、=、>=、<=、!=等-- 例如,查詢張三同學所在班級的信息 select * from class where cid=(select classid from student where sname='張三');-- 例如,查詢比張三同學所在班級編號還大的班級的信息 select * from class where cid>(select classid from student where sname='張三');-- 2、帶EXISTS關鍵字的子查詢 -- EXISTS關鍵字后面的參數可以是任意一個子查詢, 它不產生任何數據只返回TRUE或FALSE。當返回值為TRUE時外層查詢才會 執行-- 例如,假如王五同學在學生表中則從班級表查詢所有班級信息 select * from class where exists (select * from student where sname='王五');-- 3、帶ANY關鍵字的子查詢 -- ANY關鍵字表示滿足其中任意一個條件就返回一個結果作為外層查詢條件-- 例如,查詢比任一學生所屬班級號還大的班級編號 select * from class where cid > any (select classid from student);-- 4、帶ALL關鍵字的子查詢 -- ALL關鍵字與ANY有點類似,只不過帶ALL關鍵字的子査詢返回的結果需同時滿足所有內層査詢條件-- 例如,查詢比所有學生所屬班級號還大的班級編號 select * from class where cid > all (select classid from student);

八、函數

-- 創建數據庫 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb;-- 創建student表 CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT 'male' );-- 向student表插入數據 INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male'); INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');-- 1、聚合函數 -- 在開發中,我們常常有類似的需求:統計某個字段的最大值、最小值、 平均值等等。為此,MySQL中提供了聚合函數來實現這些功能。所謂聚合,就是將多行匯總成一行;其實,所有的聚合函數均如此——輸入多行,輸出一行。聚合函數具有自動濾空的功能,若某一個值為NULL,那么會自動將其過濾使其不參與運算。 -- 聚合函數使用規則: -- 只有SELECT子句和HAVING子句、ORDER BY子句中能夠使用聚合函數。例如,在WHERE子句中使用聚合函數是錯誤的-- 1.1、count() -- 統計表中數據的行數或者統計指定列其值不為NULL的數據個數 -- 例如,查詢有多少該表中有多少人 select count(*) from student;-- 1.2、max() -- 計算指定列的最大值,如果指定列是字符串類型則使用字符串排序運算 -- 例如,查詢該學生表中年紀最大的學生 select max(age) from student;-- 1.3、min() -- 計算指定列的最小值,如果指定列是字符串類型則使用字符串排序運算 -- 例如,查詢該學生表中年紀最小的學生 select sname,min(age) from student;-- 1.4、sum() -- 計算指定列的數值和,如果指定列類型不是數值類型則計算結果為0 -- 例如,查詢該學生表中年紀的總和 select sum(age) from student;-- 1.5、avg() -- 計算指定列的平均值 -- 例如,查詢該學生表中年紀的平均數 select avg(age) from student;-- 2.其他常用函數 -- 2.1、時間函數 SELECT NOW(); SELECT DAY (NOW()); SELECT DATE (NOW()); SELECT TIME (NOW()); SELECT YEAR (NOW()); SELECT MONTH (NOW()); SELECT CURRENT_DATE(); SELECT CURRENT_TIME(); SELECT CURRENT_TIMESTAMP(); SELECT ADDTIME('14:23:12','01:02:01'); SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH); SELECT DATE_SUB(NOW(),INTERVAL 1 DAY); SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH); SELECT DATEDIFF('2019-07-22','2019-05-05');-- 2.2、字符串函數 -- 連接函數 SELECT CONCAT (); SELECT INSTR (); -- 統計長度 SELECT LENGTH();-- 2.3、數學函數 -- 絕對值 SELECT ABS(-136); -- 向下取整 SELECT FLOOR(3.14); -- 向上取整 SELECT CEILING(3.14);

九、別名設置

在査詢數據時可為表和字段取別名,該別名代替表和字段的原名參與查詢操作。

-- 1.為表取別名 -- 在查詢操作時,假若表名很長使用起來就不太方便,此時可為表取一個別名,用該別名來代替表的名稱-- 基本的語法格式 SELECT * FROM 表名 [AS] 表的別名 WHERE .... ; -- 例如,將student改為stu查詢整表 select * from student as stu;-- 2.為字段取別名 -- 在查詢操作時,假若字段名很長使用起來就不太方便,此時可該字段取一個別名,用該別名來代替字段的名稱-- 基本的語法格式 SELECT 字段名1 [AS] 別名1 , 字段名2 [AS] 別名2 , ... FROM 表名 WHERE ... ; -- 例如,將student中的name取別名為“姓名” 查詢整表 select name as '姓名',id from student;

十、表的關聯關系

在實際開發中數據表之間存在著各種關聯關系。在此,介紹MySQL中數據表的三種關聯關系。
多對一
多對一(亦稱為一對多)是數據表中最常見的一種關系。例如:員工與部門之間的關系,一個部門可以有多個員工;而一個員工不能屬于多個部門只屬于某個部門。在多對一的表關系 中,應將外鍵建在多的一方否則會造成數據的冗余。
多對多
多對多是數據表中常見的一種關系。例如:學生與老師之間的關系,一個學生可以有多個老師而且一個老師有多個學生。通常情況下,為了實現這種關系需要定義一張中間表(亦稱為連接表)該表會存在兩個外鍵分別參照老師表和學生表。
一對一
在開發過程中,一對一的關聯關系在數據庫中并不常見;因為以這種方式存儲的信息通常會放在同一張表中。

DROP TABLE IF EXISTS student; DROP TABLE IF EXISTS class;-- 創建班級表 CREATE TABLE class(cid int(4) NOT NULL PRIMARY KEY,cname varchar(30) );-- 創建學生表 CREATE TABLE student(sid int(8) NOT NULL PRIMARY KEY,sname varchar(30),classid int(8) NOT NULL );-- 為學生表添加外鍵約束 ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid); -- 向班級表插入數據 INSERT INTO class(cid,cname)VALUES(1,'Java'); INSERT INTO class(cid,cname)VALUES(2,'Python');-- 向學生表插入數據 INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1); INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1); INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2); INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);-- 1.關聯查詢 -- 查詢Java班的所有學生 select * from student where classid=(select cid from class where cname='Java');-- 2.關于關聯關系的刪除數據 -- 請從班級表中刪除Java班級。在此,請注意:班級表和學生表之間存在關聯關系;要刪除Java班級,應該先刪除學生表中與該班相關聯的學生。否則,假若先刪除Java班那么學生表中的cid就失去了關聯 -- 例如,刪除Java班 delete from student where classid=(select cid from class where cname='Java'); delete from class where cname='Java';

十一、權限

-- 用戶和權限管理 -- 用戶信息表:mysql.user-- 刷新權限 FLUSH PRIVILEGES-- 增加用戶 CREATE USER kuangshen IDENTIFIED BY '123456' CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串)-- 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。-- 只能創建用戶,不能賦予權限。-- 用戶名,注意引號:如 'user_name'@'192.168.1.1'-- 密碼也需引號,純數字密碼也要加引號-- 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD-- 重命名用戶 RENAME USER kuangshen TO kuangshen2 RENAME USER old_user TO new_user-- 設置密碼 SET PASSWORD = PASSWORD('密碼') -- 為當前用戶設置密碼 SET PASSWORD FOR 用戶名 = PASSWORD('密碼') -- 為指定用戶設置密碼-- 刪除用戶 DROP USER kuangshen2 DROP USER 用戶名-- 分配權限/添加用戶 GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']- all privileges 表示所有權限- *.* 表示所有庫的所有表- 庫名.表名 表示某庫下面的某表-- 查看權限 SHOW GRANTS FOR root@localhost; SHOW GRANTS FOR 用戶名-- 查看當前用戶權限SHOW GRANTS;SHOW GRANTS FOR CURRENT_USER;SHOW GRANTS FOR CURRENT_USER();-- 撤消權限 REVOKE 權限列表 ON 表名 FROM 用戶名 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名 -- 撤銷所有權限 權限解釋-- 權限列表 ALL [PRIVILEGES] -- 設置除GRANT OPTION之外的所有簡單權限 ALTER -- 允許使用ALTER TABLE ALTER ROUTINE -- 更改或取消已存儲的子程序 CREATE -- 允許使用CREATE TABLE CREATE ROUTINE -- 創建已存儲的子程序 CREATE TEMPORARY TABLES -- 允許使用CREATE TEMPORARY TABLE CREATE USER -- 允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 CREATE VIEW -- 允許使用CREATE VIEW DELETE -- 允許使用DELETE DROP -- 允許使用DROP TABLE EXECUTE -- 允許用戶運行已存儲的子程序 FILE -- 允許使用SELECT...INTO OUTFILE和LOAD DATA INFILE INDEX -- 允許使用CREATE INDEX和DROP INDEX INSERT -- 允許使用INSERT LOCK TABLES -- 允許對您擁有SELECT權限的表使用LOCK TABLES PROCESS -- 允許使用SHOW FULL PROCESSLIST REFERENCES -- 未被實施 RELOAD -- 允許使用FLUSH REPLICATION CLIENT -- 允許用戶詢問從屬服務器或主服務器的地址 REPLICATION SLAVE -- 用于復制型從屬服務器(從主服務器中讀取二進制日志事件) SELECT -- 允許使用SELECT SHOW DATABASES -- 顯示所有數據庫 SHOW VIEW -- 允許使用SHOW CREATE VIEW SHUTDOWN -- 允許使用mysqladmin shutdown SUPER -- 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您連接(一次),即使已達到max_connections。 UPDATE -- 允許使用UPDATE USAGE -- “無權限”的同義詞 GRANT OPTION -- 允許授予權限-- 表維護-- 分析和存儲表的關鍵字分布 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ... -- 檢查一個或多個表是否有錯誤 CHECK TABLE tbl_name [, tbl_name] ... [option] ... option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED} -- 整理數據文件的碎片 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

十二、總結

重要(從關鍵字分析):
查詢語句的書寫順序和執行順序
select ===> from ===> where ===> group by ===> having ===> order by ===> limit
查詢語句的執行順序
from ===> where ===> group by ===> having ===> select ===> order by ===> limi


參考:

1、CSDN博主「老賴的小弟」
鏈接:https://blog.csdn.net/weixin_45851945/article/details/114287877

2、狂神

鏈接:https://mp.weixin.qq.com/s/a4jA3B2j4KXBH7rci4C46w

? https://mp.weixin.qq.com/s/-_-fRKNOi5rI6tb8RINZ0Q

? https://mp.weixin.qq.com/s/dCt_v5KQCTpgBdlY__0BSA

3、菜鳥教程

鏈接:https://www.runoob.com/mysql/mysql-create-tables.html

總結

以上是生活随笔為你收集整理的又学MySQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩在线国产 | 国产成人精品一区二区三区视频 | 欧美在线一二三 | 亚洲成人自拍偷拍 | 波多野结衣绝顶大高潮 | 国产午夜小视频 | 久久女人网 | 九九爱精品视频 | 夜色在线视频 | 黄视频国产 | 日本天天色 | 亚洲综合中文字幕在线 | 亚洲熟女少妇一区二区 | 伊人免费在线观看 | 视频在线一区二区 | 尤物网站在线观看 | 免费观看的毛片 | 日p视频在线观看 | 精品一卡二卡三卡 | 蜜臀久久99精品久久一区二区 | 精品国产伦一区二区三区 | 日不卡 | 91精品综合久久久久久五月天 | 亚洲精品免费视频 | 美女丝袜av| 精品免费国产一区二区三区四区 | 亚洲视频欧美 | 国产精品国产自产拍高清av | 亚洲深夜 | 深夜国产在线 | 日本高清不卡在线观看 | 不卡中文字幕在线观看 | 天堂中文视频 | 波多野结衣在线观看一区二区 | 女生喷液视频 | 亚洲人成电影一区二区在线 | 国产a∨精品一区二区三区仙踪林 | 秋霞黄色网| 五月天综合在线 | 久草欧美视频 | 中文字幕 日本 | 亚洲第一大综合区 | 一区二区免费在线观看视频 | 亚洲成人观看 | 男女操网站 | 成人无码视频 | 中国色老太hd | 91亚洲欧美激情 | 日本乱子伦 | 色哟哟免费在线观看 | 色哟哟官网 | 五月天精品视频 | 国产熟妇一区二区三区四区 | 自拍偷拍第3页 | 亚洲精品高潮久久久久久久 | 日韩av手机在线观看 | 欧美第二区 | 热久久久久 | 久久久久久久久一区 | 91老女人 | 99re热视频 | 国产成人精品午夜福利Av免费 | 第一av在线 | 日韩久久一区 | 国产精品人人做人人爽人人添 | 久久蜜臀精品av | 久久婷婷五月综合色吧 | 日韩高清影视 | 手机在线免费看av | 欧美成人xxx| 欧美人与禽猛交乱配视频 | 亚洲成人免费电影 | 中日韩午夜理伦电影免费 | www.国产.com | 精品动漫一区二区三区的观看方式 | 成人午夜精品福利免费 | 欧美在线播放一区 | 在线观看中文字幕视频 | www爱爱| 狠狠操很很干 | 成人激情在线 | 日本wwwwwww | 欧美另类精品xxxx孕妇 | 91久久一区二区 | a级片中文字幕 | 日韩在线视频一区 | 成人免费视频国产免费网站 | 中文字幕在线观看不卡 | 国产手机av| 亚洲xxxxxx| 国产精品视频在线看 | 美国一区二区 | 国产xxx在线观看 | 亚洲无人区码一码二码三码 | julia一区二区中文久久97 | 亚洲va天堂va欧美ⅴa在线 | japanese国产| 色婷婷久久综合 | 蜜桃综合 |