溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

發(fā)布時(shí)間:2021-01-29 11:03:15 來(lái)源:億速云 閱讀:144 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

小編給大家分享一下MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

文章目錄

  • 數(shù)據(jù)表高級(jí)操作


    • 準(zhǔn)備工作:安裝MySQL數(shù)據(jù)庫(kù)

  • 一、克隆表


    • 方法一

    • 方法二

  • 二、清空表,刪除表內(nèi)的所有數(shù)據(jù)


    • 方法一

    • 方法二

  • 三、創(chuàng)建臨時(shí)表

  • 四、創(chuàng)建外鍵約束


    • MySQL中6種常見(jiàn)的約束

  • 五、數(shù)據(jù)庫(kù)用戶(hù)管理


    • 1、新建用戶(hù)

    • 2、查看用戶(hù)信息

    • 3、重命名用戶(hù)

    • 4、刪除用戶(hù)

    • 5、修改當(dāng)前登錄用戶(hù)密碼

    • 6、修改其他用戶(hù)密碼

    • 7、忘記 root 密碼的解決辦法

  • 六、數(shù)據(jù)庫(kù)用戶(hù)授權(quán)


    • 1、授予權(quán)限

    • 2、查看權(quán)限

    • 3、撤銷(xiāo)權(quán)限

數(shù)據(jù)表高級(jí)操作

準(zhǔn)備工作:安裝MySQL數(shù)據(jù)庫(kù)

Shell腳本一鍵部署——源碼編譯安裝MySQL

create database CLASS;
use CLASS;

create table TEST (id int not null,name char(20) 	not null,cardid varchar(18) not null unique 	key,primary key (id));

insert into TEST(id,name,cardid) values (1,'zhangsan','123123');

insert into TEST(id,name,cardid) values (2,'lisi','1231231');

insert into TEST(id,name,cardid) values (3,'wangwu','12312312');
select * from TEST;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例


一、克隆表

將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中

方法一

例:create table TEST01 like TEST;
select * from TEST01;

desc TEST01;
insert into TEST01 select * from TEST;
select * from TEST01;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

方法二

例:create table TEST02 (select * from TEST);
select * from TEST02;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

二、清空表,刪除表內(nèi)的所有數(shù)據(jù)

方法一

delete from TEST02;

#DELETE清空表后,返回的結(jié)果內(nèi)有刪除的記錄條目;DELETE工作時(shí)是一行一行的刪除記錄數(shù)據(jù)的;如果表中有自增長(zhǎng)字段,使用DELETE FROM 刪除所有記錄后,再次新添加的記錄會(huì)從原來(lái)最大的記錄 ID 后面繼續(xù)自增寫(xiě)入記錄

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

例:create table if not exists TEST03 (id int primary 	key auto_increment,name varchar(20) not null,cardid varchar(18) not null unique key);
show tables;

insert into TEST03 (name,cardid) values ('zhangsan','11111');		
select * from TEST03;
delete from TEST03;

insert into TEST03 (name,cardid) values ('lisi','22222');
select * from TEST03;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

方法二

例:select * from TEST03;
truncate table TEST03;
insert into TEST03 (name,cardid) values ('wangwu','33333');
select * from TEST03;

#TRUNCATE 清空表后,沒(méi)有返回被刪除的條目;TRUNCATE 工作時(shí)是將表結(jié)構(gòu)按原樣重新建立,因此在速度上 TRUNCATE 會(huì)比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表內(nèi)數(shù)據(jù)后,ID 會(huì)從 1 開(kāi)始重新記錄。

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例


三、創(chuàng)建臨時(shí)表

臨時(shí)表創(chuàng)建成功之后,使用SHOW TABLES命令是看不到創(chuàng)建的臨時(shí)表的,臨時(shí)表會(huì)在連接退出后被銷(xiāo)毀。 如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用 DROP TABLE 語(yǔ)句手動(dòng)直接刪除臨時(shí)表。

CREATE TEMPORARY TABLE 表名 (字段1 數(shù)據(jù)類(lèi)型,字段2 數(shù)據(jù)類(lèi)型[,...][,PRIMARY KEY (主鍵名)]);

