MySQL基礎學習2-基礎語句

一、SQL語句分類

  1. DDL:數據定義語言:create、drop、alter

  2. DML:數據操作語言:insert、delete、update、truncate

  3. DQL:數據查詢語言:select、show、desc

MySQL存儲結構:先有數據庫,再有表,最後填充記錄!

二、數據庫管理

MySQL語句都是以分號;結尾的!

1、基本語法(創建數據庫時使用數據庫的默認字符集):create database 數據庫名稱;

2、查看數據庫列表:show databases;

3、高級語法(創建數據庫時指定數據庫的字符集):create database 數據庫名稱 character set utf8;

舉例:create database cmm0928; create database cmm0928 character set utf8;

4、切換數據庫:(使用數據庫cmm0928)use cmm0928; (使用數據庫cmm0929)use cmm0929;

查看當前正在使用的數據庫:select database();

5、查看創建的數據庫定義信息:show create database cmm0928;

6、刪除指定數據庫:drop database cmm0928;

刪除了數據庫,數據庫中的表沒了,表中的數據也沒了,慎重的操作!

7、修改數據庫的默認字符集:alter database cmm0928 character set gbk;

二、表管理CURD:發送SQL命令到MySQL服務器

登陸到MySQL服務器的方式一:(1)mysql -u root -p; (2)輸入pwd,回車即可進入MySQL服務器。

登陸到MySQL服務器的方式二:(1)mysql -uroot -proot; (2)回車即可進入MySQL服務器。

1、顯示數據庫:show databases; 創建數據庫:create database cmm0928; 使用一個數據庫:use cmm0928;

2、查看當前數據庫中的所有表:show tables;

3、新建表語法:可以參考建表wiki

