您好,登錄后才能下訂單哦!
小編給大家分享一下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;
一、克隆表
將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中
方法一
例:create table TEST01 like TEST; select * from TEST01; desc TEST01; insert into TEST01 select * from TEST; select * from TEST01;
方法二
例:create table TEST02 (select * from TEST); select * from TEST02;
二、清空表,刪除表內(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ě)入記錄
例: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;
方法二
例: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)始重新記錄。
三、創(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;
四、創(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);
例:添加數(shù)據(jù)記錄 insert into TEST05 values (1,'zhangsan','20',1); insert into TEST04 values (1,'sleep'); insert into TEST05 values (1,'zhangsan',20,1);
例:drop table TEST04; drop table TEST05; drop table TEST04;
注:如果要?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';
2、查看用戶(hù)信息
創(chuàng)建后的用戶(hù)保存在 mysql 數(shù)據(jù)庫(kù)的 user 表里
USE mysql; SELECT User,authentication_string,Host from user;
3、重命名用戶(hù)
RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost'; SELECT User,authentication_string,Host from user;
4、刪除用戶(hù)
DROP USER 'lisi'@'localhost'; SELECT User,authentication_string,Host from user;
5、修改當(dāng)前登錄用戶(hù)密碼
SET PASSWORD = PASSWORD('abc123'); quit mysql -u root -p
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 #直接登錄
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
六、數(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è)資訊頻道!
免責(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)容。