一、MySQL常用的6大約束
- primary key主鍵約束:字段的值不能重復(fù),不能為null,一個(gè)表只能有一個(gè)主鍵
- unique key唯一性約束:字段的值不能重復(fù),能為null,一個(gè)表可有多個(gè)唯一鍵
- not null非空約束:字段的值不能為null
- default默認(rèn)值約束: 字段的值如果沒(méi)有設(shè)置則使用默認(rèn)值自動(dòng)填充
- auto_increment自增約束:字段的值如果沒(méi)有設(shè)置,默認(rèn)會(huì)從1開(kāi)始遞增1,要求自增字段必須為主鍵字段
- foreign key外鍵約束:保證相關(guān)聯(lián)表數(shù)據(jù)的完整性和一致性
二、數(shù)據(jù)表的高級(jí)操作
1.克隆表
方法一:
create table test01 like jj; #通過(guò) LIKE 方法,復(fù)制 jj 表結(jié)構(gòu)生成 test01 表
insert into test01 select * from jj;
#此方法能保證 新表的表結(jié)構(gòu)、表數(shù)據(jù) 跟舊表都是一致的
方法二:
CREATE TABLE test02 (SELECT * from KY08);
#此方法創(chuàng)建的新表的表數(shù)據(jù)和舊表是一樣的,但可能會(huì)出現(xiàn)新表的表結(jié)構(gòu)和舊表的不一致
show create table test02\G #獲取數(shù)據(jù)表的表結(jié)構(gòu)、索引等信息
SELECT * from test02;
2.清空表,刪除表內(nèi)的所有數(shù)據(jù)
方法一:
delete from test01;
#DELETE清空表后,返回的結(jié)果內(nèi)有刪除的記錄條目;DELETE工作時(shí)是一行一行的刪除記錄數(shù)據(jù)的;如果表中有自增長(zhǎng)字段,使用DELETE FROM 刪除所有記錄后,再次新添加的記錄會(huì)從原來(lái)最大的記錄 ID 后面繼續(xù)自增寫(xiě)入記錄。
方法二:
truncate table test01;
#TRUNCATE 清空表后,沒(méi)有返回被刪除的條目;TRUNCATE 工作時(shí)是將表結(jié)構(gòu)按原樣重新建立,因此在速度上 TRUNCATE 會(huì)比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表內(nèi)數(shù)據(jù)后,ID 會(huì)從 1 開(kāi)始重新記錄。
3.創(chuàng)建臨時(shí)表
臨時(shí)表創(chuàng)建成功之后,使用SHOW TABLES命令是看不到創(chuàng)建的臨時(shí)表的,臨時(shí)表會(huì)在連接退出后被銷毀。 如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用 DROP TABLE 語(yǔ)句手動(dòng)直接刪除臨時(shí)表。
CREATE TEMPORARY TABLE 表名 (字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[,...][,PRIMARY KEY (主鍵名)]);
4.創(chuàng)建外鍵約束,保證數(shù)據(jù)的完整性和一致性
外鍵的定義:如果同一個(gè)屬性字段X在表一中是主鍵,而在表二中不是主鍵,則字段X稱為表二的外鍵
主鍵表和外鍵表的理解:
(1)以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表)
(2)以公共關(guān)鍵字作外鍵的表為外鍵表(從表、外表)
注意:與外鍵關(guān)聯(lián)的主表的字段必須設(shè)置為主鍵。要求從表不能是臨時(shí)表,主從表的字段具備相同的數(shù)據(jù)類型、字符長(zhǎng)度和約束。
#創(chuàng)建主表 profession
create table profession (pid int(4),proname varchar(50));
#創(chuàng)建從表 student
create table student (id int(4) primary key auto_increment,name varchar(10),age int(3),proid int(4));
#為主表 profession 添加一個(gè)主鍵約束。主鍵名建議以“PK_”開(kāi)頭。
alter table profession add constraint PK_pid primary key (pid);
#為從表 student 表添加外鍵,并將 student 表的 proid 字段和 profession 表的 pid 字段建立外鍵關(guān)聯(lián)。外鍵名建議以“FK_”開(kāi)頭。
alter table student add constraint FK_pro foreign key (proid) references profession (pid);
desc student;
#插入新的數(shù)據(jù)記錄時(shí),要先主表再?gòu)谋?insert into profession values(1,'云計(jì)算');
insert into profession values(2,'大數(shù)據(jù)');
insert into student values(1,'zhangsan',18,1);
insert into student values(2,'lisi',19,1);
insert into student values(3,'wangwu',20,2);
#刪數(shù)數(shù)據(jù)記錄時(shí),要先從表再主表,也就是說(shuō)刪除主鍵表的記錄時(shí)必須先刪除其他與之關(guān)聯(lián)的表中的記錄。
delete from student where proid=1;
delete from profession where pid=1;
#查看和刪除外鍵約束
show create table student;
desc student;
alter table student drop foreign key FK_pro;
alter table student drop key FK_pro;
三、數(shù)據(jù)用戶管理
1.新建用戶
CREATE USER '用戶名'@'來(lái)源地址' [IDENTIFIED BY [PASSWORD] '密碼'];
----------------------------------------------------------------------------------------------------------
'用戶名':指定將創(chuàng)建的用戶名
'來(lái)源地址':指定新創(chuàng)建的用戶可在哪些主機(jī)上登錄,可使用IP地址、網(wǎng)段、主機(jī)名的形式,本地用戶可用localhost,允許任意主機(jī)登錄可用通配符%
'密碼':若使用明文密碼,直接輸入'密碼',插入到數(shù)據(jù)庫(kù)時(shí)由Mysql自動(dòng)加密;
若使用加密密碼,需要先使用SELECT PASSWORD('密碼'); 獲取密文,再在語(yǔ)句中添加 PASSWORD '密文';
若省略“IDENTIFIED BY”部分,則用戶的密碼將為空(不建議使用)
----------------------------------------------------------------------------------------------------------
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';
SELECT PASSWORD('abc123');
CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
2.查看用戶信息
#創(chuàng)建后的用戶保存在 mysql 數(shù)據(jù)庫(kù)的 user 表里
USE mysql;
SELECT User,authentication_string,Host from user;
#查看當(dāng)前登錄用戶
select user();
3.重命名用戶
RENAME USER 'zhangsan'@'localhost' TO 'lisi'@'localhost';
4.刪除用戶
DROP USER 'lisi'@'localhost';
5.修改當(dāng)前登錄用戶密碼
SET PASSWORD = PASSWORD('abc123');
6.修改其他用戶密碼
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123');
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-482998.html
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('abc123') where user='root';
FLUSH PRIVILEGES;
quit
mysql -u root -pabc123
注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 刪除,并重啟 mysql 服務(wù)。
四、數(shù)據(jù)庫(kù)用戶授權(quán)
1.授予權(quán)限
GRANT語(yǔ)句:專門(mén)用來(lái)設(shè)置數(shù)據(jù)庫(kù)用戶的訪問(wèn)權(quán)限。當(dāng)指定的用戶名不存在時(shí),GRANT語(yǔ)句將會(huì)創(chuàng)建新的用戶;當(dāng)指定的用戶名存在時(shí), GRANT 語(yǔ)句用于修改用戶信息。
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 TO '用戶名'@'來(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ù)和表的名稱,其中可以使用通配符“*”。例如,使用“kgc.*”表示授權(quán)操作的對(duì)象為 kgc數(shù)據(jù)庫(kù)中的所有表。
#'用戶名@來(lái)源地址':用于指定用戶名稱和允許訪問(wèn)的客戶機(jī)地址,即誰(shuí)能連接、能從哪里連接。來(lái)源地址可以是域名、IP地址,還可以使用“%”通配符,表示某個(gè)區(qū)域或網(wǎng)段內(nèi)的所有地址,如“%.kgc.com”、“192.168.80.%”等。
#IDENTIFIED BY:用于設(shè)置用戶連接數(shù)據(jù)庫(kù)時(shí)所使用的密碼字符串。在新建用戶時(shí),若省略“IDENTIFIED BY”部分,則用戶的密碼將為空。
----------------------------------------------------------------------------------------------------------
#允許用戶 zhangsan 在本地查詢 kgc 數(shù)據(jù)庫(kù)中 所有表的數(shù)據(jù)記錄,但禁止查詢其他數(shù)據(jù)庫(kù)中的表的記錄。
GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';
#允許用戶 lisi 在所有終端遠(yuǎn)程連接 mysql ,并擁有所有權(quán)限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
flush privileges;
quit
mysql -u zhangsan -p123456
use kgc;
show tables;
select * from KY08;
2.查看權(quán)限
SHOW GRANTS FOR 用戶名@來(lái)源地址;
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-482998.html
3.撤銷權(quán)限
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 FROM 用戶名@來(lái)源地址;
例:
REVOKE ALL ON *.* FROM 'lisi'@'%';
SHOW GRANTS FOR 'lisi'@'%';
#USAGE權(quán)限只能用于數(shù)據(jù)庫(kù)登陸,不能執(zhí)行任何操作;USAGE權(quán)限不能被回收,即 REVOKE 不能刪除用戶。
flush privileges;
到了這里,關(guān)于MySQL數(shù)據(jù)庫(kù)用戶管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!