CREATE TABLE `RUN_Department` (
  `DepartmentId` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID(部門ID)',
  `DepartmentName` VARCHAR(256) NOT NULL DEFAULT '' COMMENT '部門名稱',
  `Status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '部門是否有效:1-有效,0-無效',
  `AddTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加時間',
  `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`DepartmentId`),
  UNIQUE KEY `UNIQUE_IX_DepartmentName` (`DepartmentName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4、查看錶結構:desc student;

5、刪除一個表:drop table student;

6、給表增加一個字段:alter table student add address varchar(50);

7、給表增加多個字段:alter table student add address varchar(50), add math int(11), add chinese int(11);

8、從表中刪除一個字段:alter table student drop chinese;

9、修改表中的字段類型:alter table student modify address varchar(100);

10、修改表中的字段名稱:alter table student change address homeAddress varchar(100);

11、修改表名稱:alter table student rename mtdpStudent;

12、修改表的AUTO_INCREMENT字段:發現表的AUTO_INCREMENT值已經遠遠超過了int值範圍,再次改回來:
alter table MARS_Entity auto_increment =10000;

(1)參考1:https://www.cnblogs.com/ajianbeyourself/p/9098318.html

(2)參考2:https://blog.csdn.net/wangyongx_123/article/details/90315737

三、表的增刪改查

1、建表:create table student(id int(11) primary key auto_increment, name varchar(50), gender varchar(50), age int(11));

2、插入一條記錄:依次插入所有字段:insert into student values ("張三","男",10);

3、插入一條記錄:依次插入部分字段:insert into student(name, gender) values(“李四", "女");

4、帶條件修改一個字段:修改符合條件的所有字段的值:update student set gender="男" where id=1;

5、帶條件修改多個字段:修改符合條件的所有字段的值:update student set gender="女", age="20" where id=2;

6、帶條件的刪除數據:delete form student where id =1;

7、清空表中所有數據:delete from student; truncate table student;

(注:前者是逐行的刪除表中記錄,直至刪除所有記錄,速度慢,不會清空auto_increment 記錄數,且在事務中可以通過rollback回滾恢復數據。

後者是直接刪去整張表,再重新創建一個空表,速度快,會清空auto_increment記錄數,且在事務中不能通過rollback回滾恢復數據。)

查詢數據(重點)

1、查詢所有字段:select * from student;

2、查詢指定字段:select id, name from student;

3、查詢時給字段指定一個別名as(關鍵字as可以省略):select id as "學號", name as "姓名" from student;

4、查詢時添加常量列:select id, name, gender, age, "mySQL" from student ; select id as "學號", name as "姓名", gender as "性別", age as "年齡", "mySQL" as "學習內容" from student ;

5、查詢時合併數值列:select id, name, (math+chinese) as "總成績" from student;

6、查詢時去除重複記錄(distinct):select distinct gender from student; select distinct(gender) from student;

【條件查詢】

1、邏輯條件:and 表示並且關係。or:表示或者關係。( = 屬於完全匹配。like 屬於模糊匹配。)

select * from student where id=2 and name="李四";

select * from student where id=2 or name="張三";

2、比較條件:>, <, >=, <=, <>, between and

select * form student where servlet>100;

select * from student where jsp>=75 and jsp<=90;

select * from student where jsp between 75 and 90; (包前包後)

3、判空條件:is null, is not null, ="", <>""

select * from student where address is null;

select * from student where address is not null and address <> "";

4、模糊查詢:like 通常與替換的標記搭配使用。%:表示匹配任意個字符。_:一個下劃線表示一個佔位符,兩個下劃線表示兩個佔位符。

select * from student where name like "張%";

select * from student where name like "李_";

select * from student where name like "李__";

5、聚合查詢:使用mysql自帶的聚合函數的查詢稱之爲聚合查詢

  • sum():select chinese from student; select sum(chinese) as "語文總成績" from student;

  • avg():select avg(chinese) as "語文平均成績" from student;

  • max():select max(chinese) as "語文最高分" from student;

  • min():select min(chinese) as "語文最低分" from student;

  • count():select count(*) as "表中記錄總數量" from student; select count(id) as "表中記錄總數量" from student; 注意:id應該是主鍵。

6、分頁查詢( limit 起始行, 查詢行數:起始行從0開始,查詢幾條記錄。表中的數據行數從0開始計數。 )

  • 查1條記錄:select * from student limit 1; select * from student limit 0, 1;

  • 從第0條開始查,總共查3條記錄:select * from student limit 0, 3;

  • 從第2條開始查,總共查10條記錄。:select * from student limit 2, 10;

  • 分頁查詢當前頁數據的SQL語句:select * from student limit (當前頁-1)*每頁顯示多少條記錄, 每頁顯示多少條記錄;

7、查詢排序:order by 字段 ASC/DESC。默認順序是記錄的插入順序,默認排序是ASC。

  • 正序排列,單個排序條件:select * from student order by id;

  • 反序排序,單個排序條件:select * from student order by id DESC;

  • 多個排序條件:先按照語文正排,再按照數學逆徘。:select * from student order by chinese ASC, math DESC;

8、分組查詢:group by

  • 統計每個性別的人數:select gender, count(*) from student group by gender;

  • 統計每個地區的人數:select address, count(*) from student group by address;

  • 分組查詢之前的篩選用where: select gender, count(*) from student where name like "陳%" group by gender;

  • 分組查詢之後的篩選用 having:select gender, count(*) from student where name like "陳%" group by gender having count(*)>2;

四、數據約束

1、數據約束:對用戶操作表的數據字段的權限做約束

(1)字段含有默認值:當用戶對使用默認值的字段不插入數據的時候便會使用默認值。注意:對默認值字段可以插入null或者非null。比如:studenAdress的默認值:"德必易園"

create table student(
  studentId INT(11),
  studenName VARCHAR(20) default '德必易園2222'
)

(2)字段值是非null:限制該字段必須賦值。注意:非空字段必須賦非null值。

create table student(
	studentId INT(11),
    studenName VARCHAR(20) NOT NULL
)
create table student(
	studentId INT(11),
    studenName VARCHAR(20) NOT NULL default '德必易園222'
)

(3)字段值是唯一:限制字段的值不能重複。注意:這裏說的唯一對null值不起作用,也即唯一的字段可以有很多個null值。

create table student(
	studentId INT(11) unique,
    studenName VARCHAR(20)
)

(4)字段是主鍵:非null + 唯一。注意:通常情況下,每張表都會設置一個主鍵,用於標記表中每一條記錄的唯一性。

建議不要選擇表的包含業務含義的字段作爲主鍵。建議給每張表獨立設計一個非業務含義的id字段作爲主鍵。

create table student(
	studentId INT(11) PRIMARY KEY,
    studenName VARCHAR(20)
)

(5)字段是自增長:自增長字段可以不賦值,自動從0開始遞增。注意:delete from student; 不影響自增長約束。truncate table student; 影響自增長約束。

create table student(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
	studentId INT(11),
    studenName VARCHAR(20) NOT NULL default '蒲松北路222'
)

(6)字段是外鍵:約束兩張表的數據:兩張表中含有業務關聯的字段可以使用外鍵關聯起來,解決了數據高冗餘的問題(把冗餘度高的數據獨立出一張表)。

例如:員工表employee(被約束的表是從表)和部門表department(約束別人的表是主表)。在員工表的部門ID字段添加一個外鍵約束,外鍵設置在從表中,從表的參考字段通常爲主表的主鍵。

當有了外鍵約束後,添加數據的順序:先添加主表,再添加從表數據。

當有了外鍵約束後,修改數據的順序:先修改從表,再修改主表數據。

當有了外鍵約束後,刪除數據的順序:先刪除從表,再刪除主表數據。

create table employee(
  id INT(11) not null PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵ID',
  empName VARCHAR(20) not null default '',
  deptId INT(11),
  CONSTRAINT employee_deptId_fk FOREIGN KEY(deptId) REFERENCES department(id)
  					--外鍵名稱											--外鍵						 	--參考表和參考字段
)
create table department(
	id INT(11) not null PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵ID',
    depName VARCHAR(30) not null default ''
)

五、數據庫設計-三大範式

設計原則:設計的表儘量遵循三大範式:

  1. 第一範式:要求表的每個字段必須是不可分割的獨立單元。

  2. 第二範式:在第一範式的基礎上,要求每張表只表達一個意思。表的每個字段都和表的主鍵有依賴。

  3. 第三範式:在第二範式的基礎上,要求每張表的主鍵之外的其他字段都只能和主鍵有直接決定依賴關係。(是爲了降低數據的冗餘度,防止出現數據異常)

六、數據庫表字段的一些修飾符

新建一張表舉例:

CREATE TABLE `RUN_Employee` (
  `EmployeeId` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID(員工ID)',
  `EmployeeName` VARCHAR(256) NOT NULL DEFAULT '' COMMENT '員工姓名',
  `EmployeeSex` TINYINT(4) NOT NULL COMMENT '員工性別(1-男,2-女,3-未知)',
  `EmployeeAge` TINYINT(4) NOT NULL COMMENT '員工年齡',
  `DepartmentId` INT(11) NOT NULL COMMENT '員工所屬部門',
  `Status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '員工是否在職:1-在職,0-離職',
  `AddTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加時間',
  `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`EmployeeId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

七、騰訊課堂截圖:https://ke.qq.com/course/450495

(1)varchar:可變長度的字符串,長度不夠時不補全空格,可以節約空間,比如存儲姓名。

(2)char:固定長度的字符串,長度不夠時用空格補全長度,比如存儲身份證號碼。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章