例:create temporary table TEST04 (id int not null,name varchar(20) not null,cardid varchar(18) not null unique key,primary key (id));
show tables;

insert into TEST04 values (1,'haha','12345');	
select * from TEST04;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

四、創(chuàng)建外鍵約束

保證數(shù)據(jù)的完整性和一致性
外鍵的定義:如果同一個(gè)屬性字段x在表一中是主鍵,而在表二中不是主鍵,則字段x稱(chēng)為表二的外鍵。

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

注意:與外鍵關(guān)聯(lián)的主表的字段必須設(shè)置為主鍵,要求從表不能是臨時(shí)表,主從表的字段具有相同的數(shù)據(jù)類(lèi)型、字符長(zhǎng)度和約束

例:create table TEST04 (hobid int(4),hobname varchar(50));
create table TEST05 (id int(4) primary key auto_increment,name varchar(50),age int(4),hobid int(4));

alter table TEST04 add constraint PK_hobid primary key(hobid);
alter table TEST05 add constraint FK_hobid foreign key(hobid) references TEST04(hobid);

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

例:添加數(shù)據(jù)記錄
insert into TEST05 values (1,'zhangsan','20',1);
insert into TEST04 values (1,'sleep');
insert into TEST05 values (1,'zhangsan',20,1);

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

例:drop table TEST04;
drop table TEST05;
drop table TEST04;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例
注:如果要?jiǎng)h除外鍵約束字段
先刪除外鍵約束,再刪除外鍵名,此處不演示

show create table TEST05;
alter table TEST05 drop foreign key FK_hobid;
alter table TEST05 drop key FK_hobid;
desc TEST05;

MySQL中6種常見(jiàn)的約束

