mysql8.0學習筆記
1.安裝過程:略。
MySQL有三大類資料型別, 分別為數字、日期\時間、字串, 這三大類中又更細緻的劃分了許多子型別:
數字型別
整數: tinyint、smallint、mediumint、int、bigint
浮點數: float、double、real、decimal
日期和時間: date、time、datetime、timestamp、year
字串型別
字串: char、varchar
文字: tinytext、text、mediumtext、longtext
二進位制(可用來儲存圖片、音樂等): tinyblob、blob、mediumblob、longblob
複製程式碼
2.關於mysql server (在linux系統下面(ubuntu18.04)).
service mysql start; (開啟服務) 需要管理員密碼
service mysql stop; (關閉服務)
service mysql status; (檢視mysql服務執行狀態)
複製程式碼
3.登入mysql
mysql -h ip地址 -u 使用者 -p密碼;
例如:一個需要在本機登入的使用者名稱是suhang 密碼是123456 登入命令應該是這樣的 mysql -h localhost -u suhang -p123456
其中localhost代表的是本機的ip地址(這是普通的使用者的登入方式);對於root使用者 只需要講使用者名稱換為root即可.
複製程式碼
4.建立使用者
create user 使用者名稱 identified by 密碼;
例如:建立一個使用者名稱是suhang密碼是123456的使用者: create user 'suhang' identified by '123456';
複製程式碼
5.為某一個資料庫新增使用者,並且給予使用者相應的許可權具體的許可權如下:
讀取 select
更新 update
刪除 delete
建立 create
刪除 表,庫 drop
若是挨個新增麻煩 可以使用 all privileges 附給所有許可權
賦予許可權的命令如下 grant 許可權 on 資料庫名/資料表名.* to '使用者名稱'@'%'; 百分號代表的是登入該使用者的主機地址可以是任意的。
一個簡單的例子:為zhangsan資料庫新增一個zhang的管理員,賦予zhang的許可權有讀取select和刪除drop的操作,要求該使用者只可以通過本機登陸:
grant select drop zhangsan.* to 'zhang'@'localhost';
要是要求該使用者可以從任意的ip地址登入,將%改為localhost.
相應的:有增加許可權,就會有移除許可權,下面介紹移除許可權的命令:
revoke 許可權 on 資料庫名/表名.* from '使用者名稱'@'%';需要注意的是增加許可權和刪除許可權之後,都需要執行許可權更新的操作執行flush privileges;
複製程式碼
6.檢視使用者對於資料庫的操作許可權;
selct user,db,drop_priv,select_priv,delete_priv,update_priv,create_priv from mysql.db where user='使用者名稱';
上面的命令會列印出查詢的使用者對於自己的資料庫的執行許可權(僅有命令中的許可權)
複製程式碼
7.顯示有多少使用者(以管理員的身份登入)
select user from mysql.user;
複製程式碼
8.為了防止使用者登入mysqlde的方法:(1).鎖定使用者: alter user '使用者名稱'@'ip地址' account lock;
(2).解鎖使用者: alter user '使用者名稱'@'ip地址' account unlock;
複製程式碼
9.無法更改使用者名稱只能建立新使用者,將原來的使用者許可權賦值給新使用者;具體操作如下:
create user '使用者'@'ip' identified by 'new_password';
grant '舊使用者'@'ip' to '新使用者'@'ip';
複製程式碼
10.查詢當前所有的資料庫:show databases;
11.建立資料庫: create database 資料庫名; 刪除當前的資料庫: drop database 資料庫名;
12.使用當前的資料庫:use 資料庫名;
13.資料庫引擎 show engines;查詢結果中,engine引數指儲存引擎名稱;Support引數代表mysql是否支援該引擎;transaction參數列示是否支援事物處理;XA引數代表的是否分散式交易處理的XA
規範;Savepoints參數列示是否支援儲存點,以方便事物的回滾操作。
複製程式碼
14.建立表:在執行use 資料庫名;命令之後即可執行建立表的操作;
create table 表名 {
屬性名 資料型別 {完整約束條件}
屬性名 資料型別 {完整約束條件}
....
屬性名 資料型別 {完整約束條件}
};
下面是個簡單的例子:
mysql> use example;
Database changed
mysql> create table student(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.09 sec)
上面建立表的時候涉及到一個完整性約束條件,下面就列出一個完整性約束條件表:
約束條件 說明
PRIMARY KEY 標識該屬性為該表的主鍵,可以唯一的標識對應的元組
FOREIGN KEY 標識該屬性為該表的外來鍵,是與之聯絡某表的主鍵
NOT NULL 標識該屬性不能為空
UNIQUE 標識該屬性的值是唯一的
AUTO_INCREMENT 標識該屬性的值是自動增加的,這是Mysql的SQL語言的特色
DEFAULT 為該屬性設定預設值
下面講解一下完整性約束條件的應用:
(1)單欄位主鍵格式:屬性名 資料型別 PRIMARY KEY
示例:
mysql> create table student1(
-> id int PRIMARY KEY,
-> name varchar(20),
-> );
Query OK, 0 rows affected (0.06 sec)
(2)多欄位主鍵格式:屬性名 資料型別 PRIMARY EKY(屬性名1,屬性名2,....,屬性名n)
示例:
mysql> create table student2(
-> id int,
-> stu_id int,
-> name varchar(20),
->PRIMARY KEY(id,stu_id)
->);
Query OK,0 rows affected(0.00 sec)
(3)設定表的外來鍵
格式:CONSTRAINT 外來鍵別名 FOREIGN KEY(屬性1,屬性2,...,屬性n)REFERENCES 表名(屬性1',屬性2',...,屬性n')
示例:
mysql> create table teacher(
-> id int PRIMARY KEY,
-> stu_id int,
-> name varchar(20),
-> CONSTRAINT STUID FOREIGN KEY(stu_id)REFERENCES student1(id)
->);
Query OK, 0 rows affected(0.00 sec)
(4)設定表的非空約束
格式:屬性名 資料型別 NOT NULL
(5)設定表的唯一約束
就是這個屬性的值不能重複的
格式:屬性名 資料型別 UNIQUE
(6)設定標的屬性的值自動增加
AUTO_INCREMENT約束的欄位可以是任何整數型別(TINYINT,SMALLINT,INT和BIGINT),在預設情況下,該欄位的值是從1開始自增
格式:屬性名 資料型別 AUTO_INCREMENT
(7)設定標的屬性的預設值
格式:屬性名 資料型別 DEFAULT 預設值
下面對於4-7進行綜合性講解
mysql> create table student3(
->id int PRIMARY KEY AUTO_INCREMENT,
->name varchar(20) NOT NULL,
->sex varchar(10) DEFAULT 'male'
->);
Query OK, 0 rows affected (0.01 sec)
複製程式碼
15.檢視錶的結構
檢視錶的基本結構語句DESCRIBE
格式: DESCRIBE 表名;
通過檢視錶的結構,就很明確的對錶進行解讀,而且可以檢視一下自己建立的表有沒有錯誤,這個SQL語句必須要會的啊
複製程式碼
16.檢視錶詳細結構語句 SHOW CREATE TABLE 通過這個語句可以檢視錶的詳細定義,除了欄位名,欄位的資料型別,約束條件外,還可以檢視錶的預設引擎和字元編碼
格式 SHOW CREATE TABLE 表明;
複製程式碼
17.修改表:
(1).修改表名
表明可以在一個資料庫中唯一的確定一個表。
格式:alter table 舊錶名 raname 新表名;
示例:
mysql> alter table student raname student4;
Query OK, 0 rows affected (0.11 sec)
mysql> describe student;
ERROR 1146 (42S02): Table 'example.student'
doesn't exist
由上面的可以看出,改名後的表已經不存在了.
複製程式碼
18.修改欄位的資料型別
格式:alter table 表名 MODIFY 屬性名 資料型別;
複製程式碼
19.修改欄位名
格式:alter table 表名 CHANGE 舊屬性名 新屬性名 新資料型別;
複製程式碼
20.增加欄位
格式:alter table 表名 add 屬性1 資料型別[完整性約束條件] [first|after 屬性名2]
其中,’屬性名1‘引數指需要增加的欄位的名稱;'FIRST'引數是可選引數,其作用是將新增欄位設定為表的第一個欄位;'alter'引數也是可選引數,其作用是將新增欄位新增到’屬性名2‘
後面;’屬性名2‘當然就是指表中已經有的欄位.
示例:在student1表中新增欄位teacher_name ,資料型別為varchar(20),完整性約束條件是 NOT NULL,將此欄位新增到id欄位的後面;
alter table student1 add teacher_name varchar(20) NOT NULL after id;
複製程式碼
21.刪除欄位
格式: alter table 表名 drop 屬性名;
示例:在student1中刪除剛才新增的屬性名teacher_name
alter table student1 drop teacher_name;
複製程式碼
22.更改表的儲存引擎
格式:alter table 表名 engine=儲存引擎名;
複製程式碼
23.刪除表的外來鍵約束
格式:alter table 表名 drop foreign key 外來鍵別名;
複製程式碼
24.刪除沒有被關聯的普通表: drop table 表名;
刪除被其他表關聯的父表: 方法1:先刪除子表,再刪除父表 方法2:刪除父表的外來鍵約束(上面有介紹),在刪除該表
複製程式碼
25.將資料插到資料庫表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
有時我們只需要插入部分資料, 或者不按照列的順序進行插入, 可以使用這樣的形式進行插入:
insert into students (name, sex, age) values(“孫麗華”, “女”, 21);
複製程式碼
26.查詢表中的內容
select 屬性名 from 表名稱 [查詢條件];
按照特定條件進行查詢
where 關鍵詞用於指定查詢條件, 用法形式為: select 列名稱 from 表名稱 where 條件;
以查詢所有性別為女的資訊為例, 輸入查詢語句: select * from students where sex=”女”;
更加高階的操作:
查詢年齡在21歲以上的所有人資訊: select * from students where age > 21;
查詢名字中帶有 “王” 字的所有人資訊: select * from students where name like “%王%”;
查詢id小於5且年齡大於20的所有人資訊: select * from students where id<5 and age>20;
複製程式碼
27.更新表中的資料:
update 表名稱 set 列名稱=新值 where 更新條件;
示例:將id為5的手機號改為預設的”-“: update students set tel=default where id=5;
將手機號為 13288097888 的姓名改為 “張偉鵬”, 年齡改為 19: update students set name=”張偉鵬”, age=19 where tel=”13288097888″;
複製程式碼
28.刪除表中的資料
delete from 表名稱 where 刪除條件;
刪除id為2的行: delete from students where id=2;
刪除所有年齡小於21歲的資料: delete from students where age<20;
刪除表中的所有資料: delete from students;
複製程式碼
備註:上述檔案的列名稱就是欄位