數(shù)據(jù)表高級(jí)操作
復(fù)制表及內(nèi)容
#復(fù)制表及內(nèi)容
create table copy1 like zh1 ; ? ?#復(fù)制格式,通過(guò)LIKE方法,復(fù)制zh1表結(jié)構(gòu)生成copy1表
insert into copy1?select * from zh1; ? ? ?#備份內(nèi)容
?
??克隆表
克隆表,將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中
CREATE TABLE test01 (SELECT * from zh1); ? #復(fù)制zh1 表數(shù)據(jù)到test01中
獲取數(shù)據(jù)表的表結(jié)構(gòu)、索引等信息
#獲取數(shù)據(jù)表的表結(jié)構(gòu)、索引等信息
show create table test01\G ? ?
SELECT * from test01;
?
?清空表,刪除表內(nèi)的所有數(shù)據(jù)
清空表,刪除表內(nèi)的所有數(shù)據(jù)
方法一:
delete from copy1;
#DELETE清空表后,返回的結(jié)果內(nèi)有刪除的記錄條目;?
DELETE 工作時(shí)是一行一行的刪除記錄數(shù)據(jù)的;如果表中有自增長(zhǎng)字段,使用DELETE FROM 刪除
所有記錄后,再次新添加的記錄會(huì)從原來(lái)最大的記錄ID后面繼續(xù)自增寫(xiě)入記錄。
?
?
清空表,刪除表內(nèi)的所有數(shù)據(jù)
方法二:
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)始重新記錄
?
刪除的特點(diǎn):
#刪除——速度
drop> truncate > delete
安全性:
delete 最好
創(chuàng)建臨時(shí)表
臨時(shí)表創(chuàng)建成功之后,使用SHOWTABLES命令是看不到創(chuàng)建的臨時(shí)表的,臨時(shí)表會(huì)在連接退出后被銷毀。
如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用DROP TABLE語(yǔ)句手動(dòng)直接刪除臨時(shí)表。
PS:無(wú)法創(chuàng)建外鍵
CREATE TEMPORARY TABLE 表名 (字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[, ...]
[, PRIMARY KEY (主鍵名)]);
示例:
create temporary table xxx (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 xxx values (1,'zhangsan',123456,'running') ;
select * from xxx;
show tables;
quit
select * from xxx;
?
?
臨時(shí)表的使用場(chǎng)景?
1、可做測(cè)試環(huán)境使用 ?比如刪除大量數(shù)據(jù)的時(shí)候,可以創(chuàng)建臨時(shí)表 做一個(gè)復(fù)雜刪除
2、需求要今天所有的注冊(cè)王者榮耀的新號(hào)碼
MySQL中6種常見(jiàn)的約束
主鍵約束 | primary key |
外鍵約束 | foreign key |
非空約束 | not null |
唯一性約束 | unique [key|index] |
默認(rèn)值約束 | default |
自增約束 | auto_increment |
?
外鍵的定義:如果同一個(gè)屬性字段x在表一中是主鍵,而在表二中不是主鍵,則字段x稱為表二的外鍵。
創(chuàng)建外鍵約束作用(誤刪,修改),保證數(shù)據(jù)的完整性和一致性。
主鍵表和外鍵表的理解
(1)以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表)
(2)以公共關(guān)鍵字作外鍵的表為外鍵表(從表、外表)
注意:與外鍵關(guān)聯(lián)的主表的字段必須設(shè)置為主鍵。要求從表不能是臨時(shí)表,
主表外鍵字段和從表的字段具備相同的數(shù)據(jù)類型、字符長(zhǎng)度和約束。
#創(chuàng)建主表test02
create table test02 (hobid int(4),hobname varchar(50));
#創(chuàng)建從表test03
create table test03 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4)) ;
#為主表test02添加一個(gè)主鍵約束。主鍵名建議以"PK_”開(kāi)頭。
alter table test02 add constraint PK_hobid primary key (hobid);
#為從表test03表添加外鍵,并將test03表的hobid字段和test02表的hobid字段建立外鍵關(guān)聯(lián)。
外鍵名建議以"FK_”開(kāi)頭。
alter table test03 add constraint FK_hobid foreign key (hobid) references?test02 (hobid);
#可以使用查詢表語(yǔ)句結(jié)構(gòu)命令查看外鍵關(guān)聯(lián)
show create table test03
?
desc test02;
desc test03;
?
注意事項(xiàng):
#插入新的數(shù)據(jù)記錄時(shí),要先主表再?gòu)谋?insert into test02 values(1,'runing');
insert into test03 values(1,'zhangsan',18,1);
#刪數(shù)數(shù)據(jù)記錄時(shí),要先從表再主表,也就是說(shuō)刪除主鍵表時(shí)必須先刪除其他與之關(guān)聯(lián)的表。
drop tables test03;
drop tables test02;
#查看和刪除外鍵約束
#如果要?jiǎng)h除外鍵約束字段先刪除外鍵約束,再刪除外鍵名
show create table test03;
alter table test03 drop foreign key FK_hob;
alter table test03 drop key FK_hob;
desc test03;
數(shù)據(jù)庫(kù)用戶管理
新建用戶
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';
?
查看用戶信息
創(chuàng)建后的用戶保存在mysql 數(shù)據(jù)庫(kù)的user表里
USE mysql;
SELECT User,authentication_string,Host from user;
?
重命名指定
RENAME USER 'xxx'@'localhost' TO 'abc'@'localhost';
?
刪除用戶
DROP USER 'abc'@'localhost' ;
?
修改當(dāng)前密碼
SET PASSWORD = PASSWORD('abc123');
修改其他用戶密碼
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123');
?
忘記root密碼的解決辦法
修改/etc/my.cnf 配置文件,免密登陸mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables ? ?#添加,使登錄mysql不使用授權(quán)表
systemctl restart mysqld
mysql ? ?#直接登錄
然后使用SQL語(yǔ)句修改密碼????????
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
FLUSH PRIVILEGES;
quit
mysql -u root -pabc123
PS:最后再把/etc/my.cnf 配置文件里的skip-grant-tables 刪除,并重啟mysql服務(wù)
數(shù)據(jù)庫(kù)用戶授權(quán)
授予權(quán)限
grant 提權(quán)
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 TO '用戶名'@'來(lái)源地址' [IDENTIFIED BY '密碼'];
grant all privileges on *.* to 'xxx'@'%' identified by '123456';
#權(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ì)象為school數(shù)據(jù)庫(kù)中的所有表。
#'用戶名@來(lái)源地址':用于指定用戶名稱和允許訪問(wèn)的客戶機(jī)地址,即誰(shuí)能連接、能從哪里連接。來(lái)源地址可以是域名、IP地址,還可以使用“%”通配符,表示某個(gè)區(qū)域或網(wǎng)段內(nèi)的所有地址,如“%.xyw.com"、“192. 168.80.%”等。
#IDENTIFIED BY:用于設(shè)置用戶連接數(shù)據(jù)庫(kù)時(shí)所使用的密碼字符串。
在新建用戶時(shí),若省略“IDENTIFIED BY"部分,則用戶的密碼將為空。
#允許用戶zhangsan在本地查詢school數(shù)據(jù)庫(kù)中所有表的數(shù)據(jù)記錄,
但禁止查詢其他數(shù)據(jù)庫(kù)中的表的記錄。
GRANT select ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';
#允許用戶lisi在所有終端遠(yuǎn)程連接mysql,并擁有所有權(quán)限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
flush privileges; ? ?#刷新權(quán)限
quit
mysql -u zhangsan -pabc123
use test1;
show tables; .
select * from zh1;
查看權(quán)限
mysql -u root -pabc123
SHOW GRANTS FOR 用戶名@來(lái)源地址;
SHOW GRANTS FOR 'xxx'@'%';
?
撤銷權(quán)限
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫(kù)名.表名 FROM 用戶名@來(lái)源地址;
REVOKE ALL ON *.* FROM 'xxx'@'%';文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-669106.html
SHOW GRANTS FOR 'xxx'@'%';
#USAGE權(quán)限只能用于數(shù)據(jù)庫(kù)登陸,不能執(zhí)行任何操作; USAGE權(quán)限不能被回收,即REVOKE不能刪除用戶。
flush privileges;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-669106.html
授權(quán)用戶權(quán)限 all privileges ?代表了哪些權(quán)限?
insert | 插入數(shù)據(jù) |
select | 查詢數(shù)據(jù) |
update | 更新表的數(shù)據(jù) |
delete? | 刪除表中的數(shù)據(jù) |
drop? ? ? | 刪除庫(kù) 和表 |
cerate?? | 創(chuàng)建庫(kù),表 |
index? ?? | 創(chuàng)建索引 |
alter? ? ? | 更改表的屬性 |
create view?? | 創(chuàng)建視圖 |
create routine?? | 創(chuàng)建存儲(chǔ)過(guò)程 |
alter routine? ? | 修改存存儲(chǔ)過(guò)程 |
event? ? ? ?? | 事件 |
trigger on? ?? | 創(chuàng)建觸發(fā)器 |
等等 |
到了這里,關(guān)于MySQL數(shù)據(jù)庫(kù)管理高級(jí)語(yǔ)句的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!