主鍵約束primary key
外鍵約束foreign key
非空約束not null
唯一約束unique [key
默認(rèn)值約束default
自增約束auto_increment

五、數(shù)據(jù)庫(kù)用戶(hù)管理

1、新建用戶(hù)

CREATE USER '用戶(hù)名'@'來(lái)源地址' [IDENTIFIED BY [PASSWORD] '密碼'];

‘用戶(hù)名’:指定將創(chuàng)建的用戶(hù)名

‘來(lái)源地址’:指定新創(chuàng)建的用戶(hù)可在哪些主機(jī)上登錄,可使用IP地址、網(wǎng)段、主機(jī)名的形式,本地用戶(hù)可用localhost,允許任意主機(jī)登錄可用通配符%

‘密碼’:若使用明文密碼,直接輸入’密碼’,插入到數(shù)據(jù)庫(kù)時(shí)由Mysql自動(dòng)加密;
------若使用加密密碼,需要先使用SELECT PASSWORD(‘密碼’); 獲取密文,再在語(yǔ)句中添加 PASSWORD ‘密文’;
------若省略“IDENTIFIED BY”部分,則用戶(hù)的密碼將為空(不建議使用)

例:create user 'zhangsan'@'localhost' identified by '123123';
select password('123123');
create user 'lisi'@'localhost' identified by password '*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1';

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例


2、查看用戶(hù)信息

創(chuàng)建后的用戶(hù)保存在 mysql 數(shù)據(jù)庫(kù)的 user 表里

USE mysql;
SELECT User,authentication_string,Host from user;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

3、重命名用戶(hù)

RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost';
SELECT User,authentication_string,Host from user;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

4、刪除用戶(hù)

DROP USER 'lisi'@'localhost';
SELECT User,authentication_string,Host from user;

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

5、修改當(dāng)前登錄用戶(hù)密碼

SET PASSWORD = PASSWORD('abc123');
quit
mysql -u root -p

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

6、修改其他用戶(hù)密碼

SET PASSWORD FOR 'wangwu'@'localhost' = PASSWORD('abc123');
use mysql;
SELECT User,authentication_string,Host from user;

7、忘記 root 密碼的解決辦法

1、修改 /etc/my.cnf 配置文件,不使用密碼直接登錄到 mysql

vim /etc/my.cnf
[mysqld]
skip-grant-tables					#添加,使登錄mysql不使用授權(quán)表
systemctl restart mysqld
mysql								#直接登錄

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例
MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

2、使用 update 修改 root 密碼,刷新數(shù)據(jù)庫(kù)

UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('112233') where user='root';
FLUSH PRIVILEGES;
quit

再把 /etc/my.cnf 配置文件里的 skip-grant-tables 刪除,并重啟 mysql 服務(wù)。
mysql -u root -p
112233

MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例

六、數(shù)據(jù)庫(kù)用戶(hù)授權(quán)

1、授予權(quán)限

GRANT語(yǔ)句:專(zhuān)門(mén)用來(lái)設(shè)置數(shù)據(jù)庫(kù)用戶(hù)的訪(fǎng)問(wèn)權(quán)限。當(dāng)指定的用戶(hù)名不存在時(shí),GRANT語(yǔ)句將會(huì)創(chuàng)建新的用戶(hù);當(dāng)指定的用戶(hù)名存在時(shí),GRANT 語(yǔ)句用于修改用戶(hù)信息。

GRANT 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 TO '用戶(hù)名'@'來(lái)源地址' [IDENTIFIED BY '密碼'];

#權(quán)限列表:用于列出授權(quán)使用的各種數(shù)據(jù)庫(kù)操作,以逗號(hào)進(jìn)行分隔,如“select,insert,update”。使用“all”表示所有權(quán)限,可授權(quán)執(zhí)行任何操作。

#數(shù)據(jù)庫(kù)名.表名:用于指定授權(quán)操作的數(shù)據(jù)庫(kù)和表的名稱(chēng),其中可以使用通配符“*”。*例如,使用“kgc.*”表示授權(quán)操作的對(duì)象為 kgc數(shù)據(jù)庫(kù)中的所有表。

#'用戶(hù)名@來(lái)源地址':用于指定用戶(hù)名稱(chēng)和允許訪(fǎng)問(wèn)的客戶(hù)機(jī)地址,即誰(shuí)能連接、能從哪里連接。來(lái)源地址可以是域名、IP 地址,還可以使用“%”通配符,表示某個(gè)區(qū)域或網(wǎng)段內(nèi)的所有地址,如“%.lic.com”、“192.168.184.%”等。

#IDENTIFIED BY:用于設(shè)置用戶(hù)連接數(shù)據(jù)庫(kù)時(shí)所使用的密碼字符串。在新建用戶(hù)時(shí),若省略“IDENTIFIED BY”部分, 則用戶(hù)的密碼將為空。

#允許用戶(hù)wangwu在本地查詢(xún) CLASS 數(shù)據(jù)庫(kù)中所有表的數(shù)據(jù)記錄,但禁止查詢(xún)其他數(shù)據(jù)庫(kù)中的表的記錄。

例:
GRANT select ON CLASS.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';
quit;
mysql -u wangwu -p
123456
show databases;
use information_schema;
show tables;
select * from INNODB_SYS_TABLESTATS;

#允許用戶(hù)wangwu在本地遠(yuǎn)程連接 mysql ,并擁有所有權(quán)限。

quit;
mysql -u root -p112233
GRANT ALL PRIVILEGES ON *.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';

flush privileges;
quit

mysql -u wangwu -p123456
create database SCHOOL;

2、查看權(quán)限

SHOW GRANTS FOR 用戶(hù)名@來(lái)源地址;

例:
SHOW GRANTS FOR 'wangwu'@'localhost';

3、撤銷(xiāo)權(quán)限

REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 FROM 用戶(hù)名@來(lái)源地址;

例:quit;
mysql -u root -p112233
SHOW GRANTS FOR 'wangwu'@'localhost';
REVOKE SELECT ON "CLASS".* FROM 'wangwu'@'localhost';

SHOW GRANTS FOR 'wangwu'@'localhost';

#USAGE權(quán)限只能用于數(shù)據(jù)庫(kù)登陸,不能執(zhí)行任何操作;USAGE權(quán)限不能被回收,即 REVOKE 不能刪除用戶(hù)。

flush privileges;

以上是“MySQL數(shù)據(jù)庫(kù)高級(jí)操作示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI