1. 程式人生 > 其它 >Mysql資料庫—高階操作

Mysql資料庫—高階操作

Mysql資料庫—高階操作

一、資料表高階操作

1.克隆表,將資料表的資料記錄生成到新的表中
方法一:
create table test01 like KY08;				#通過 LIKE 方法,複製 KY08 表結構生成 test01 表
insert into test01 select * from KY08;

方法二:
CREATE TABLE test02 (SELECT * from KY08);

show create table test02\G					#獲取資料表的表結構、索引等資訊
SELECT * from test02;


2.清空表,刪除表內的所有資料
方法一:
delete from test01;
#DELETE清空表後,返回的結果內有刪除的記錄條目;DELETE工作時是一行一行的刪除記錄資料的;如果表中有自增長欄位,使用DELETE FROM 刪除所有記錄後,再次新新增的記錄會從原來最大的記錄 ID 後面繼續自增寫入記錄。

方法二:
truncate table test01;
#TRUNCATE 清空表後,沒有返回被刪除的條目;TRUNCATE 工作時是將表結構按原樣重新建立,因此在速度上 TRUNCATE 會比 DELETE 清空錶快;使用 TRUNCATE TABLE 清空表內資料後,ID 會從 1 開始重新記錄。

3.建立臨時表
臨時表建立成功之後,使用SHOW TABLES命令是看不到建立的臨時表的,臨時表會在連線退出後被銷燬。 如果在退出連線之前,也可以可執行增刪改查等操作,比如使用 DROP TABLE 語句手動直接刪除臨時表。

CREATE TEMPORARY TABLE 表名 (欄位1 資料型別,欄位2 資料型別[,...][,PRIMARY KEY (主鍵名)]);

例:
create temporary table test03 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));

insert into test03 values(1,'zhangsan',123456,'running');

select * from test03;
show tables;

quit
select * from test03;

4.建立外來鍵約束,保證資料的完整性和一致性

主鍵表和外來鍵表的理解:
(1)以公共關鍵字作主鍵的表為主鍵表(父表、主表)
(2)以公共關鍵字作外來鍵的表為外來鍵表(從表、外表)

注意:與外來鍵關聯的子表的欄位必須設定為主鍵。要求主表外來鍵欄位和子表的欄位具備相同的資料型別、字元長度和約束。
#建立子表test04
create table test04 (sid int(4),hobname varchar(20));
#為子表新增一個主鍵約束。主鍵名建議以“PK_”開頭。
alter table test04 add constraint PK_sid primary key test04 (sid);
#為 test03 表新增外來鍵,並將 test03 表的 hobby 欄位和 test04 表的 sid 欄位建立外來鍵關聯。外來鍵名建議以“FK_”開頭。
alter table test03 add constraint FK_hob foreign key (hobby) references test04 (sid);

desc test03;

#插入新的資料記錄時,要先主表再從表
insert into test04 values (1,'runing') ;
insert into test05 values (1,'zhangsan',18,1) ;

#刪數資料記錄時,要先從表再主表,也就是說刪除主鍵表時必須先刪除其他與之關聯的表。
drop tables test05;
drop tables test04;

#檢視和刪除外來鍵約束
show create table test03;
alter table test03 drop foreign key FK_hob;
alter table test03 drop key FK_hob;
desc test03;

外來鍵的定義: 如果同一個屬性欄位x在表一中 是主鍵,而在表二中不是主鍵,則欄位x稱為表二的外來鍵。

MySQL中6種常見的約束

主鍵約束 (primary key)
外來鍵約束 (foreign key)
非空約束 (not null)
唯一性約束 (unique [key|index])
預設值約束 (default)
自增約束 (auto_increment)

1.克隆表,將資料表的資料記錄生成到新的表中

例:

方法一

方法二

2.清空表,刪除表內的所有資料

例:

方法一

方法二

3.建立臨時表

例:

4.建立外來鍵約束

例:

二、資料庫使用者管理

1.新建使用者
CREATE USER '使用者名稱'@'來源地址' [IDENTIFIED BY [PASSWORD] '密碼'];
----------------------------------------------------------------------------------------------------------
'使用者名稱':指定將建立的使用者名稱
'來源地址':指定新建立的使用者可在哪些主機上登入,可使用IP地址、網段、主機名的形式,本地使用者可用localhost,允許任意主機登入可用萬用字元%
'密碼':若使用明文密碼,直接輸入'密碼',插入到資料庫時由Mysql自動加密;
        若使用加密密碼,需要先使用SELECT PASSWORD('密碼'); 獲取密文,再在語句中新增 PASSWORD '密文';
        若省略“IDENTIFIED BY”部分,則使用者的密碼將為空(不建議使用)
----------------------------------------------------------------------------------------------------------

CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';

SELECT PASSWORD('abc123');
CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';


2.檢視使用者資訊
#建立後的使用者儲存在 mysql 資料庫的 user 表裡
USE mysql;
SELECT User,authentication_string,Host from user;

3.重新命名使用者
RENAME USER 'zhangsan'@'localhost' TO 'lisi'@'localhost';

4.刪除使用者
DROP USER 'lisi'@'localhost';

5.修改當前登入使用者密碼
SET PASSWORD = PASSWORD('abc123');

6.修改其他使用者密碼
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123');

7.忘記 root 密碼的解決辦法
(1)修改 /etc/my.cnf 配置檔案,不使用密碼直接登入到 mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables					#新增,使登入mysql不使用授權表

systemctl restart mysqld

mysql								#直接登入

(2)使用 update 修改 root 密碼,重新整理資料庫
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';

FLUSH PRIVILEGES;
quit

mysql -u root -pabc123

注意:最後再把 /etc/my.cnf 配置檔案裡的 skip-grant-tables 刪除,並重啟 mysql 服務。

新建使用者

例:

檢視使用者資訊

例:

重新命名使用者

例:

刪除使用者

例:

修改其他使用者密碼

例:

忘記root密碼的解決辦法

例:

最後再把/etc/my.cnf配置檔案裡的skip-grant-tables刪除,並重啟mysql服務。

三、資料庫使用者授權

1.授予許可權
GRANT語句:專門用來設定資料庫使用者的訪問許可權。當指定的使用者名稱不存在時,GRANT語句將會建立新的使用者;當指定的使用者名稱存在時,GRANT 語句用於修改使用者資訊。

GRANT 許可權列表 ON 資料庫名.表名 TO '使用者名稱'@'來源地址' [IDENTIFIED BY '密碼'];
----------------------------------------------------------------------------------------------------------
#許可權列表:用於列出授權使用的各種資料庫操作,以逗號進行分隔,如“select,insert,update”。使用“all”表示所有許可權,可授權執行任何操作。
#資料庫名.表名:用於指定授權操作的資料庫和表的名稱,其中可以使用萬用字元“*”。例如,使用“kgc.*”表示授權操作的物件為 kgc資料庫中的所有表。
#'使用者名稱@來源地址':用於指定使用者名稱稱和允許訪問的客戶機地址,即誰能連線、能從哪裡連線。來源地址可以是域名、IP 地址,還可以使用“%”萬用字元,表示某個區域或網段內的所有地址,如“%.kgc.com”、“192.168.80.%”等。
#IDENTIFIED BY:用於設定使用者連線資料庫時所使用的密碼字串。在新建使用者時,若省略“IDENTIFIED BY”部分, 則使用者的密碼將為空。
----------------------------------------------------------------------------------------------------------
#允許使用者 zhangsan 在本地查詢 kgc 資料庫中 所有表的資料記錄,但禁止查詢其他資料庫中的表的記錄。
GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';

#允許使用者 lisi 在所有終端遠端連線 mysql ,並擁有所有許可權。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';

flush privileges;
quit

mysql -u zhangsan -p123456
use kgc;
show tables;
select * from KY08;

2.檢視許可權
SHOW GRANTS FOR 使用者名稱@來源地址;

例:
SHOW GRANTS FOR 'lisi'@'%';

3.撤銷許可權
REVOKE 許可權列表 ON 資料庫名.表名 FROM 使用者名稱@來源地址;

例:
REVOKE ALL ON *.* FROM 'lisi'@'%';

SHOW GRANTS FOR 'lisi'@'%';
#USAGE許可權只能用於資料庫登陸,不能執行任何操作;USAGE許可權不能被回收,即 REVOKE 不能刪除使用者。

flush privileges;

例:

授予許可權

例:

檢視許可權

例:

撤銷許可權

例: